Порой возникает необходимость изменить размер виртуальных дисков для 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-утилит не пройдёт даром.
Полезные ссылки:
- Пост в поддержку утилиты fsextender на Хабре
- Руководство по изменению размера vdi-диска: VBoxManage modifyhd –resize