Установить размер хранилища при создании виртуальной машины VirtualBox


41

Есть ли способ установить размер хранилища для виртуальной машины при ее создании? Я буду использовать Vagrant, но не уверен, нужно ли это делать в VirtualBox или в настройках, которые я могу включить в Vagrantfile (я проверил документы, но там нет никаких признаков)


Найдите Google Vagrant Disk Size Virtualbox и найдите этот пост в AskUbuntu .
— eyoung100

2
@ Eyoung100 Ах, спасибо, я думаю, это подтверждает, что это не может быть сделано до создания виртуальной машины.
— a7omiton

Что ж, это возможно, если вы создадите VirtualDisk без Vagrant, но тогда вам не нужно будет использовать vagrant, если вы этого хотите.
— eyoung100

@ eyoung100 это просто казалось дополнительным шагом, когда нужно было изменить размер виртуальной машины после ее создания
— a7omiton

Vagrant уничтожает виртуальную машину после того, как вы все равно выключите Vagrant IIRC.
— eyoung100

Ответы:


23

vagrant-disksize Плагин делает это легко. Создайте Debian-9 VM с жестким диском на 20 ГБ.

минимально:

Vagrant.configure("2") do |config|
    config.vm.box = "debian/stretch64" 
    config.disksize.size = "20GB"
end

или, используя логику автоматической установки для плагина:

Vagrant.configure("2") do |config|

    required_plugins = %w( vagrant-vbguest vagrant-disksize )
    _retry = false
    required_plugins.each do |plugin|
        unless Vagrant.has_plugin? plugin
            system "vagrant plugin install #{plugin}"
            _retry=true
        end
    end

    if (_retry)
        exec "vagrant " + ARGV.join(' ')
    end

    config.vm.box = "debian/stretch64" 
    config.disksize.size = "20GB"
end

