Поиск

понедельник, 2 апреля 2018 г.

Увеличение размера диска VirtualBox содержащего снапшоты

Столкнулся с нехваткой свободного места на диске при установке довольно объемного справочника на семи DVD дисках в виртуальную машину VirtualBox. Изначальный размер единственного диска виртуальной машины был 40G и я понадеялся на то, что будет устанавливаться только часть данных относящихся к русскому языку. Вместо этого я столкнулся с нехваткой свободного места на предпоследнем диске.

Было лениво отменять установку, откатываться к предыдущему снапшоту и добавлять отдельный диск. Вместо этого решил изменить размер существующего диска, а поскольку он содержит снапшоты, то заодно и их.

$ cd ~/vbox/win7
$ VBoxManage modifyhd win7.vdi --resize 80000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
$ VBoxManage modifyhd Snapshots/\{7bab8995-fe72-4805-8863-8833068098b3\}.vdi --resize 80000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
$ VBoxManage modifyhd Snapshots/\{c3250adc-b14d-433c-86d9-37987ca2a246\}.vdi --resize 80000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

После увеличения размера диска останется изменить размер файловой системы внутри виртуальной машины и продолжить установку.

Чтобы проверить что подобное увеличение диска и снапшотов ничего не сломало пробую удалить последний снапшот.

$ VBoxManage snapshot win7 delete 37c59b83-2eac-4af8-98fc-c207bf1a4168
0%...
Progress state: NS_ERROR_OUT_OF_MEMORY
VBoxManage: error: Snapshot operation failed
VBoxManage: error: Unable to merge storage '/home/andrey/vbox/win7/win7.vdi'. Not enough free storage space
VBoxManage: error: Details: code NS_ERROR_OUT_OF_MEMORY (0x8007000e), component SessionMachine, interface IMachine
VBoxManage: error: Context: "RTEXITCODE handleSnapshot(HandlerArg*)" at line 533 of file VBoxManageSnapshot.cpp

Ошибка из-за нехватки свободного места на локальном диске. Очистить диск быстро не получится и я перекинул виртуальную машину на сервер и смонтировал директорию через gvfs:

$ gvfs-mount -a //server/share
$ mv ~/vbox/win7{,~}
$ ln -s /run/user/1000/gvfs/smb-share:server=server,share=share/tmp/win7 ~/vbox/win7
$ cd ~/vbox/win7
$ VBoxManage snapshot win7 delete 37c59b83-2eac-4af8-98fc-c207bf1a4168
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...
Progress state: VBOX_E_FILE_ERROR
VBoxManage: error: Snapshot operation failed
VBoxManage: error: Could not merge the medium '/home/andrey/vbox/win7/Snapshots/{7bab8995-fe72-4805-8863-8833068098b3}.vdi' to '/home/andrey/vbox/win7/Snapshots/{c3250adc-b14d-433c-86d9-37987ca2a246}.vdi'.
VBoxManage: error: VD: error VERR_NET_OPERATION_NOT_SUPPORTED opening image file '/home/andrey/vbox/win7/Snapshots/{c3250adc-b14d-433c-86d9-37987ca2a246}.vdi' (VERR_NET_OPERATION_NOT_SUPPORTED)
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component MediumWrap, interface IMedium
VBoxManage: error: Context: "RTEXITCODE handleSnapshot(HandlerArg*)" at line 533 of file VBoxManageSnapshot.cpp

Тут написано, что проблема в несовместимости VirtualBox и gvfs/libsmbclient. Перемонтировал раздел через mount:

$ gvfs-mount -u smb://server/share
$ rm ~/vbox/win7
$ sudo mount -t cifs //server/share /mnt/tmp -o guest,uid=1000,gid=1000
$ ln -s /mnt/tmp/tmp/win7 ~/vbox/win7
$ VBoxManage snapshot win7 delete b6a1fbf4-b4ba-41da-8ce2-bcd861b4b67b
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Остается вернуть файлы виртуальной машины на локальный диск.