Назад | Перейти на главную страницу

Как уменьшить виртуальный размер / емкость файла Virtualbox vdi

Я хочу превратить физическую машину под управлением MS Windows 7 в виртуальную машину VirtualBox. Это легко, я делал это раньше, но на этот раз мне нужно было, чтобы виртуальный размер / емкость диска фиксированный и меньший размер.

Это необходимо исправить, потому что я установлю на нем шифрование диска PGP из соображений соответствия. Это расширит динамический диск до максимального размера.

Помимо этого особого случая, есть и другие причины, по которым диски должны быть меньше и фиксированы. Это мой опыт. Если вы запустите, например, сервер сборки Jenkins на динамически расширяющемся диске, вы можете увидеть, что диск быстро расширяется до максимального размера, в то время как в гостевой ОС дисковое пространство используется стабильно и имеется много свободного места.

С помощью Disk2vhd Я создал файл vhdx. Этот файл я преобразовал в формат vdi.

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

Якобы с vdi вы можете уменьшить виртуальный размер / емкость с помощью команд, похожих на

vboxmanage modifyhd MSWIN7.vdi --resize 160000

Я обнаружил, что это не работает. Даже если вы попробуете варианты, вы будете постоянно получать такие сообщения об ошибках, как:

Состояние выполнения: VBOX_E_NOT_SUPPORTED VBoxManage: ошибка: операция изменения размера жесткого диска для этого формата еще не реализована!

Ниже представлена ​​структура моего диска VDI. Я добавил это в виртуальную машину Ubuntu, чтобы посмотреть на это с помощью Gparted и CloneZilla. Емкость составляет около 300 ГБ. Нераспределенная 145 ГБ. Используется около 153 ГБ.

Я хочу уменьшить емкость до 160 ГБ. Этого должно хватить, чтобы уместить /dev/sdb1 и /dev/sdb2.

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

Как я могу уменьшить виртуальный размер / емкость?

  1. Освободить место в конце диска в гостевая ОС, где пробел> = размер (исходный-диск) - размер (новый-диск). Обычно сжатие последнего раздела.
  2. Выключите виртуальную машину.
  3. Создайте новый диск Virtual Box желаемого размера.
  4. Переместить содержимое со старого диска на новый диск:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Включите виртуальную машину.

  6. Возможно, вам придется изменить размер раздела в гостевая ОС для заполнения оставшейся части диска в зависимости от пространства, освобожденного на шаге 1.

В конце концов мне удалось решить эту головоломку неожиданно простым способом с помощью предустановленной утилиты командной строки. dd видеть Клонирование диска. Как показано ниже, теперь у меня есть диск на 160 ГБ в гостевой ОС, хранящийся в фиксированном vdi-файле VirtualBox на 160 ГБ.

Я решил это, выполнив следующие шаги:

  1. Измените размер диска с помощью Управление диском в MS Windows до размера, равного или лучше немного меньшего, чем размер VDI.
  2. Добавить исходный vdi MSWIN7.vdi с MS Windows 7 на виртуальную машину Ubuntu в качестве второго диска.
  3. Создайте новый фиксированный vdi на 160 ГБ и также добавьте его в виртуальную машину Ubuntu. Теперь есть три диска: /dev/sda1 с работающей виртуальной машиной Ubuntu, /dev/sdb2 с источником MSWIN7.vdi и /dev/sdc1 с новым vdi.
  4. Создайте правильное разбиение на /dev/sdc. CloneZilla сделала это за меня. Он не копировал данные, но создал нужное мне разделение. Конечно, вы можете сделать это вручную.
  5. Копировать sdb к sdc с участием dd команда похожа на sudo dd if=/dev/sdb of=/dev/sdc. Команда заканчивается ожидаемым сообщением об ошибке «Нет пробела». Я проигнорировал это, потому что это просто нераспределенное пространство, которое не удалось скопировать.

Думаю, можно запустить команду для каждого раздела. Может лучше и не будет выводить сообщение об ошибке. sudo dd if=/dev/sdb1 of=/dev/sdc1 и sudo dd if=/dev/sdb2 of=/dev/sdc2.

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s

В моем случае у меня была виртуальная машина Windows с 50 ГБ vdi, которая уменьшилась до 20 ГБ.

я пытался Андре Фигейредо решение, но у меня возникла проблема с клонированным vdi.

Когда я подаю Андре Фигейредо раствор и прикрепите усадку vdi к виртуальной машине, при загрузке Virtualbox останавливается с ошибкой ввода-вывода.

Возможно это связано с моими btrfs файловая система (я слышал btrfs вызывает проблемы с Vritualbox vdi).

