Virtualbox: как объединить текущее состояние (снимок) с образом диска

У нас есть виртуальный сервер с именем Jira, работающий под VirtualBox 4.0 (хост - Debian Squeeze). В какой-то момент виртуальная машина не загрузилась, поэтому нам пришлось загружаться с помощью GRML rescue iso. Перед этим мы создали снимок виртуальной машины. После исправления проблем с загрузкой виртуальная машина продолжала использовать этот снимок в его текущем состоянии. Это вывод VBoxManage showvminfo jira:

Name:            jira
Guest OS:        Other/Unknown
UUID:            ef5260be-46d3-45cb-8c9d-9f9e322f9110
Config file:     /home/vbox/.VirtualBox/Machines/jira/jira.xml
Snapshot folder: /home/vbox/.VirtualBox/Machines/jira/Snapshots
Log folder:      /home/vbox/.VirtualBox/Machines/jira/Logs
Hardware UUID:   ef5260be-46d3-45cb-8c9d-9f9e322f9110
Memory size:     2048MB
Page Fusion:     off
VRAM size:       8MB
HPET:            off
Chipset:         piix3
Firmware:        BIOS
Number of CPUs:  1
Synthetic Cpu:   off
CPUID overrides: None
Boot menu mode:  message and menu
Boot Device (1): Floppy
Boot Device (2): DVD
Boot Device (3): HardDisk
Boot Device (4): Not Assigned
ACPI:            on
IOAPIC:          on
PAE:             on
Time offset:     0 ms
RTC:             local time
Hardw. virt.ext: on
Hardw. virt.ext exclusive: on
Nested Paging:   on
Large Pages:     off
VT-x VPID:       on
State:           running (since 2012-05-24T12:23:48.127000000)
Monitor count:   1
3D Acceleration: off
2D Video Acceleration: off
Teleporter Enabled: off
Teleporter Port: 0
Teleporter Address: 
Teleporter Password: 
Storage Controller Name (0):            jira.sata
Storage Controller Type (0):            IntelAhci
Storage Controller Instance Number (0): 0
Storage Controller Max Port Count (0):  30
Storage Controller Port Count (0):      30
Storage Controller Bootable (0):        on
Storage Controller Name (1):            jira.ata
Storage Controller Type (1):            PIIX4
Storage Controller Instance Number (1): 0
Storage Controller Max Port Count (1):  2
Storage Controller Port Count (1):      2
Storage Controller Bootable (1):        on
jira.sata (0, 0): /home/vbox/.VirtualBox/Machines/jira/Snapshots/{e8bedcaa-278b-4b06-a825-1dddc9e4fdb3}.vdi (UUID: e8bedcaa-278b-4b06-a825-1dddc9e4fdb3)
NIC 1:           MAC: 080027ABB6DD, Attachment: Bridged Interface 'eth0.100', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps, Boot priority: 0
NIC 2:           disabled
NIC 3:           disabled
NIC 4:           disabled
NIC 5:           disabled
NIC 6:           disabled
NIC 7:           disabled
NIC 8:           disabled
Pointing Device: PS/2 Mouse
Keyboard Device: PS/2 Keyboard
UART 1:          disabled
UART 2:          disabled
Audio:           disabled
Clipboard Mode:  Bidirectional
Video mode:      720x400x0
VRDE:            enabled (Address 0.0.0.0, Ports 3389, MultiConn: off, ReuseSingleConn: off, Authentication type: null)
Video redirection: disabled
USB:             disabled

USB Device Filters:

<none>

Available remote USB devices:

<none>

Currently Attached USB Devices:

<none>

Shared folders:  <none>

VRDE Connection:    not active
Clients so far:     0

Guest:

OS type:                             Other
Additions run level:                 0
Configured memory balloon size:      0 MB

Snapshots:

   Name: beforeGRML (UUID: 70949bb5-985a-4ae6-ba28-3d0475434cf0) *

Как видите, снимок имеет имя beforeGRML. На самом деле я подозреваю, что этот моментальный снимок является текущим состоянием, а образ диска - это состояние до того, как мы восстановим машину с GRML iso.

Мои вопросы:

  • Правильно ли, что снимок beforeGRML на самом деле является текущим состоянием?
  • каким бы ни было текущее состояние, я хочу объединить его с диском виртуальной машины и не иметь снимков - как это сделать?

