Самый быстрый способ объединить снимки в VirtualBox?


49

У меня есть видео с довольно большим количеством снимков, скажем, 50 или 70 снимков. Я хочу иметь один простой VDI с текущим состоянием. Эти снимки занимают слишком много места на диске и не нужны как снимки.

Я знаю, что если я позвоню

VBoxManage clonehd thedisk.vdi thedisk-full.vdi
(50-70 times) VBoxManage clonehd {uuid-of-snapshot}.vdi thedisk-full.vdi --existing

Я получу то, что хочу. Но это занимает очень очень много времени (более 5 часов с учетом моего оборудования и начального размера диска 16G).

И, конечно, я пытался, VBoxManage snapshot deleteи это странно: он не работает на остановленной машине, может дать сбой на работающей машине, а при однократном сбое произойдет сбой всех последующих вызовов.

Есть ли способ сделать простой VDI из нескольких снимков - быстрее?

$ VBoxManage --version
3.2.14r75509

(спросил его на ServerFault, но решил, что это место больше подходит для этого вопроса)


Команда, которую вы используете, - это команда, которую вы хотите использовать. Это не быстрый способ.
Ramhound

Как насчет экспорта всей виртуальной машины? Будет ли его VDI содержать то, что я хочу?
Андрей Регентов

Тебе стоит попробовать это. В конце концов, любой другой метод все еще займет некоторое время из-за размера виртуальной машины.
Ramhound

Ответы:


53

Нашел решение. Это так же просто, как последний шаг из команд, которые я написал здесь. Т.е.

VBoxManage clonehd fullpath/{uuid-of-last-snapshot}.vdi thedisk-full.vdi

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

UUID можно найти из VBoxManage list hdds | grep VmName | tail

В графическом интерфейсе (в Windows) выберите виртуальную машину, выберите Снимки в правом верхнем углу, щелкните правой кнопкой мыши нужный снимок, выберите Клонировать ... и выберите Полный клон в диалоговом окне.


спасибо, но это не работает на моей установке, он говорит, что изображение уже существует. Вы забыли о существующем?
Энди

3
если у вас уже есть thedisk-full.vdiфайл на диске, сначала измените имя в команде на что-то вроде thedisk-full-new.vdi.
Андрей Регентов

Конечно, полный путь должен быть тем, который зарегистрирован в VirtualBox. Символические ссылки не будут работать, так как VBox нужно искать все снимки
Энди

не уверен, что делает хвост, ты имеешь в виду " tail -1"?
Eckes

1
В VirtualBox 5 clonehdустарела и оставлена ​​для обратной совместимости, используйте clonemediumвместо этого.
Георгий Советов

22

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

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

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

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


Начиная с VirtualBox 6.0.8 это все еще работает.
Пол Штурм

3

Вы можете попробовать экспортировать в OVF, а затем импортировать обратно сгенерированный файл.

Как объяснено здесь :

OVF не может описывать снимки, сделанные для виртуальной машины. В результате при экспорте виртуальной машины, имеющей моментальные снимки, будет экспортировано только текущее состояние машины, а образы дисков в экспорте будут иметь «сплющенное» состояние, идентичное текущему состоянию виртуальной машины.

В результате у вас будет клонированная виртуальная машина с текущим состоянием без других снимков.


Я спрашиваю о vdis, потому что не могу экспортировать машину - она ​​была повреждена (состояние недоступно после перезагрузки хоста), и все, что у меня было, это куча VDI - диск и около пятидесяти снимков.
Андрей Регентов

0

Эта операция означает чтение и запись очень больших файлов на одном физическом диске. Единственный способ ускорить это - поместить эти файлы на разные диски, изменяя пути в вашей команде VBoxManage. Если на машине есть только один диск, вы можете использовать внешний USB-накопитель или даже диск на другой машине через общий сетевой ресурс (в зависимости от скорости вашей сети).


1
Обычно сеть работает на несколько порядков медленнее, чем внутренний интерфейс жесткого диска, поэтому это, вероятно, не ускорит процесс.
Андрей Регентов

-2

Некоторые имеют локальную сеть 10 Гбит / с, поэтому она может передавать более одного гигабайта в секунду, поэтому это не будет узким местом.

Некоторые имеют локальную сеть 1 Гбит / с, поэтому она может передавать более 100 мегабайт в секунду, поэтому это не будет узким местом (если у вас не очень быстрый SSD).

Механические диски при одновременном чтении и записи на одном и том же диске (или сильно фрагментированном) работают со скоростью около 20 мегабайт в секунду, тогда как при несфрагментированном только чтении или только записи может превышать 100 мегабайт в секунду.

Вы говорите о локальной сети медленнее, но не о USB (2.0, не говоря уже о 1.1 или 1.0) намного медленнее.

Что я хотел бы предложить: использовать USB 3.1 Gen2 Type C или eSATA / SATA / SAS

Но всегда: используйте второй достаточно быстрый диск.

И всегда: клонирование на другой диск и копирование файла назад происходит намного быстрее, чем при использовании только одного диска, если только это не SSD или жесткий диск с независимыми многоголовочными кронштейнами (они могут одновременно читать и записывать на двух Поверхностные места, каждая голова имеет свою руку, очень дорого, около> 9876 €).

Лучше всего клонировать только виртуальный жесткий диск в нужном вам состоянии, затем проверить его работу, затем ВОССТАНОВИТЬ верхний уровень (удалит все моментальные снимки), затем удалить жесткий диск из хранилища и подключить этот новый.

Итак, шаги, чтобы потерять все старые состояния на схеме без дерева снимков:

  1. Клонируйте с одного жесткого диска на другой, избегайте узких мест
  2. Создайте новый компьютер, подключите этот диск, отключите его, настройте его как неизменяемый
  3. Проверьте это работает (так как это неизменно) у вас будет то же состояние
  4. Если вам нужно, чтобы он не был неизменным, отключите его, вернитесь к обычному состоянию и т. Д.
  5. Удалить старые снимки машины (сначала ВОССТАНОВИТЬ)
  6. Удалить временную тестовую машину
  7. Скопируйте обратно на диск виртуальный диск
  8. Прикрепить клонированный диск

Но всегда имейте в виду, снимки могут быть похожи на полное дерево, один узел может иметь более одного дочернего элемента, каждый дочерний элемент может иметь более одного дочернего элемента и т. Д.

Чтобы работать с деревьями snoapshots, всегда думайте о DELETE как об удалении узла без ограничения остальных узлов (только потеря этого состояния, но не отдых, ни родитель, ни потомок не будут затронуты, данные будут объединены на всех первых подпрограммах). уровень потомков, такой медленный процесс) и при RESTORE уничтожение всех его потомков на всех подуровнях (потеря всех состояний после того, что вы восстанавливаете, он только удаляет файлы, поэтому очень быстрый процесс, всего несколько секунд).

Это!

PD: Как ужасные имена VBOX дал этим двум операциям (удалить только один узел = DELETE; удалить все дочерние узлы на всех подуровнях = RESTORE)


Восстановление не удаляет моментальные снимки, только текущее (несохраненное) состояние.
Мелебиус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.