Як об'єднати довільний знімок у базовий vdi у Virtualbox


14

Я здійснив передачу VM з одного жорсткого диска на інший. Тепер мені залишається база vdi та ціла купа знімків.

Мої кроки

  • Скопійовано старий каталог VM на новий жорсткий диск
  • Видалено старий VM та додано новий VM за допомогою Machine-> add та надання старого файлу XML
  • Не вдалося додати базовий vdi-файл через конфлікт, тому змінено UUID базового vdi на

    VBOXMANGE.EXE internalcommands sethduuid  <path/to/vdi>
    
  • Спроба відкатати знімок, але, схоже, VM шукає знімки на старому жорсткому диску (який відформатований і відсутній)

Це помилка (мережеве ім'я):

Failed to restore the snapshot networked of the virtual machine lfs.

Could not open the medium 'H:\vm\ft.vdi'.

VD: error VERR_PATH_NOT_FOUND opening image file 'H:\vm\ft.vdi' (VERR_PATH_NOT_FOUND).

Result Code: E_FAIL (0x80004005)
Component: Medium
Interface: IMedium {53f9cc0c-e0fd-40a5-a404-a7a5272082cd}

Старий жорсткий диск був накопичувачем H: новий - накопичувачем N:

Як я можу змінити знімки / VM, щоб шукати N:\vm\ft.vdiбазовий vdi? Я вже встановив параметри за замовчуванням у VirtualBox взагалі (розташування знімків vm / vm за замовчуванням).

Або якщо ні, то як я можу об'єднати старий оснащений знімок із базовим vdi, враховуючи, що єдине, що змінилося, це UUID базового vdi?

Відповіді:


10

Ось як я вирішив свою проблему.

Спершу я скасував зміну UUID в базовому файлі VDI, використовуючи сценарій jordoncm

Потім я спробував просто змінити шляхи у файлі vbox, щоб відповідати новому розташуванню. Це не спрацювало, оскільки з'явилися різні різні помилки, і я навіть не зміг додати VM за допомогою файлу vbox.

Тому я знайшов цю статтю в блозі Пітера Портера, який запропонував:

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

...

Використовуйте команду “VBoxManage clonehd”, щоб створити новий .vdi-файл на основі оригіналу, а потім додайте в кожен наступний файл, використовуючи аргумент “–існуючий”, щоб просто додати дані до існуючих .vdi, які ви будуєте. Наступний список команд заснований на моєму вище прикладі:

VBoxManage clonehd Machine.vdi Machine-full.vdi

VBoxManage Clonehd Знімки {UUID1} .vdi Machine-full.vdi

Знімки VBoxManage Clonehd {UUID2} .vdi Machine-full.vdi

Знімки VBoxManage Clonehd {UUID3} .vdi Machine-full.vdi

VBoxManage Clonehd Знімки {UUID4} .vdi Machine-full.vdi

Це дасть вам файл "Machine-full.vdi", який представляє повний стан вашої машини в активному стані без будь-якого відношення до батьківських файлів .vdi. Тепер ви можете використовувати цей файл "Machine-full.vdi" на новій віртуальній машині або відредагувати існуючий VM, видаливши старий файл .vdi та додавши цей .vdi.

Трохи налаштувавшись, здавалося, працює на мене:

Це жорсткий диск та його знімки:

<HardDisk uuid="{ed1428ca-76be-440a-894b-e666b50f5c86}" location="H:/vm/ft.vdi" format="VDI" type="Normal">
          <HardDisk uuid="{8d8be78f-6648-4503-bee3-8810cb853a99}" location="Snapshots/{8d8be78f-6648-4503-bee3-8810cb853a99}.vdi" format="VDI">
            <HardDisk uuid="{cce0ee4f-5052-4be7-81ff-47ea08202716}" location="Snapshots/{cce0ee4f-5052-4be7-81ff-47ea08202716}.vdi" format="VDI">
              <HardDisk uuid="{c297d4b9-972d-4b07-a839-5d76ee8d0387}" location="Snapshots/{c297d4b9-972d-4b07-a839-5d76ee8d0387}.vdi" format="VDI">
                <HardDisk uuid="{8e9ca914-648f-464c-b515-2606c644d7f0}" location="Snapshots/{8e9ca914-648f-464c-b515-2606c644d7f0}.vdi" format="VDI"/>
              </HardDisk>
            </HardDisk>
          </HardDisk>
        </HardDisk>

Це команди, якими я керував (вибачте, деякі з них відрізали його вікна ...):

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd N:\vm\ft.vdi N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd "N:\vm\VirtualBox       VMs\lfs\Snapshots\{8d8be78f-6648-4503
VBoxManage.exe: error: Parent medium with UUID {ed1428ca-76be-440a-894b-e666b50f5c86} of the medium 'N:\vm\Vi
03-bee3-8810cb853a99}.vdi' is not found in the media registry ('C:\Users\   <user>/.VirtualBox\VirtualBox.xml')
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Medium, interface    IMedium, callee IUnknow
Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, AccessMode_ReadWrite,   fForceNewUuidOnOpen, pM
xManageDisk.cpp