Обратите внимание, что виртуальная машина размещена на удаленном сервере Debian, и я использую интерфейс командной строки VBoxManage. (Я пробовал читать документацию, но все еще не могу понять, что будут делать все эти "удаление снимков" и "восстановление снимков".)

2 ответа

Решение

Нет beforeGRML не текущее состояние. Это состояние машины на момент времени, когда вы сделали снимок.

VirtualBox действительно не интуитивно понятен с именами команд снимков, если вы хотите объединить текущее состояние, вы должны delete снимок.

Из их руководства ( http://www.virtualbox.org/manual/ch08.html):

Операция удаления удаляет снимок (указанный по имени или по UUID). Это может занять некоторое время, поскольку разностные изображения, связанные со снимком, возможно, потребуется объединить со своими дочерними разностными изображениями.

Чтобы вернуться к состоянию снимка, вы используете restore операция:

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

Другой способ получить виртуальный диск в состоянии определенного снимка - клонировать этот виртуальный диск с помощью VBoxManage.

Чтобы убедиться, какой виртуальный диск вы клонируете, откройте для чтения файл.vbox или используйте графический интерфейс для получения пути к диску (я предпочитаю использовать полные пути, а не идентификаторы жесткого диска).

Клонирование...TheNameOfVirtualDisk... дает вам все предыдущие состояния, объединенные с новым, при этом оставляя нетронутыми все снимки.

Затем вы можете протестировать на новом компьютере этот новый диск и посмотреть, является ли он тем, чем вы хотите, и работает ли он.

Таким образом, если что-то пойдет не так, вы ничего не потеряете, кроме как только некоторое время.

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

Но, думая так, вы исправите терминологию: удаление снимка не потеряет ничего, кроме этого момента времени (внутренне оно объединяет это состояние со всеми дочерними элементами).

Позвольте мне объяснить более сложным примером. У вас есть высший уровень, с двумя детьми, у одного из них также есть два ребенка, а у другого три ребенка. Верхний уровень - A (один узел), второй уровень - B (два узла), третий уровень - C (пять узлов), поэтому дерево выглядит следующим образом:

  • A1
  • A1 - B1
  • A1 - B1 - C1
  • A1 - B1 - C2
  • A1 - B2
  • A1 - B2 - C3
  • A1 - B2 - C4
  • A1 - B2 - C5

Теперь представьте, что вы хотите избавиться от B1, а затем, когда вы удаляете B1, разностный диск должен быть объединен с C1 и C2, поэтому C1 и C2 будут дочерними по отношению к A1; это не так просто, как удаление одного файла; этот VirtualBOX называют его УДАЛИТЬ снимок B1.

Теперь наступает другой способ пожелания: хотите потерять состояния после точки, позвольте мне посмотреть на это дерево, я хочу избавиться от B2 и всех его дочерних элементов, чтобы на дереве больше не было части B2 (подразумевается устранение всех уровни его потомков), так что это будет очень быстро сделать, это только удалить некоторые файлы (C3, C4, C5 и B2); это невозможно сделать в VirtualBOX, то, что VirtualBOX называет RESTORE, это избавление от C1, C2 и C3, но не B2... вам нужно вручную отредактировать файл.VBOX и выполнить эту работу вручную. Если вы восстановите A1, чтобы избавиться от B2, вы также потеряете B1, C1 и C2 в процессе.

Так что будьте уверены, что вы делаете!

Да, VirtualBOX позволяет избавиться от В2 и всех его дочерних элементов, но не за один шаг, нужно два шага:

  1. Восстановите B2, чтобы удалить всех детей и удалить их файлы
  2. Удалите B2, чтобы удалить его и удалить его файлы.

Надеюсь, теперь это может быть немного ясно... многие люди в Интернете говорят о потере всей своей работы, потому что они ВОССТАНАВЛИВАЮТ А1, пытаясь УДАЛИТЬ В2.

Если бы условия были УДАЛИТЬ и УНИЧТОЖИТЬ, это не вызвало бы такой путаницы.

УДАЛИТЬ узел - это избавиться от этого узла, не касаясь остальных (если у него есть дочерние элементы, объедините состояние на всех них, если не просто удалите это состояние). Уничтожить узел - это избавиться от узла и всех его дочерних элементов (просто удалите состояние и все дочерние состояния).

Я не понимаю, почему VBox говорит о RESTORE, когда говорит о снимках, что вызывает много недоразумений.

Другие вопросы по тегам