Почему я не могу изменить динамическое VDI с помощью команды modifyhd?

Я вижу здесь. Как увеличить размер жесткого диска виртуальной машины .

Он должен работать с командой вроде

VBoxManage modifyhd xp.vdi --resize 2000 

Когда VDI имеет фиксированный размер, вы можете получить эту ошибку:

 ~/VirtualBox VMs/xp$ VBoxManage modifyhd xp.vdi --resize 2000 0%... Progress state: VBOX_E_NOT_SUPPORTED VBoxManage: error: Resize hard disk operation for this format is not implemented yet! 

Дискуссия и решение этой проблемы здесь .

Но я получаю эту ошибку, пока мой VDI динамичен

 ~/VirtualBox VMs/xp$ VBoxManage showhdinfo xp.vdi UUID: 8880dc58-cd0c-4ffb-a583-f8dd50eda98e Parent UUID: base State: created Type: normal (base) Location: /home/cip/VirtualBox VMs/xp/xp.vdi Storage format: VDI Format variant: dynamic default Capacity: 8192 MBytes Size on disk: 4693 MBytes In use by VMs: xp (UUID: e2b70963-3c26-41cf-88f6-4e03ca721e2d) 

Почему это?

Чтобы использовать VBoxManage modifyhd мы имеем следующие оговорки:

  • Диски должны быть в формате .VDI или .VHD.
  • Диски должны быть в динамическом формате, а не фиксированном (фиксированный диск может быть преобразован в динамический, создав клон).
  • Размер диска влияет только на логический размер, а не на физический размер.
  • Уменьшение размера диска или его физического размера невозможно.
  • Чтобы уменьшить физический размер, мы должны заполнить неиспользуемое пространство диска 0 .
  • Возможно, Windows VDI придется дефрагментировать, прежде чем уменьшать физический размер.

В приведенном выше примере было выполнено попытку изменить размер динамического диска с физическим размером от 4693 МБ до 2000 МБ, что невозможно. Отсюда и ошибка.

Этот обходной путь работал на меня:

  1. Выключение машины
  2. Создайте новый диск через интерфейс администратора с требуемым размером.
  3. Использовать клонэмедиум VBoxManage с флагом --existing

     VBoxManage clonemedium <source-guid> <destinatin-guid> --existing 

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

Не уверен, почему ребята из VirtualBox не могли использовать выше, чтобы реализовать это, вместо того, чтобы бросать VBOX_E_NOT_SUPPORTED … по крайней мере, ссылку на это 🙂