Почему я не могу изменить размер динамического 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)

Это почему?

3 ответа

Решение

Использовать VBoxManage modifyhd у нас есть следующие предостережения:

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

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

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

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

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

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

Не уверен, почему ребята из VirtualBox не могли использовать вышесказанное для реализации этого, вместо того, чтобы бросать VBOX_E_NOT_SUPPORTED... хотя бы ссылку на это:)

Вот весь процесс, постараюсь быть максимально подробным

  1. Убедитесь, что машина, размер которой вы собираетесь увеличить, находится в состоянии "Выключение" (а не в "сохраненном" или любом другом состоянии).

В моем случае это машина размером 32 ГБ, и она будет называться SMALL VM.

  1. Создайте новую виртуальную машину с новым желаемым размером

В моем случае я решил создать новую виртуальную машину объемом 70 ГБ, восстанавливая содержимое маленькой машины внутри этой новой виртуальной машины, и я буду называть ее БОЛЬШОЙ виртуальной машиной.

  1. Запустите команду VBoxManage list hdds или Откройте диспетчер виртуальных носителей, чтобы получить GUID МАЛЫЙ ВМ (источник), а также GUID БОЛЬШОЙ ВМ (пункт назначения)

С помощью этих GUID создайте следующую команду

VBoxManage clonemedium SMALL_VM_GUID LARGE_VM_GUID - существующий

В моем случае ORIGIN - SMALL VM это: 39143127-42b6-478a-afb2-5e58f14218b

В моем случае DESINATION - LARGE VM - это: bb808b5b-b88c-49b2-a646-3414af906d84

Конечно, ваши GUID будут отличаться от моих

Убедитесь, что вы не инвертировали GUID, иначе новый компьютер заменит содержимое вашего существующего компьютера!!!!

Убедившись, что вы не смешали источник с пунктом назначения, запустите эту команду:

$ VBoxManage clonemedium 39143127-42b6-478a-afb2-5e58f14218b2 bb808b5b-b88c-49b2-a646-3414af906d84 - существует

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Носитель клонов создан в формате 'VDI'. UUID: bb808b5b-b88c-49b2-a646-3414af906d84

  1. Запустите новую БОЛЬШУЮ виртуальную машину, которую вы создали на шаге 2.

  2. В окне "Управление компьютером" проверьте, действительно ли на устройстве больше неиспользуемого / неформатированного размера.

  3. Если вы предпочитаете, вы можете запустить "chkdsk" на диске C, чтобы убедиться, что все готово (это может занять две перезагрузки на БОЛЬШОЙ ВМ)

  4. Используя gparted-live*.iso, "вставьте его" в новую виртуальную машину и перезагрузите ее

  5. Загрузиться в gparted среде

  6. Расширьте свой раздел и сохраните изменения

  7. "Извлеките" gparted-live *.iso, чтобы снова загрузиться в Windows

  8. В окне "Управление компьютером" проверьте, что на машине теперь установлен диск "С" большего размера для решения ваших проблем со скоростью.

У меня были скриншоты этого процесса, но я решил не включать их, так как это сделает мой ответ большим и пугающим для людей, которые "спешат" получить свободное место на своей виртуальной машине Windows

Нашел более простой обходной путь, по крайней мере для меня: (сначала обязательно клонируйте свою машину, в качестве резервной копии на случай, если gparted что-то испортит)

  1. Увеличьте размер виртуального диска в Virtual Manager

  2. В настройках ВМ-> хранилище-> оптический привод:

    • Включить live CD
    • Свяжите оптический привод с файлом.iso gparted
  3. Загрузите виртуальную машину. он войдет в дистрибутив gparted linux

  4. Измените размер раздела

  5. Завершение работы ВМ

  6. Отключите ISO-файл от оптического диска ("Удалить диск из виртуального привода")

  7. Теперь виртуальная машина должна иметь новый размер диска. Может попросить chkdsk.

Другие вопросы по тегам