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

8

Я хочу превратить физическую машину с 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, но безуспешно.

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

введите описание изображения здесь

onknows
источник

Ответы:

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

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

  6. Возможно, вам придется изменить размер раздела в гостевой ОС, чтобы заполнить оставшуюся часть диска в зависимости от того, сколько места было выделено на шаге 1.
Андре Фигейредо
источник
2
Это действительно правильный способ преобразования динамического vdi, в котором используется очень большой раздел, в новый vdi (возможно, формат с фиксированным размером по соображениям производительности). Я не знаю, почему никто не отвечает на этот ответ и предпочитает путь дд ...
zw963
Что вы подразумеваете под "освободить место в конце диска"? Вы имеете в виду сжатие файла vdi на хосте, как на этот вопрос: superuser.com/questions/529149/…
mikezter
в гостевой ОС я прояснил пост
Andre Figueiredo
Отлично! Большое спасибо!
Yamakuzure
1
Использование vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingуничтожает таблицу разделов на целевом изображении.
Могенс TrasherDK
3

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

введите описание изображения здесь

Я решил это, используя следующие шаги:

  1. Измените размер диска с помощью средства « Управление дисками» в MS Windows до размера, равного или лучше, немного меньшего, чем размер VDI.
  2. Добавьте источник vdi MSWIN7.vdiс MS Windows 7 к виртуальной машине Ubuntu в качестве второго диска.
  3. Создайте новый фиксированный 160 ГБ vdi, а также добавьте его в виртуальную машину Ubuntu. Теперь есть три диска: /dev/sda1с работающей Ubuntu VM, /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
onknows
источник
2

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

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

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

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

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

Пол Хурски
источник
Что я забыл упомянуть, так это то, что я сначала изменил размер раздела в MS Windows до нужного размера. Это гарантирует, что файлы находятся в части 153GB. MS WIndows будет перемещать файлы / данные. Обратите внимание, что MS Windows не будет изменять размер, потому что файлы не могут быть перемещены.
Знание
2

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

Я попробовал решение Andre Figueiredo, но у меня была проблема с клонированным vdi.

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

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

Мое решение:

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

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

  • остановить ВМ (выключение)

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

  • подключить DVdi к ВМ

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

  • Запустите EasyUS и используйте функцию EasyUS Clone (она клонирует OVdi MBR и ntfs-раздел OVdi путем сжатия до нового диска DVdi )

  • Выключить ВМ

  • Отсоединить OVdi от VM

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

  • перезагрузите ВМ

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

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

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

Фабиано Тарлао
источник
0

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

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

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

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

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

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

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

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

goamn
источник