Virtualbox, объединение снимков и базового диска

9

У меня есть виртуальная машина с около 30 снимками в ветках. Текущий путь разработки - 22 снимка плюс базовый диск. Количество файлов, по-видимому, влияет на IO и ноутбук, который я использую (не знаю, если это проблемы с производительностью диска хоста с общим размером 140 ГБ для большого количества фрагментов, или просто тот факт, что это поражение секторов, распределенных по множеству файлов).

Я хотел бы объединить текущую ветвь моментальных снимков с базовым диском, но я не уверен, что следующая команда даст правильный результат. Я не могу загрузить этот диск после завершения процедуры (5-6 часов).

vboxmanage clonehd "C:\VPC-Storage\.VirtualBox\Machines\CRM\Snapshots\{245b27ac-e658-470a-b978-8e62137c33b1}.vhd" "E:\crm-20100624.vhd" --format VHD --type normal

Кто-нибудь может подтвердить, если это правильный подход или нет?

Хенрик
источник
Чтобы добавить некоторую информацию, я получаю не ошибку VirtualBox, а ошибку загрузки из Windows. Он хочет запустить восстановление при запуске, но, поскольку я не знаю ошибку, я не знаю, как исправить. Запуск Windows обычно приводит к долгому ожиданию и синему экрану. Это ожидается или я использовал неправильный метод при клонировании диска?
Хенрик
Я использовал VBoxManage (на хосте Windows, гостевой Ubuntu), как вы предложили в своем вопросе, и он правильно
слил
1
Да, это правильный подход. Лучше указывать только UUID источника вместо имени файла, тогда вы уверены, что VBox сможет разрешить вложения.
rustyx

Ответы:

7

Что вы хотите сделать, это из диалогового окна снимков, выбрать родительский снимок, который вы хотите объединить все снимки впоследствии в один VDI.

Из вашего описания звучит так, будто это корень дерева.

Щелкните правой кнопкой мыши и выберите «Удалить снимок».

Это будет делать то, что вы хотите - оно объединит все изменения из всех дочерних снимков в один VDI.

Кроме того - клонирование образа диска, который находится в последнем снимке, также объединит разностный диск с его родительским (и его родительским, и так далее, пока вы не получите «нормальный» тип жесткого диска).

Я подозреваю, что «удаление снимка» запускает команду clonehd.

Проверьте настройки виртуальной машины (в частности, IO APIC включен / отключен) и убедитесь, что они совпадают.

Адам
источник
Я думаю, что в настоящее время это единственный способ сделать это, однако это ручной, много времени, щелчок в GUI способ сделать это.
Хенрик
3

Если вы хотите сохранить только один снимок, сделайте его текущим состоянием, а затем экспортируйте виртуальную машину и повторно импортируйте ее. Экспортированные устройства не сохраняют свою историю снимков.

Или вы можете использовать этот скрипт vboxmerge.py для управления слиянием для вас. Учитывая количество снимков у вас, я бы ожидал, что цикл экспорта / импорта будет быстрее.

Джон Харт
источник
2

Вот методика (проверенная на VirtualBox 4.3.4), которая использует команду «Клон» для объединения и сжатия всех снимков в новую виртуальную машину, содержащую один файл VDI:

  1. Переименуйте ВМ, чтобы вы могли повторно использовать ее текущее имя для клонированной ВМ (вы можете изменить имя ВМ на вкладке «Основные» в настройках «Общие»).

  2. Щелкните правой кнопкой мыши на виртуальной машине и выполните команду «Клонировать ...»:

    • Установите имя к оригинальному имени виртуальной машины.
    • Примите оставшиеся значения по умолчанию, например, тип клона: «Полный клон»; Снимки: «Текущее состояние машины».
  3. Удалите старую виртуальную машину (щелкните правой кнопкой мыши на виртуальной машине и выполните команду «Удалить ...»).

Стюарт Рэкхем
источник
0

Если ваш хост - Windows или вы можете получить доступ к VHD-файлам из Windows, есть хитрость, чтобы MERGE все изменения в parent, grand-parent и т. Д.

Он использует инструмент DiskPart и две команды:

select vdisk file="whatever your file is, with full path"

merge vdisk depth=#

Где # - количество уровней иерархии, которые вы хотите переместить, 1 для прямого родителя, 2 для родителя и т. Д.

Он делает это на месте, гораздо меньше времени, чем клонирование и т. Д.

Помните, что после объединения все промежуточные виртуальные жесткие диски могут быть удалены (он не удаляет их для вас), и не забудьте прикрепить в VirtualBox тот родительский объект, где вы слились.

Пример:

Disk3.vhd является дочерним для Disk2.vhd, Disk2.vhd является дочерним для Disk1.vhd

Если вы хотите на Disk1.vhd все изменения Disk3.vhd, просто используйте depth=2и выберите Disk3.vhd. Если вы хотите на Disk1.vhd все изменения Disk2.vhd, просто depth=1выберите Disk3.vhd.

Также помните, что нет необходимости в уродливых снимках VirtualBox, вы можете использовать команду DiskPart create vdisk для создания разностного диска из существующего (который также может быть разностным диском и т. Д.), А также для создания огромного дерева.

Для всего остального: постер использует VHD (не VDI), поэтому может использовать встроенные инструменты, такие как DiskPart и Disk Managment, для доступа к этим дискам из гостевой системы (на хосте, если хостом является Windows).

Для вас, плакат: Помните, что до слияния всегда есть полная резервная копия, клон VirtualBox не работает на месте, он создает новый файл (копирование при записи), но слияние DiskPart работает на месте (измените файл, не создавайте новенький).

Надеюсь, что это может привести к другому подходу, поскольку VHD / VHDX используется (недопустимо для VMDK, VDI и т. Д., Только для хоста Windows).

Примечание: Windows 7 и выше, XP и Vista могут монтировать VHD с помощью внешнего инструмента M $, но DiskPart не поддерживает VHD в XP и Vista ... все это также работает в версиях Windows HOME (7 и выше), нет необходимости СЕРВЕР редакция.

Лаура
источник