Изменение размера дискового пространства на vagrant box

Я хотел бы дать моей коробке больше места на диске. Я пытаюсь сделать это через vagrantfile следующим образом:

Vagrant::Config.run do |config|
    # ..
    config.vm.customize ["modifyvm", :id, "--memory", 1024]
    config.vm.customize ["modifyhd", :id, "--resize", 4096]
end

это дает мне ошибку:

A customization command failed:
["modifyhd", "e87d8786-88be-4805-9c2a-45e88b8e0e56", "--resize", "4096"]

The following error was experienced:

VBoxManage: error: The given path 'e87d8786-88be-4805-9c2a-45e88b8e0e56' is not fully qualified
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Medium, interface IMedium, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 178 of file VBoxManageDisk.cpp


Please fix this customization and try again.

Я пытаюсь собрать информацию вместе из http://docs.vagrantup.com/v1/docs/config/vm/customize.html http://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi

6 ответов


вы отправляете modifyhd UUID виртуальной машины (предоставленный vagrant), в то время как он ожидает UUID VDI. Вам нужно будет использовать абсолютный путь к фактическому файлу VDI или его UUID. Вы можете использовать следующую команду, чтобы получить UUID VDI:VBoxManage showhdinfo <filename> (см. virtualbox-как проверить, что такое uuid vdi?)


Я создал новый диск, добавил и расширил старый.

Мой Vagrantfile:

Vagrant.configure(2) do |config|
config.vm.box = "bseller/oracle-standard"
config.vm.define :oracle do |oracle| 
  oracle.vm.hostname = 'oraclebox'
  oracle.vm.synced_folder ".", "/vagrant", owner: "oracle", group: "oinstall" 
  oracle.vm.network :private_network, ip: '192.168.33.13'
  oracle.vm.network :forwarded_port, guest: 1521, host: 1521
  oracle.vm.provider :virtualbox do |vb|
     vb.customize ["modifyvm", :id, "--memory", "4096"]
     vb.customize ["modifyvm", :id, "--name", "oraclebox"]
     if !File.exist?("disk/oracle.vdi")
       vb.customize [
            'createhd', 
            '--filename', 'disk/oracle', 
            '--format', 'VDI', 
            '--size', 60200
            ] 
       vb.customize [
            'storageattach', :id, 
            '--storagectl', "SATA", 
            '--port', 1, '--device', 0, 
            '--type', 'hdd', '--medium', 'disk/oracle.vdi'
            ]
     end     
  end
  oracle.vm.provision "shell", path: "shell/add-oracle-disk.sh"
  oracle.vm.provision "shell", path: "shell/provision.sh"
end
end

это создаст новый диск в

disk
    |-- oracle.vdi
shell
    |-- provision.sh
Vagrantfile

и добавьте в свою коробку. Новый диск имеет 60GB Моя раковина!--3-->

set -e
set -x

if [ -f /etc/disk_added_date ] ; then
   echo "disk already added so exiting."
   exit 0
fi

sudo fdisk -u /dev/sdb <<EOF
n
p
1


t
8e
w
EOF

sudo pvcreate /dev/sdb1
sudo vgextend VolGroup /dev/sdb1
sudo lvextend -L50GB /dev/VolGroup/lv_root
sudo resize2fs /dev/VolGroup/lv_root
date > /etc/disk_added_date

этот скрипт был адаптирован из SHC в поле bseller / oracle-standard. Полный код см. В разделе Мой проект oraclebox в GitHub


Я смотрел на это, и я не нашел никакого способа сделать это напрямую. Тем не менее, вы можете достичь эффекта, используя Анзибль как поставщица. Прежде всего, с Vagrant определенно можно создать и добавить второй диск, который вы можете добавить и смонтировать любым способом с помощью Ansible.

однако Ansible также имеет возможность запускать локальные команды (на хосте). Это с Ансиблом local_action характеристика. Я использовал его здесь в перезагрузите бродячую виртуальную машину после обновления ядра и скажите хосту подождать, пока он не перезапустится, но вы можете использовать это с действиями команды или оболочки, чтобы найти идентификатор HD, выключить виртуальную машину и настроить жесткий диск, а затем перезагрузиться. По крайней мере, теоретически.


хотя вопрос старый, но я не видел ответа, принятого.

The given path 'e87d8786-88be-4805-9c2a-45e88b8e0e56' is not fully qualified появляется, потому что UUID e87d8... является VirtualBox vm UUID, а не UUID устройства хранения данных SATA. Вы найдете UUID устройства хранения данных по VBoxManage showvminfo e87d8786-88be-4805-9c2a-45e88b8e0e56|grep vdi. Замена :id С UUID хранения SATA в линии Vagrantfile modifyhd.

это решило мою проблему.


OK... Разрешенный...

VBoxManage.exe wan'T на моем пути, поэтому я сделал это (вы должны пойти по этому пути):

C:\Program Файлы\Oracle\VirtualBox

используется команды:

VBoxManage.exe modifyhd "C:\Users\MyUser\VirtualBox VMs\MachineName\HDName.vdi " --изменить размер 20480

для 20 ГБ размер HD

Это не работает: "C:\Program Файлы\Oracle\VirtualBox\VBoxManage.exe " modifyhd "C:\Users\MyUser\VirtualBox VMs\MachineName\HDName.vdi " --изменить размер 20480

вы должны быть на пути: C:\Program файлы\Oracle\VirtualBox


вместо этого вы можете добавить новый диск. Сначала используйте Virtual box GUI для добавления другого виртуальный диск

enter image description here

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

root@linux-dev:/# fdisk -l

Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 9.9 GiB, 10632560640 bytes, 20766720 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x83312a2b

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 19816447 19814400  9.5G 83 Linux
/dev/sda2       19818494 20764671   946178  462M  5 Extended
/dev/sda5       19818496 20764671   946176  462M 82 Linux swap / Solaris

root@linux-dev:/# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x5eb328b9.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

Command (m for help): p

Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5eb328b9


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039):

Created a new partition 1 of type 'Linux' and of size 20 GiB.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5eb328b9

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 41943039 41940992  20G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

создать новый раздел диска с файловой системой ext4

root@linux-dev:/# mkfs.ext4 /dev/sdb1 
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 5242624 4k blocks and 1310720 inodes
Filesystem UUID: 0301b56a-1d80-42de-9334-cc49e4eaf7b2
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

установите раздел диска в каталог

root@linux-dev:/# mount -t ext4 /dev/sdb1 /home/chenchun
root@linux-dev:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.2G  3.3G  5.5G  38% /
udev             10M     0   10M   0% /dev
tmpfs            74M  4.4M   70M   6% /run
tmpfs           185M     0  185M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           185M     0  185M   0% /sys/fs/cgroup
none            372G  240G  133G  65% /vagrant
/dev/sdb1        20G   44M   19G   1% /home/chenchun