Фрагмент для ознакомления
2
Введение
Виртуальные машины предназначены для эмуляции компьютеров, имеющих разные операционные системы. Их применение позволяет решать, в частности, следующие задачи:
• Не меняя компьютера и операционной системы решать задачи, поддерживаемые другим компьютером с другой операционной системой;
• Внутри одного компьютера создавать виртуальную сеть.
Oracle VirtualBox представляет собой программу виртуализации. В настоящей мы рассмотрим вопросы хранения мгновенных снимков (снэпшотов) и разработки методики сравнения текущей версии. Данная работа состоит из четырёх разделов.
Первый раздел посвящён теоретическим вопросам. В нём рассмотрена взятая из лежащих в открытом доступе публикаций о структуре файлов. Также имеется краткое изложение файловой системы WAFL которую можно считать прототипом реализации хранения моментальных снимков Oracle VirtualBox.
В разделе 2 описан пользовательский интерфейс Oracle VirtualBox, а также протокол проведения эксперимента. Данный раздел необходим для того, чтобы читатель данной работы мог воспроизвести все описанные в ней действия. Созданные в разделе 2 файлы анализируются в разделе 4.
В третьем разделе описан инструментарий анализа файлов.
И, наконец, четвёртый, заключительный раздел содержит экспериментальную части, в которой на практике проверяются изложенные в разделе 1 теоретические положения.
1. Теоретические основы хранения информации VirtualBox
Вся информация о виртуальной машине хранится в файлах, находящихся в соответствующей ей директории. Дескриптором информации является XML файл с расширением *.vbox. Подробный анализ данного файла приведён в разделе 4.
1.1 Мгновенные снимки (снэпшоты)
Мгновенные снимки позволяют сохранить текущее состояние виртуальной машины. Имея их, можно при последующей работе вернуться к состоянию на тот момент, когда был сделан снимок, даже если при последующей работе состояние виртуальной машины сильно изменилось.
1.2 Исторический экскурс и общая теория
Термин «cнэпшот» (англ. snapshot) вошёл в употребление вместе с возникновением систем хранения информации NetApp. Ранее компания NetApp разработала файловую систему WAFL - Write Anywhere File. Дословно говоря: «Запись где угодно». Исторически все системы мгновенных снимков происходят от WAFL и основаны на её архитектуре.
1.2.1 Краткое описание WAFL
Здесь мы следуем статье [1]. Мотивация разработки WAFL обусловлена следующими причинами:
1. В случае нештатной остановки тестирование целостности существовавших ранее файловых систем происходило очень долго. При увеличении размеров файловой системы ситуация катастрофически ухудшалась.
2. При использовании нескольких дисков для файловой системы выход из строя одного диска мог привести к необратимой потере всей системы.
WAFL представляет собой совместимую с операционной системой UNIX файловую систему. Она похожа на другие совместимые с UNIX файловые системы такие как Fast File System или Episode. WAFL представляет собой блоковую систему, использующую комплексный дескрипторы (index node или inode) для описания файлов. Размер одного блока равен 4 килобайта. Каждый файловый дескриптор содержит 16 указателей на блоки, которые содержат информацию о том, какие блоки принадлежат файлу. В отличие от файловой системы Fast File System все указатели на блоки имеют одинаковый уровень. Так файловые дескрипторы файлов, длина которых не превышает 64 килобайт использует указатели на 16 блоков. Если длина файла превышает 64 килобайта, то используются двойные указатели. Файлы очень маленькой длины хранятся в дескрипторах.
По аналогии с файловой системой Episode имеет три файла мета данных:
1. Файл дескрипторов;
2. Файл-карта блоков, содержащий информацию о свободных (незаписанных) блоках;
3. Файл-карта дескрипторов, содержащий информацию о свободных комплексных дескрипторах.
На рисунке схематично представлено дерево блоков.
Рис. 1.1 Дерево блоков системы WAFL
Файлы метаданных позволяют писать новые блоки в любое место диска. Архитектура записи в любое место диска позволяет эффективно использовать RAID (англ. Redundant Array of Independent Disks — избыточный массив независимых (самостоятельных) дисков) путем одновременных записей в одну полосу. Имея метаданные, можно на лету увеличивать размер файловой системы. Если добавляется новый физический диск, то сервер файлов автоматически увеличивает размер метафайлов. Системный администратор может вручную увеличить длину метаданных, если значение по умолчанию слишком мало.
В системе WAFL каждый блок может быть либо записан, либо стёрт, но не может быть перезаписан. Блоки делятся на записанные и пустые. Возможны только следующие две операции:
• Запись информации в пустой блок. В результате блок становится записанным;
• Стирание записанного блока. В результате блок становится занятым.
Стирание блока не означает того, что информация на нём физически стирается. Просто он отмечается как стёртый в файловой системе и ни один из файлов не ссылается на данный блок. Необходимые изменения файла записываются в пустые блоки. Следующая схема иллюстрирует операции, происходящие при редактировании файла. Если есть файл, ссылающийся на блоки A, В, С и надо произвести редакцию блока B то блок B стирается, а и необходимая информация записывается в блок D.
Рис. 1.2 Схема редактирования файла
В данной схеме указатель на блок В заменяется на указатель на блок D.
1.2.2 Применение архитектуры WAFL к мгновенным снимкам
Описанная в 1.2.1 схема применима к созданию мгновенных снимков. Согласно рисунку 1.2 для хранения двух версий файла нет необходимости иметь две копии всего файла, достаточно иметь содержимое блоков A, B, C и D. Данная схема позволяет превратить произвольные записи в последовательные, а также обеспечить эффективную схему мгновенных снимков. Схематически это изображено на следующем рисунке.
Рис. 1.3 Схема создания мгновенных снимков
В результате исходный файл ссылается на блоки A, B и С а мгновенный снимок на блоки A, B и D.
1.2.3 Целостность системы WAFL и сохраняемая оперативная память
В случае небезопасной остановки компьютера файловая система WAFL не требует полной проверки целостности. Вместо этого каждые несколько секунд создаётся специальный мгновенный снимок, называемый точкой целостности. В отличие от других систем мгновенных снимков, точка целостности не имеет имени, и она недоступна серверу файлов. Также как и другие мгновенные снимки точка целостности содержит полную информацию о файловой системе. В случае рестарта система WAFL возвращается к последнему мгновенному снимку. Это снижает время перезагрузки до одной минуты, даже если размер тома больше или равен 20 гигабайт. В промежутках между созданиями точек целостности WAFL пишет в неиспользуемые блоки, таким образом, дерево дескрипторов мало изменяется. В промежутке между двумя точками целостности файловая система WAFL осуществляет сотни и даже тысячи операций, при этом образ файловой системы на диске остаётся неизменным до тех пор пока файловая система WAFL не запишет новую точку целостности. Данная схема необычна для файловых систем UNIX, однако она широко используется в базах данных. Однако базы данных не позволяют делать записи с такой же частотой, что и WAFL. Система WAFL использует сохраняемую оперативную память для записи протокола операций. Сохраняемая оперативная память имеет автономные источники электропитания, и она работает даже при небезопасной остановке компьютера. После небезопасной остановки компьютера система WAFL, используя протокол повторяет все операции сделанные до создания точки целостности.
Если сервер файловой системы был остановлен штатно, то создаётся единственная точка целостности, соответствующая моменту остановки.
1.2.4 Структуры и алгоритмы мгновенных снимков
Большинство файловых систем хранит информацию о записанных блоках используя один бит для каждого блока. Если в бите записана единица, то блок записан, если ноль, то блок свободен. Данный метод не применим к файловой системе WAFL по той причине, что на один и тот же блок могут ссылаться несколько мгновенных снимков. Карта блоков содержит 32 бита на каждый блок размер которого равен 4 килобайта. Бит 0 равен 1 если файловая система ссылается на блок, бит 1 равен 1 если первый мгновенный снимок ссылается на блок и так далее. Блок считается записанным если значения всех 32 битов равны 1. В таблице 1.1 изображён типичный жизненный цикл карты блоков.