Найшвидший спосіб об'єднати знімки у VirtualBox?


48

У мене є vdi із достатньою кількістю знімків, зроблених із нього - скажімо, 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, але вирішив, що це місце є більш підходящим для цього питання)


Команда, яку ви використовуєте, - це команда, яку ви хочете використовувати там, не швидший спосіб.
Рамхаунд

Що з експортом цілого VM? Чи буде його vdi містити те, що я хочу?
Андрій Регентов

Спробуйте спробувати. Зрештою, будь-який інший метод все-таки займе деякий час через розміри віртуальної машини.
Рамхаунд

Відповіді:


53

Знайшов рішення. Це так само просто, як і останній крок із команд, які я написав тут. Тобто

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

Тому я повинен клонувати лише останній знімок, а не кожен знімок з ланцюга. І це на тисячі відсотків швидше.

Ууїд можна знайти з VBoxManage list hdds | grep VmName | tail

У графічному інтерфейсі (в Windows) виберіть VM, виберіть Знімки вгорі праворуч, клацніть правою кнопкою миші потрібний знімок, виберіть Клон ... та у діалоговому вікні виберіть Повний клон .


THX, але він не працює на моїй установці, він говорить, що зображення вже існувало б. Ви забули - існуюче?
Енді

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

Звичайно, повний шлях повинен бути таким, який зареєстрований у VirtualBox. Символічні посилання не спрацьовують, оскільки VBox повинен шукати всі знімки
Енді

не впевнений, що робить хвіст, ти маєш на увазі " tail -1"?
eckes

1
У VirtualBox 5 clonehdзастарілий і залишений для зворотної сумісності, використовуйте clonemediumзамість цього.
Георгій Совєтов

22

Ось методика (протестована на VirtualBox 4.3.4), яка використовує команду 'Clone' для об'єднання та компактних знімків до нового VM, що містить один файл VDI:

  1. Перейменуйте VM, щоб ви могли повторно використовувати його поточне ім'я для клонованого VM (ви можете змінити ім'я VM на вкладці "Основні" в налаштуваннях "Загальні").

  2. Клацніть правою кнопкою миші на VM та запустіть команду "Клоніровать ...":

    • Встановіть ім'я до оригінального імені VM.
    • Прийміть решта за замовчуванням, тобто тип клону: 'Повний клон'; Знімки: "Поточний стан машини".
  3. Видаліть старий VM (клацніть правою кнопкою миші на VM та запустіть команду "Видалити ...").


Щодо VirtualBox 6.0.8, це все ще працює.
Пол Штурм

3

Ви можете спробувати експортувати в OVF, а потім імпортувати назад згенерований файл.

Як пояснено тут :

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

В результаті у вас буде клонований VM з поточним станом без інших знімків.


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

0

Ця операція означає читання та запис дуже великих файлів на одному фізичному диску. Єдиний спосіб ви можете прискорити це - помістити ці файли на різні диски, змінюючи шляхи у вашій команді VBoxManage. Якщо в апараті є лише один диск, ви можете використовувати зовнішній накопичувач USB або навіть диск на іншій машині через мережевий спільний доступ (залежно від швидкості вашої мережі)


1
Зазвичай мережа набирає величини повільніше, ніж внутрішній інтерфейс жорсткого диска, тому це, ймовірно, не прискорить процес.
Андрій Регентов

-2

Деякі мають локальну мережу 10 Гбіт / с, тому він може передавати більше одного гігабайт в секунду, тому це не буде вузьким місцем.

Деякі мають локальну мережу 1Gib / s, тому вона може передавати більше 100 мегабайт в секунду, тому це не буде вузьким місцем (якщо у вас дійсно швидкий SSD).

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

Ви говорите про локальну мережу повільніше, але не про USB (2.0, не кажучи вже про 1.1 або 1.0), це набагато повільніше.

Що я б запропонував, було б: Використовуйте USB 3.1 Gen2 типу C або eSATA / SATA / SAS

Але завжди: використовуйте другий досить швидкий диск.

І завжди: Клонування на інший диск і копіювання файлу назад набагато швидше, ніж використання лише одного диска, якщо це не SSD або жорсткий диск з незалежними багатоголовними руками (вони можуть читати і записувати одночасно на двох місця на поверхні, кожна голова має власну руку, дуже дорога, приблизно> 9876 €).

Найкраще - клонувати лише віртуальний жорсткий диск потрібного стану, потім перевірити, чи він працює, потім ВИДАЛИТИ верхній рівень (видалить усі знімки), потім вийміть жорсткий диск на сховище та підключіть цей новий.

Отож, кроки, щоб звільнити всі старі стани за схемою без деревних знімків:

  1. Клоніруйте з одного твердого до іншого, уникайте вузьких місць
  2. Створіть нову машину, підключіть цей диск, від'єднайте його, налаштуйте його як незмінний
  3. Перевірте, чи він працює (оскільки він є непорушним) у вас буде такий самий стан
  4. Якщо вам це потрібно, щоб він не був незмінним, від'єднайте його, поверніться до нормального тощо
  5. Видаліть старі знімки машини (спочатку RESTORE)
  6. Видаліть тимчасову випробувальну машину
  7. Скопіюйте на диск віртуальний диск
  8. Приєднайте клонований диск

Але завжди майте на увазі, знімки можуть бути як повне дерево, один вузол може мати більше однієї дитини, кожна дитина може мати більше однієї дитини тощо.

Щоб працювати з деревами знімків, завжди думайте про DELETE як видалення вузла, не накладаючи решту вузлів (лише розпустіть цей стан, але не там спокою, жоден батько і жодна дитина не будуть зачеплені, дані будуть об'єднані на всіх перших підпунктах рівні дочірні, настільки повільний процес) і на RESTORE як знищення всіх своїх дітей на всіх підрівневих рівнях (втрачаючи всі стани після того, як ви відновите, він видаляє лише файли, тому дуже швидкий процес, всього за секунди).

Це!

PD: Як жахливі імена VBOX дав ці дві операції (видалити лише один вузол = DELETE; видалити всі дочірні вузли на всіх нижчих рівнях = RESTORE)


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