Назад | Перейти на главную страницу

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

У нас есть виртуальный сервер под названием Jira, работающий под VirtualBox 4.0 (хост - Debian Squeeze). В какой-то момент виртуальная машина не загрузилась, поэтому нам пришлось загрузиться из ISO-образа восстановления GRML. Перед этим мы создали снимок виртуальной машины. После устранения проблем с загрузкой виртуальная машина продолжала использовать этот снимок в текущем состоянии. Это результат работы 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.

Мои вопросы:

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

Нет beforeGRML это не текущее состояние. Это состояние машины на момент создания снимка.

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

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

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

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

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

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

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

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

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

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

Не говоря уже о том, что если вы хотите избавиться только от снимка в середине дерева снимков ... это БОЛЬ, терминология, которую использует 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 позволяет вам избавиться от B2 и всех его дочерних элементов, но не за один шаг, вам нужно два шага:

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

Надеюсь, теперь это может быть немного ясным ... многие люди в Интернете говорят о потере всей своей работы из-за ВОССТАНОВЛЕНИЯ A1, пытаясь УДАЛИТЬ B2.

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

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

Я не понимаю, почему VBox говорит о ВОССТАНОВЛЕНИИ, когда говорит о снимках, что вводит много недоразумений.