Мабуть, схоже, мені потрібно додати запис у VirtualBox.xml під MediaRegistry-> HardDisks, але я повинен переконатися, що потрібно додавати кожен знімок у хронологічному порядку після кожної копії. Так ось так:

Copy VM
Add entry to VirtualBox.xml
Copy VM ...

А решта, що я зробив, якщо це допомагає комусь іншому:

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox   VMs\lfs\Snapshots\{8d8be78
_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox   VMs\lfs\Snapshots\{cce0ee4f-5052-4be7-81ff-47ea08202716}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{c297d4b9-972d-4b07-a839-5d76ee8d0387}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{8e9ca914-648f-464c-b515-2606c644d7f0}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

І тоді я просто створив новий VM, використовуючи ft_full.vdi в якості своєї бази. Відповідає решті налаштувань на панелі налаштувань gui.


1
Здається, ви могли зробити це набагато швидше superuser.com/questions/590968/…
Андрій Регентов

4

Я просто пережив цей головний біль і є, здавалося б, дурне рішення. Шкода, що мені знадобився цілий день, щоб потрапити сюди.

Якщо ви подивитеся на внутрішні команди VBoxManage.exe dumphdinfo, ви можете побачити, що кожен VDI має інформацію про батьків. Отже, те, що я зробив, створив порожню машину і додав "розбитий" батьківський HD як вторинний диск. Це помістило його в Менеджер медіа.

Потім я додав контролер SATA до порожнього VM та додав знімок 3 рівня. Натисніть ОК. Знову відредагуйте та додайте знімок 2-го шару, натисніть ОК. Відредагуйте, додайте один оснащений шар 1.

Це робить їх окремими накопичувачами всередині VM, але всередині Media Manager всі вони приєднані один до одного.

Заключний крок - просто видалити банківський VM та додати старий VM. Зроблено ... і так, це так дурно / просто.

c:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands dumphdinfo D:
\Virtual_box\Virtual_box_HD_C.vdi

1 Header: uuidCreation={13ea5785-58db-4ad9-8459-9b13d89a3aaa}
1 Header: uuidModification={b1bfd84d-6fcc-4640-80fc-b7c1a6b929cb}
1 Header: uuidParent={19ed1b87-d127-402d-b463-59899c683a47}
  2 Header: uuidCreation={19ed1b87-d127-402d-b463-59899c683a47}
  2 Header: uuidModification={709f1fad-68a3-47c7-9336-f3409fcae95b}
  2 Header: uuidParent={436c1ffd-04ee-4d6b-968c-de95e65d8a5a}
    3 Header: uuidCreation={436c1ffd-04ee-4d6b-968c-de95e65d8a5a}
    3 Header: uuidModification={049d869e-89c2-48aa-b0cc-eb324895f3b9}
    3 Header: uuidParent={e09c65f4-828d-4a53-8ecc-20365d43a52e}
      4 Header: uuidCreation={e09c65f4-828d-4a53-8ecc-20365d43a52e}
      4 Header: uuidModification={6c397704-fe65-4661-b60f-767e207ffb58}
      4 Header: uuidParent={00000000-0000-0000-0000-000000000000}

Спрощення полягало в тому, що я просто скинув батьківський, а потім файл дискового знімка з диспетчера файлів до менеджера віртуальних дисків. Тоді я міг відкрити файл .vbox (мені довелося прокоментувати два рядки, які посилаються на загальну папку, яка не існувала в моїй установці Linux.
zoechi

0

Старе ім'я шляху (на H:диску) може бути просто вказане у .vboxфайлі для VM, який є лише XML-файлом. Якщо так, ви можете зберегти копію цього файлу, відредагувати ім'я шляху, щоб воно було новим іменем шляху (тим, що знаходиться на N:диску), і побачити, чи він усуває проблему.


1
Я змінив відповідний атрибут у вузлі <HardDisk> і повторно додав VM. Однак він повертає помилку: A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}
jmathew

Мені здається, я можу просто повернути UUID до старого дискового uuid. Це можливо?
jmathew

Використовували цей джентльменський сценарій для повернення uuid назад: Встановлення UUID VirtualBox VDI
jmathew
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.