Резюме:
VBoxManage.exe modifyhd --resize
может увеличить (но не уменьшить) логический размер образа диска (размер, видимый гостевой ОС).
VBoxManage.exe modifyhd inputfile.vdi --compact
может уменьшить размер образа физического диска (размер файла образа на диске, видимый операционной системой хоста). Это, однако, не меняет размер логического диска. Обратите внимание, что это работает только в том случае, если в гостевой ОС сначала было обнулено свободное место.
modifyhd
работает только с вариантом динамического формата ("динамически размещаемое изображение").
modifyhd
работает только с VDI и VHD форматами изображений.
- Если вы используете моментальные снимки, вам придется клонировать последний VDI моментального снимка из подпапки "Снимки".
Подробнее см. Раздел 8.23.VBoxManage modifyhd в руководстве.
Причина, по которой уменьшение размера логического диска VDI еще не было реализовано, состоит в том, чтобы предотвратить повреждение данных, которое может произойти, и в результате вы получите не загружаемые виртуальные машины. Поэтому при использовании параметра --resize
новый размер диска должен быть больше текущего размера. Он не может быть меньше или равен текущему размеру. Другими словами, размер диска 40 ГБ можно изменить только до 41 ГБ или больше, его нельзя изменить до 40 ГБ (это просто глупо) или 39 ГБ или меньше.
Старые версии VirtualBox создавали файлы VDI как "фиксированный" вариант формата. Новая настройка по умолчанию теперь создает варианты "динамического" формата при создании новых файлов VDI (образ виртуального диска). (Я предполагаю, что это так с момента введения варианта динамического формата, в зависимости от того, какая версия была представлена.)
Поэтому сообщение об ошибке "операция для этого формата еще не реализована" означает, что в вашем файле VDI используется "фиксированный" вариант формата. Чтобы обойти эту проблему, вам придется клонировать VDI-файл с помощью команды clonehd
. Чтобы посмотреть, в каком формате находится ваш VDI-файл, вы можете использовать команду showhdinfo
.
Рабочий пример
Показать VDI информацию о текущем диске.
Введите команду: vboxmanage.exe showhdinfo path\inputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID: 132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity: 40960 MBytes
Size on disk: 40962 MBytes
In use by VMs: sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)
C:\Program Files\Oracle\VirtualBox>
Видите, где написано "фиксированный дефолт"? Вот почему он выдает ошибку выше, когда вы пытаетесь изменить его размер.
Клонировать старый файл VDI в новый файл VDI.
Входная команда: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c
C:\Program Files\Oracle\VirtualBox>
Вуаля! Старый файл теперь клонирован в новый файл. Поскольку в новых версиях VirtualBox по умолчанию используется вариант "динамического" формата, вам не нужно это явно определять. Хотя, если вы работаете с более старой версией VirtualBox, вам может потребоваться установить параметр "динамический" (если он вообще доступен), чтобы обеспечить лучшую совместимость и / или гибкость с будущими версиями VirtualBox.
Показать информацию VDI о клонированном диске.
Входная команда: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 40960 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
Видите, как сейчас написано "динамический дефолт"? Как мило!
(На стороне заметка! Причина, по которой здесь указывается физический размер 7806 МБ, заключается в том, что я использовал опцию --compact
в исходном файле VDI, пытаясь обеспечить преобразование в вариант динамического формата. Просто то, что я прочитал на форуме VirtualBox, оно предположительно работало бы со старыми версиями, так что я подумал, что могу попробовать. Это не сработало.)
Изменение размера клонированного диска.
Входная команда: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
C:\Program Files\Oracle\VirtualBox>
Успех! Никакого формата фигня больше нет. Только не забудьте изменить размер нового клонированного диска, а не исходного. Имейте в виду, что размер выражается в МБ. Я считаю, что вы можете использовать, например, 51200
а также 50G
(или, возможно, "ГБ"). Существует также опция --resizebyte
которую можно использовать для выражения размера в байтах.
Показать информацию VDI об измененном диске клона.
Входная команда: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 51200 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
Это оно! Отсюда нужно добавить этот клонированный диск в качестве нового VDI для виртуальной машины. Вы делаете это внутри VirtualBox. Я не буду вдаваться в это. Если вы смогли прочитать и понять это до сих пор, то вам, вероятно, больше не нужно руководствоваться. Вы можете удалить старый "исправленный" файл или оставить его в качестве резервной копии. Убедитесь, что вы протестировали новый файл VDI, прежде чем удалить исходный файл.
Заметка! Вы не сразу увидите новый размер клонированного диска. Вы должны загрузить виртуальную машину вместе с ней, а затем использовать инструмент управления разделами, чтобы расширить раздел для заполнения виртуального диска (или создать больше разделов). Для Windows просто запустите diskmgmt.msc
и вы сможете расширить раздел там.
Скриншоты
Ссылка