Мое решение:

Я попробовал другое решение, чтобы сжать диск виртуальной машины (vdi), названный OVdi, (OVdi имеет размер диска 50 ГБ, один раздел NTFS со свободным пространством 40 ГБ).

Проделаем следующие шаги (это мой случай, вы можете адаптировать / изобретать разные vdi имена):

  • остановить виртуальную машину (отключение питания)

  • создать новый диск (vdi) с именем DVdi желаемого размера (20 ГБ в моем случае ..)

  • прикреплять DVdi к ВМ

  • загрузите ВМ и установите утилиту EaseUS Backup Free

  • Запустите EasyUS и используйте EasyUS Клонировать функция (клонирует OVdi MBR и раздел NTFS в OVdi путем сжатия на новый диск DVdi)

  • Выключите виртуальную машину

  • Отсоединить OVdi из ВМ

  • Проверить, если DVdi это первое загрузочное устройство для виртуальной машины

  • перезагрузите виртуальную машину

  • Радоваться, веселиться

Не забудьте удалить OVdi объем.

Следуя этим шагам, я успешно уменьшил размер диска виртуальной машины с 50 ГБ до 20 ГБ.

Я считаю это решение чрезвычайно опасным! Он полагается на то, что все файлы находятся в первых 153 ГБ исходного раздела 300 ГБ. Команда dd не копирует файлы. Он просто последовательно копирует ВСЕ блоки. Таким образом, если вам не повезло иметь важные файлы ПОСЛЕ ограничения на 160 ГБ, dd не узнает, как их скопировать.

Типичное решение, которое я видел во многих, многих сообщениях, - это включить виртуальную машину Windows и использовать некоторую комбинацию инструментов дефрагментации и инструментов администрирования для консолидации всех файлов на передней части диска - сложность в том, что многие инструменты дефрагментации не перемещаются неподвижно. Системные файлы Windows (мне пришлось отключить восстановление системы, чтобы удалить неподвижный кусок диска размером 7 ГБ), которые находятся где-то посередине пространства, которое вы пытаетесь объединить.

После того, как вы объединили файлы на переднюю часть диска (MyDefrag - это бесплатная программа, которая показывает, где на диске находятся ваши файлы), вы должны уменьшить размер раздела Windows. Я использовал инструмент diskpart с опцией сжатия.

На этом этапе вы можете использовать dd, чтобы скопировать теперь меньший раздел на новый vdi.

Я также использовал vboxmanage modifymedium win10.vdi --compact на моем хосте Linux, но сначала мне пришлось запустить sdelete.exe в системе Windows, чтобы сначала обнулить все неиспользуемое пространство (sdelete -z c :). Использование vboxmanage для сжатия существующего файла vdi позволяет вам делать все на месте (но всегда иметь резервную копию).

Как уже упоминали другие, ответ Андре Фигейредо основан на удаче, поскольку нет гарантии, что «первые X ГБ» пространства - это ваше пространство, если вы не дефрагментируете, и в этом случае это все еще рискованно.

Ответ Пола Хурски намного безопаснее. Я перечислю некоторые дополнительные шаги, которые я сделал (обратите внимание, это для Windows, у меня была XP, но это также должно работать и для других):

1) Получите бесплатную версию «MiniTool Partition Wizard Free 12» по этой ссылке

2) Установите его в гостевую ОС и измените размер диска, оставив передышку на всякий случай (не тяните его полностью назад ..). Поскольку вы, скорее всего, изменяете размер жесткого диска текущей ОС, он даст вам возможность перезапустить и выполнить действие, сделайте это.

3) Теперь, используя ту же программу MiniTool Partition, выберите ваше теперь нераспределенное пространство (в *: ) -> Щелкните правой кнопкой мыши -> Очистить раздел -> Заполнить секторы нулями (быстро).

4) Теперь безопасно выключите гостевую ОС. Перейдите в папку VirtualBox, где существует VBoxManage.exe, откройте cmd по этому пути и запустите это:

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5) А теперь должно все волшебным образом заработать. Когда вы в следующий раз откроете гостевую ОС, она запустит проверку диска, LET IT RUN, она найдет «потерянные файлы», которые выглядят как системные файлы.

Я сделал то же самое, что и @goamn, за исключением того, что я использовал бесплатную версию редактора разделов NIUBI внутри моей виртуальной машины Windows, что позволило мне сжать раздел диска C, а затем переместить свободное пространство в конец. После этого вы можете щелкнуть правой кнопкой мыши по пустому разделу и написать на нем 0. Как только это будет завершено, запустите команду уплотнения, и все готово.