Порой возникает необходимость изменить размер виртуальных дисков для VirtualBox-а, в моём случае диски оказываются в формате vmdk и руководство пользователя предлагает нам  скопировать диск в формате VDI, изменить размер полученного vdi и вновь скопировать результат  в vmdk. Всё вроде  бы просто, но требует наличие на хосте свободного места под “промежуточный” диск. На этот раз ищем способ проще. На форуме поддержки VMware была найдена 32-битная утилита vmware-vdiskmanager для работы с vmdk напрямую, минуя стадию vdi, к  счастью мы имеем возможность ей воспользоваться (спасибо multilib):

Добываем утилиту:


wget "http://kb.vmware.com/selfservice/viewAttachment.do?attachID=1023856-vdiskmanager-linux.7.0.1.zip&documentID=1023856" -O 1023856-vdiskmanager-linux.7.0.1.zip
unzip 1023856-vdiskmanager-linux.7.0.1.zip
mv 1023856-vmware-vdiskmanager-linux.7.0.1 ~/bin/vmware-vdiskmanager

Изменяем размер целевого диска


vmware-vdiskmanager -x 40800M ~/VirtualBox\ VMs/LowSizedVM/LowSizedVM-disk1.vmdk 

Используем новое пространство в гостевом окружении

Здесь должна была быть ссылка на resize2fs, но напрямую ей воспользоваться у меня не получилось*, я воспользовался утилитой fsextender, 64-битные бинарник можно взять у автора, но мне понадобился 32bit, который пришлось собрать на 64-битном хосте:


go get -t github.com/rekby/fsextender
cd src/github.com/rekby/fsextender/fsextender
GOOS=linux GOARCH=386 go build -compiler gccgo --gccgoflags "-static"

Полученный бинарник закачиваем на целевую ось и используем:


fsextender /dev/sda1 --do

В защиту resize2fs – проблема с её использованием возникла из-за “нетрадиционно” разбитого диска и в следующий раз столкнувшись с похожей проблемой я найду решение без сторонних утилит, тем не менее опыт кросскомпиляции GO-утилит не пройдёт даром.

Полезные ссылки:

Увеличиваем размер vmdk
Tagged on:     

Leave a Reply