Не работает с Ubuntu 17.10 (
— Дэвид,

2
Это работало на Ubuntu 16.04 LTS. Как вы упомянули, просто установите плагин с помощью команды: vagrant plugin install vagrant-disksizeСпасибо!
— Edenshaw

1
Кажется, работает только для расширения диска, а не для его сжатия.
— ксеноид

Работал как шарм.
— будет

8

Это невозможно, если вы не знаете UUID данного диска. Если бы вы это сделали, вам понадобится следующее Vagrantfile:

Vagrant.configure("2") do |config|
  # ... (other config)

  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyhd", "disk id", "--resize", "size in megabytes"]
  end
end

где "size in megabytes"размер HD в мегабайтах, и "disk id"UUID диска ( не виртуальной машины)

Кроме того, вы можете сделать это через VBoxManage:

$ VBoxManage list hdds
[get the UUID of the disk in question from the output]
$ VBoxManage modifyhd [UUID] --resize [size in MiB]

Использование альтернативного решения не приведет к созданию дополнительного пространства для хранения на фактической виртуальной машине, или это так?
— a7omiton

Правда, он просто изменит размер жесткого диска, тогда вам придется увеличить раздел в виртуальной
— машине

7
Как уже упоминалось в других потоках, это обычно не работает, так как большинство ящиков Vagrant создаются с .vmdkфайлами виртуальных дисков, а не в .VDIформате, предпочитаемом VBoxManage.
— Марк Хадсон

@MarkHudson К сожалению, я не знал об этом (я только что сделал этот ответ, основываясь на своих знаниях о VirtualBox и документации по Vagrant, я не очень часто использую Vagrant). Спасибо за указание на это! Может ли VirtualBox не изменять размер VMDK? Я никогда не пробовал это. Буду обновлять мой ответ.
— Феликсфью

6

Я думаю Разрешающая некоторые общие вопросы о этом может помочь вам.


И это важная часть

Увеличение дискового пространства

Обычно (к сожалению) облачная базовая коробка поставляется с дисками форматов VMDK. Если вам повезло, и ваш формат диска VDI, вы можете решить это прямо так. Но VMDK не может быть расширен, поэтому вам нужно добавить еще один диск в вашу виртуальную машину. Если сделать это вручную сложно, можете ли вы представить себе это с помощью Vagrant? Ну, теперь, когда я решил, это не так сложно

Создайте скрипт под названием «bootstrap.sh» в вашем рабочем каталоге и добавьте следующие строки:

pvcreate /dev/sdb
vgextend VolGroup /dev/sdb
lvextend /dev/VolGroup/lv_root /dev/sdb
resize2fs /dev/VolGroup/lv_root

VolGroup и lv_root могут меняться на разных дистрибутивах. Но у меня это работает и в Ubuntu.

А затем добавьте этот код в ваш Vagrantfile:

...
  config.vm.provider :virtualbox do |vb|
  ...
  # Validate this should be run it once
  if ARGV[0] == "up" && ! File.exist?("./disk1.vdi")
    vb.customize [
      'createhd',
      '--filename', "./disk1.vdi",
      '--format', 'VDI',
      # 100GB
      '--size', 100 * 1024
    ]

    vb.customize [
      'storageattach', :id,
      '--storagectl', 'SATA Controller',
      '--port', 1, '--device', 0,
      '--type', 'hdd', '--medium',
      file_to_disk
    ]
  end

  if ARGV[0] == "up" && ! File.exist?("./disk1.vdi")
    # Run script to map new disk
    config.vm.provision "bash", path: "bootstrap.sh"
    # Run script to increase swap memory
    config.vm.provision "bash", path: "increase_swap.sh"
  end
...

Это создает файл VDI-диска емкостью 100 ГБ. И прилагается к вашей ОС.

Эта проблема решается, когда вы создаете облачные блоки Vagrant, такие как экземпляры AWS EC2 с Vagrant: D

Увеличение памяти подкачки

Когда я устанавливаю продукты Oracle Fusion Middleware, им требуется некоторый объем подкачки, но базовый блок поставляется с небольшим объемом подкачки.

Чтобы решить эту проблему, добавьте в свой рабочий каталог скрипт с именем «incre_swap.sh»:

#!/bin/sh

# size of swapfile in megabytes
swapsize=8000

# does the swap file already exist?
grep -q "swapfile" /etc/fstab

# if not then create it
if [ $? -ne 0 ]; then
  echo 'swapfile not found. Adding swapfile.'
  fallocate -l ${swapsize}M /swapfile
  chmod 600 /swapfile
  mkswap /swapfile
  swapon /swapfile
  echo '/swapfile none swap defaults 0 0' >> /etc/fstab
else
  echo 'swapfile found. No changes made.'
fi

# output results to terminal
df -h
cat /proc/swaps
cat /proc/meminfo | grep Swap

Если вы сейчас уничтожите и обновите свой ящик, у вас будет новый ящик с добавленной 8 ГБ памяти подкачки и 100 ГБ дополнительного дискового пространства.


Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.
— Теджас

Понял. Изменился,
— Forelax

4

Как я это сделал в Vagrantfile. Для людей, которые ищут ...

ubuntu.vm.provider "virtualbox" do |virtualbox|
  virtualbox.name = "Ubuntu_1510_#{Time.now.getutc.to_i}"
  virtualbox.customize [
      "storagectl", :id, 
      "--name", "SATAController", 
      "--controller", "IntelAHCI", 
      "--portcount", "1", 
      "--hostiocache", "on"
  ]
  virtualbox.customize [
      "clonehd", "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/box-disk1.vmdk", 
                 "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/ubuntu.vdi", 
      "--format", "VDI"
  ]
  virtualbox.customize [
      "modifyhd", "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/ubuntu.vdi",
      "--resize", 100 * 1024
  ]
  virtualbox.customize [
      "storageattach", :id, 
      "--storagectl", "SATAController", 
      "--port", "0", 
      "--device", "0", 
      "--type", "hdd",
      "--nonrotational", "on",
      "--medium", "#{ENV["HOME"]}/VirtualBox VMs/Vagrant Test Boxes/#{virtualbox.name}/ubuntu.vdi" 
  ]
end

Я сделал это, но на новом диске есть свободное пространство, как я могу выделить доступную память для активного основного раздела?
— Eifersucht

Это рабочее решение. Хотя вам придется редактировать довольно много параметров в зависимости от того, какое изображение вы используете.
— servermanfail

2

У @Anders был ответ, который работал лучше всего для меня (инициализация коробки с большим объемом памяти), но мне пришлось сделать несколько небольших изменений, которые на самом деле сделали его проще.

ubuntu.vm.provider "virtualbox" do |virtualbox|
virtualbox.name = "Ubuntu_ProjectName"

virtualbox.customize [
  "clonehd", "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/box-disk1.vmdk",   # Note that this may not be the correct file name
             "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/ubuntu.vdi", 
  "--format", "VDI"
]
virtualbox.customize [
  "modifyhd", "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/ubuntu.vdi",
  "--resize", 100 * 1024
]
virtualbox.customize [
  "storageattach", :id, 
  "--storagectl", "SCSI",  # Instead of the first customize section i just referenced the existing SCSI controller as I am on a mac which uses SCSI by default 
  "--port", "0", 
  "--device", "0", 
  "--type", "hdd",
  "--nonrotational", "on",
  "--medium", "#{ENV["HOME"]}/VirtualBox VMs/#{virtualbox.name}/ubuntu.vdi" 
]
end

1

Для Centos7 я использовал ответ Yujie, но с парой изменений. Сначала используйте контроллер IDE, отредактировав --storagectl:

    v.customize [
          'storageattach', :id,
          '--storagectl', 'IDE',
          '--port', 1, 
          '--device', 0,
          '--type', 'hdd', 
          '--medium',  ".vagrant/machines/target/virtualbox/disk1.vdi"
        ]

Затем в файле bootstrap.sh имена томов отличаются, а файловая система - XFS, поэтому

sudo pvcreate /dev/sdb
sudo vgextend VolGroup00 /dev/sdb
sudo lvextend /dev/VolGroup00/LogVol00 /dev/sdb
sudo xfs_growfs /
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.