Virtualbox бэкап виртуальной машины
Резервное копирование системы с помощью виртуализации
Иначе статью можно назвать «создание резервных копий приложений, а не только данных».
Итак, идея ясна. Реализация ее тоже не сложна. Для этого будем использовать две бесплатно распространяемые программы: Oracle VirtualBox и Paragon Go Virtual.
Шаг 1: создаем виртуальную копию работающего компьютера
Процесс копирования займет некоторое время, можно попить чайку. В конце программа создаст как минимум два файла: диск C и файл настроек с расширением OVF. Если вы создаете копию компьютера с несколькими дисками, файлов будет больше. Созданные образы дисков будут в формате VMDK (VMWare). Но VirtualBox с ними прекрасно работает.
Шаг 2: импортируем созданную копию в Virtual Box
В процессе создания виртуальной машины VirtualBox скопирует файлы жестких дисков, созданных Paragon Go Virtual. После того, как VirtualBox закончит процесс импорта, файлы созданные Go Virtual можно удалить (сначала проверьте, что виртуальная машина запускается!).
Шаг 3: финиш
Все. Вы создали реально работающую копию компьютера и можете делать на ней все, что пожелаете.
Обратите внимание на то, что такой способ можно рассматривать как продвинутый вариант создания резервных копий. Например, можно считать, что мы создаем резервную копию не данных, а уже настроенных и готовых к работе приложений.
Уменьшение объема диска виртуальной машины формата VMDK (VMWare)
Как правило, на постоянно использующемся компьютере установлено больше программ, чем это необходимо для хранения в виртуальной машине. Ну в самом деле, зачем вам нужны Gimp, ICQ, Skype, ImageViewer или медиа проигрыватель а также «Мои документы» и «Моя музыка»? Долой все лишнее. Диск виртуальной машины и так будет, скорее всего не менее 10 Гб, а тут еще и хлам.
Хорошо, запустили вы виртуальную машину, удалили ненужные программы, а файл-то vdisk.vmdk (например) размер свой не уменьшил. Хорошо, если не увеличил. Вы удалили 3 Гб хлама, а размер меньше не стал?
Файл диска создается в формате VMware. Компания VMware вместе с продуктами VMware Server и VMware Workstation поставляет консольную утилиту для работы с виртуальными дисками vmware-vdiskmanager. Эта утилита является мощным средством преобразования виртуальных дисков. Найти утилиту vdiskmanager можно в папке, куда установлены продукты VMware Server или VMware Workstation. Т.е. достаточно установить триальную версию WMware Workstation и найти в ее папке файл vmware-vdiskmanager.
В моем случае это позволило уменьшить размер с 22 Гб до 14 Гб!
Если устанавливать VMware нет желания, можете попробовать скачать архив с этой утилитой отсюда (856 кб, MD5: CF48CF9B69EA712E7B7B8C94EFA7AB49). В архиве сама утилита и две библиотеки, необходимые для ее работы. По крайней мере, с ключом «-k». Надеюсь, что этого хватит и не потребуется установка полного дистрибутива VMware.
Резервное копирование виртуальных машин в VirtualBox
А теперь к забавной теме образов виртуальных машин!
Мой компьютер синий экран на днях. Так что я стал довольно параноиком. Это второй раз за месяц, это случилось. Мне нужно было убедиться, что моя стратегия резервного копирования была надежной. Самое важное, что я хочу сделать резервную копию — это мой образ Ubuntu VirtualBox. Здесь, на работе, мы используем CrashPlan, который, кажется, выполняет достаточно приличную работу, автоматически копируя каталоги, о которых я говорю. Однако глупый я просто указывал CrashPlan на каталог с образами моей виртуальной машины и надеялся на лучшее. Это, конечно, проблематично, поскольку CrashPlan, скорее всего, выполняет резервное копирование, пока я активно работаю на своей виртуальной машине. Как я могу гарантировать, что изображение находится в каком-либо согласованном состоянии?
Резервное копирование с помощью системы управления версиями
Резервное копирование с использованием снимков VirtualBox
Оказывается, каноническое решение включает в себя функцию VirtualBox, известную как моментальные снимки, о которых раньше я ничего не знал.
С точки зрения пользователей снимок является точкой восстановления. Если я создаю снимок, я могу вернуться к этому моменту времени. Самое приятное, что я могу сделать снимок системы даже во время ее работы. В простейшем случае использования у вас есть линейная прогрессия во времени различных снимков. Вы можете восстановить вашу виртуальную машину до любого снимка в истории. Вы также можете делать сумасшедшие вещи, например возвращаться к снимку и создавать ветку из этого снимка — перемещая вашу виртуальную машину в нескольких экспериментальных направлениях из одной точки восстановления.
То, как на самом деле работают снимки, делает их чрезвычайно мощными для резервного копирования. Снимок оказывается той системой, которую я искал. Когда вы делаете снимок виртуальной машины, в «нормальном» режиме по умолчанию связанный родительский элемент (или образ виртуальной машины, или другой снимок) замораживается и больше не записывается. Вместо этого все записи идут в файл, связанный с новым снимком. Этот файл по сути является своего рода журналом фиксации для базовой виртуальной файловой системы всего, что произошло после моментального снимка. Это разные вещи, которые изменились с момента создания снимка. Восстановление к точке моментального снимка так же просто, как удаление файла снимка — журнал фиксации — и размораживание предка снимка.
Удаление снимка не удаляет все изменения в этом журнале фиксации. Вместо этого он складывает этот снимок в своего предка (обратно в vdi или другой файл сравнения). Это на самом деле совершение различий.
Что приводит меня к пониманию того, почему это может работать как стратегия резервного копирования.
Вы можете сделать резервную копию работающей виртуальной машины VirtualBox, поддерживая каскад снимков. Один снимок, известный как «текущий», является самым последним снимком. Восстановление к нему восстанавливает до последней резервной копии. Файл diff, связанный с ним (содержит все, что произошло после Снимка), отражает все неподкрепленные изменения и является тем местом, где VirtualBox активно хранит записи гостевой ОС. Этот diff является своего рода «журналом фиксации» всех изменений, которые происходят на виртуальном диске. «Предыдущий» снимок — это точка восстановления до текущей. В этом сценарии предыдущий журнал фиксации является старым током. Журнал фиксации / разница, связанный с «предыдущими», отражает изменения между предыдущими / текущими снимками. Наконец, этот скрипт также имеет «deleteMe» — старый предыдущий. При каждом запуске deleteMe,складывается обратно в основной файл vdi, сообщая VBoxManage удалить снимок (удаление снимка не удаляет связанные данные, оно просто складывает данные и забывает точку восстановления).
Эта стратегия позволяет нам сохранить 2 точки восстановления (в случае, если случайное резервное копирование создает резервную копию нестабильного образа). Это отличная стратегия, но …
Снимки — протектор осторожно
К сожалению, лично для меня живые снимки VirtualBox не были ужасно надежной стратегией резервного копирования. Я, к сожалению, видел несколько неудачных снимков. Или, что еще хуже, произошел сбой VirtualBox во время создания снимка. К счастью, я не потерял много данных, так как я старательно отправлял свой код на github. Когда снимок не удался, мне пришлось редактировать файл vbox.xml моей виртуальной машины. Файл, в котором четко указано «НЕ РЕДАКТИРОВАТЬ» вверху. Легко впасть в затишье, думая, что это похоже на что-то, что должно либо преуспеть, либо потерпеть неудачу атомарно, как переход в систему управления версиями. Это не мой опыт, что это так.
Вот галерея ужасов некоторых ошибок, которые я видел. Во-первых, «Различающееся изображение снимка не может быть найдено», в котором файл снимка каким-то образом теряется.
Я также сталкивался с этой ошибкой — «Жесткий диск XXX не может быть напрямую подключен к виртуальной машине, потому что он имеет 1 разностный дочерний жесткий диск». У меня были ошибки при создании снимков, в том числе зависание процесса снимка с работающей виртуальной машиной. К сожалению, я не могу сказать, что доверяю живым снимкам прямо сейчас.
У меня также только один снимок, который сейчас работает — «текущий». Перед запуском VirtualBox текущее уплотняется в основное изображение vdi посредством удаления снимка. Затем я делаю новый «текущий» снимок, который использует VirtualBox. Для меня это пока лучшее решение. У меня есть одно разностное изображение, активное одновременно. Основной vdi обновляется непосредственно перед запуском виртуальной машины. Поэтому, когда аварийный план создает резервную копию этой папки, он должен создавать резервные копии стабильных vdi, которые не постоянно меняются и становятся нестабильными. Это ** кажется ** лучшим решением для меня для поддержания надежной стратегии резервного копирования без каких-либо странных ошибок, которые приводят к сбою моей работающей виртуальной машины.
В любом случае, мне было бы интересно узнать о вашем опыте резервного копирования виртуальных машин!
Автоматизация работы с VirtualBox: Резервное копирование
VirtualBox — достаточно универсальная, простая и бесплатная платформа виртуализации, что и обеспечило ей широкую популярность, однако, часто не хватает её функциональности для того, чтоб решить ту или иную задачу. Этот недостаток можно частично компенсировать разработав собственные инструменты применяя SDK. Т.к. информации по этой теме в интернете немного в этой статье хочу рассказать о том, как реализовать не требующее остановки резервное копирование виртуальной машины с использованием Python API для VirtualBox. Люди обладающие серьёзным опытом работы с VirtualBox вряд ли найдут в здесь что-то новое, но тем кто недавно работает с VirtualBox и хоть немного умеет програмировать думаю будет интересно.
Задача
О снэпшотах
Для того чтоб сохранять и восстанавливать состояние ВМ используются так называемые снимки состояния системы (Snapshots). Работают они следующим образом: Когда еще не сделано ни одного снимка, образ виртуального диска ВМ хранится в одном большом файле с разрешением vdi и каким-то понятным человеку именем (по умолчанию это название виртуальной машины). ВМ по мере своей работы читает и пишет в этот файл. Когда создается снимок системы, VirtualBox создает два файла в расширениями vdi и sav и именами из букв цифр и чёрточек. Что-то вроде <4a34e84c-aad0-4486-85d2-2d7fbb472d70>.sav. <4a34e84c-aad0-4486-85d2-2d7fbb472d70>– это id снимка, он нам пригодится позже. Файл в разрешением sav – это сохраненное состояние системы, по сути содержимое оперативки. А в файл с разрешением vdi с этого момента начинают писаться все изменения, которые ВМ делает со своим диском. Это означает, что если у нас есть хотя бы один снэпшот, то файл с образом диска используется только для чтения, и можно его смело копировать.
Когда снимок удаляется – vdi-файл снимка сливается (в смысле merge) с vdi-файлом своего предка, если снимок было всего один, то непосредственно с образом диска. Надеюсь, понятно объяснил. Вообще, снимки можно выстраивать в длинные цепочки и в деревья, но пока нам этого делать не понадобится.
Алгоритм
Чтоб в итоге получить актуальную копию ВМ и ничего не поломать, поступим следующим образом:
Перейдем к практике
Для начала нам потребуется машина с установленным VirtualBox и Python. Я использовал Ubuntu 10.10, VirtualBox 4.0.4 и Python 2.6, так же тестировал на Windows 7 c Python 2.7. [C незначительными изменениями] всё должно работать и на других системах.
Чтобы API стало доступно нужно скачать и установить SDK с официального сайта www.virtualbox.org/wiki/Downloads. Для того, чтоб установить его на Ubuntu понадобилось прописать путь к каталогу с VirtualBox и запустить инсталятор. У меня это выглядело вот так:
# export VBOX_INSTALL_PATH=/usr/lib/virtualbox
# python vboxapisetup.py install
Под Windows устанавливаем аналогично
C:\vbpx\sdk\installer> c:\python27\python.exe vboxapisetup.py install
но при первом запуске скрипта на Windows 7 получил ошибку
ImportError: No module named win32com
Установил требуемый модуль — всё заработало. Скачать для своей версии его можно отсюда:
sourceforge.net/projects/pywin32/files/pywin32/Build216
В архиве с SDK лежит папка docs, а в ней в разных форматах документация по API. Это самый главный источник информации, поэтому советую пробежаться по ней глазами хотя бы для того, чтоб примерно представлять все наши возможности.
После изучения документации, а так же некоторых статей, ссылки на которые будут ниже у меня получилось вот что:
Disclaimer: возможно код не соответствует всем питоновым стилистическим правилам, т.к. обычно пишу на других ЯП. Если что-то режет глаз, пишите — поправлю.
Что дальше?
Как сохранить состояние виртуальной машины VirtualBox
Что такое Snapshots on VirtualBox?
Даже целая папка на диске есть.
Это папка, в которой хранятся все сохраненные состояния виртуальной машины VirtualBox
Сохраняем состояние виртуальной машины VirtualBox
Выбираем нужную машину и заходим в раздел «Снимки»
Выбираем «Сделать», выбираем название снимка и ОК
Готово, наш снимок появился в списке.
На диске образовались два файла.
Файл vdi — иначе VirtualBox Virtual Disk Image является форматом образа диска создаваемого и используемого популярной программой VirtualBox. Следует понимать, что в данном файле (при создании снимка) хранится не весь образ диска (всего-то 14 Мб), а изменения к начальному образу диска, который был при старте виртуальной машины. Это называется «разностным хранилищем».
(вот оригинальный образ диска размером в 5 Гб)
Файл sav — это сохраненное состояние системы, по сути содержимое оперативной памяти для этой машины.
Теперь можно устанавливать на виртуальную машину самые разные оптимизаторы и ускорители браузеров (скачанные из интернета), получить свою порцию вирусов. Посмотреть на весь этот ужас и ….. запустить виртуальную машину из сохраненного состояния.
И снова машина чистая. Как будто и не было всего этого безобразия.
Как очевидно из процесса создания «снимка» — это не копия текущей виртуальной машины, Для переноса виртуальной машину в другое место её надо клонировать.
Клонирование виртуальной машины VirtualBox
Клонировать можно только выключенную виртуальную машину, т.е. активную машину сначала надо выключить.
Далее через контекстное меню выбираем
Указываем название клона
В списке и на диске образуется клон нашей виртуальной машины.
Для переноса виртуальной машины в другое место можно использовать только файл vdi — там хранится полный образ диска. В новом месте создаете новую виртуальную машину и указываете использовать данный образ диска.
ВАЖНО: просто копирование образа диска через проводник Windows использовать нельзя. Т.е. конечно копию сделать можно — но она не подключится к новой машине. Нужно использовать именно операцию клонирования из интерфейса VirtualBox — будет создан клон имеющегося диска с новым UUID
Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла
Вы будете видеть наш сайт у себя в ленте
Нажмите «Нравится» или напишите сообщение
Как сделать копию виртуальной машины в VirtualBox
Всех читателей своего блога я опять же таки категорически приветствую. В этом посте я заведу речь о том как же всё-таки сделать копию виртуальной машины в программе VirtualBox. Добро пожаловать!
Все мы прекрасно знаем, что в ближайшем конкуренте «Виртуальной Коробки» VMware Workstation есть замечательные механизмы снятия снимков текущих состояний виртуальных машин, а так же возможности клонирования оных всего в пару кликов.
Ведь действительно, что может быть удобнее клонирования виртуальной машины? Создал один раз нужную систему и можешь её размножить для различных целей, всё лучше чем заново устанавливать операционную систему на каждую новую созданную виртуальную станцию.
Конечно всяких наворотов в VMware Workstation больше чем в скромной VirtualBox, но оно и понятно ведь «Рабочая станция» вообще то является платным продуктом и стоит весьма не дешево в то время как «Виртуал Бокс» распространяется абсолютно бесплатно под лицензией GNU, да, так же как и Linux.
В общем речь сейчас не об этом, я пожалуй отклонился от главной темы разговора, точнее монолога. Так вот несмотря на всё программа VirtualBox отлично справляется со своими обязанностями и во многих аспектах, скажу я вам, она куда даже лучше своего платного конкурента. Я сейчас говорю к требованиям к ресурсам. «ВиртуалБокс» очень скромен и в этом аспекте, для виртуальной машины с операционной системой Microsoft Windows XP требуется всего около 192 мб оперативной памяти и при этом всё работает отлично в то время как на VMware Workstation для такой же станции ставить меньше 512 мб RAM просто не реально т.к. всё будет несказанно тормозить в виртуальной ОС. В общем я думаю подсчитать можно сразу сколько ресурсов экономится при использовании VirtualBox.
Ах да, я опять ушёл в сторону. Давайте теперь о главном, а именно о том как создать копию виртуальной машины в VirtualBox. По умолчанию через графический интерфейс программы (а именно через менеджер виртуальных станций) сделать это нельзя, НО такая возможность всё таки присутствует в консольном режиме. О чём я сейчас говорю? Проблема легко решаема!
Как сделать клон виртуальной машины
Дело в том, что в комплекте с программой прилагается файл VBoxManage.exe и находится он в папке с установленной программой, в самом корне. Так вот он и предназначен для создания копий виртуальных дисков. Т.е. при помощи этой программы мы делаем копию виртуального диска уже ранее созданной машины и после используем новый файл виртуального диска для создания новой виртуальной машины.
Копию виртуального диска можно сделать с помощью консольной утилиты vboxmanage (напоминаю, что находится в папке с установленной программой).
Клонирование VirtualBox машин
Синтаксис утилиты следующий:
т.е. для примера может быть так:
Затем уже в программе (в менеджере) создаём новую виртуальную машину и в качестве hdd указываем ей новый созданный виртуальный hdd. Таким образом вы получите полную копию виртуальной машины и можете забыть об повторной установке операционной системы и ПО.
Однако сейчас это сделать проще простого без всяких консольных утилит. Достаточно просто выбрать нужную виртуальную машину из списка и кликнув на ней правой кнопкой мыши вызвать контекстное меню в котором необходимо кликнуть на второй по счёту пункт с названием «Копировать», после чего просто следовать инструкциям мастера.
Расположение дисков виртуальных машин и их снимков
На будущее пользование данной великолепной программой хотел сказать ещё пару слов касательно разных виртуальных машин. Это касается снимков состояния. Обязательно обращайте внимание на то куда физически кладутся файлы снимков машины. Т.к. часто может быть такое, во всяком случае у меня было именно так, что основной файл жёсткого диска виртуальной машины находится в одной директории в то время как файлы снимков в другой и при переносе файлов машин об этом можно позабыть. Всё это легко настраивается в конфигурациях конкретной виртуальной машины. Поэтому обязательно обращаете на это пристальное внимание.