Виртуальные жесткие диски в Xen

Виртуальные жесткие диски в XenВиртуальные жесткие диски в Xen доступны в самых различных вариациях. Многообразие свободного софта практически размывает границы и сценарии реализаций дисковой подсистемы для гостевых ОС. Получить представление о каждом варианте и научиться пользоваться ими может оказаться совсем не лишним. В этом вам и поможет данная статья.


Если вам интересна тематика Debian и связанных с ним приложений, рекомендую обратиться к тегу Debian на моем блоге.


Виртуальные жесткие диски в Xen

Как и многие другие компоненты Xen, дисковая подсистема для гостевых ОС также реализована на основе стороннего свободного софта 1. На данный момент наиболее широкое распространение получила файловая и LVM-реализация. По производительности они находятся примерно на одном и том же уровне, если для файловых устройств используется драйвер blktap 2. При этом файловый вариант предпочтительнее использовать для сред тестирования, а LVM — в продакшене, по крайней мере так разработчики заявили в документации 3:

We recommend blktap (a specialized form of file backend) and LVM for storage backends. These both work, offer good manageability, can be resized and moved freely, and support some mechanism for the sort of things we expect of filesystems now that we Live In The Future. blktap is easy to set up and good for testing, while LVM is scalable and good for production.

Разумеется администраторам Xen доступен вариант проброса физического устройства (например HDD) напрямую в гостевой домен, а также другие реализации виртуального хранилища на основе файлов (QCOW из пакета QEMU).

Вся дисковая подсистема гостей описывается в директории disk файла конфигурации гостевого домена. В общем виде секция имеет формат:

disk = [ '<diskspec>', '<diskspec>', ... ]

где diskspec — путь к диску и его настройки.

Примечание: исчерпывающая информация о конфигурации дисков доступна в официальной документации 4. В дальнейшем я буду целиком опираться на этот материал.

В зависимости от типа дисков, опции будут меняться, о чем я и расскажу ниже.

Виртуальные жесткие диски на основе файлов

Есть несколько ситуаций, в которых вам может понадобиться подключение файла как блочного устройства.

CD/DVD

Самый простейший и одновременно очень распространенный случай — подключение .iso-образа как CD/DVD-ROM для установки системы:

disk = [
       '/root/ru_windows_server_2012_r2_x64_dvd_6052763.iso,,hdc,cdrom'
       ]

В примере выше я подключаю образ Windows Server.

Hdc — просто виртуальное устройство для гостевой системы (могут быть варианты hd[x], xvd[x], sd[x] и др.), с хостом оно никак не связано.

RAW

Создать такой диск в базовом варианте достаточно просто, даже не требуется никаких подготовительных действий. Просто выполните команду:

dd if=/dev/zero of=/mnt/testdisk01/2012R2Test02-Disk001.img bs=1M count=20480

Если виртуальный диск должен иметь большой объем (в примере выше объем всего 20ГБ), придется подождать пока файл заполнится нулями. При успешном завершении операции вы увидите что-то подобное:

20480+0 records in
20480+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 25.3414 s, 847 MB/s

Подключение тоже выглядит просто:

disk = [
       '/mnt/testdisk01/2012R2Test02-Disk001.img,raw,hda,w'
       ]

Выставлять принудительно формат raw совсем необязательно, он и так используется по умолчанию. Я же указал его просто для наглядности.

QEMU

Есть ещё один вариант создания файлов и использования их как виртуальных дисков — с помощью утилиты qemu-img 5 проекта QEMU 6. Используя формат qcow2 вы можете получить дополнительный полезный функционал, например copy on write 7 или снимки состояния.

Создать диск можно командой 8:

qemu-img create -f qcow2 /mnt/testdisk02/2012R2Test03.img 20G

А в секции disk конфигурации гостевого домена прописать:

disk = [
       '/mnt/testdisk02/2012R2Test03.img,qcow2,hda,w'
       ]

В данном случае указание формата обязательно. Диск будет динамически увеличивающимся.

Чтобы сделать снимок виртуального диска, достаточно выполнить команду:

qemu-img create -f qcow2 -b 2012R2Test03.img 2012R2Test03-snapshot.img

При этом виртуальная машина должна быть отключена. Перед тем как её включить, вы должны изменить конфигурационный файл таким образом, чтобы настройки диска указывали на диск-снимок. Обратите внимание, что если вы измените диск-родитель, то все его снимки утратят работоспособность.

Примечание: не хочу вводить вас в заблуждение, но на данный момент работа со снимками виртуальной машины в Xen лично мной изучена недостаточно и я не буду утверждать, что создание снимка в реалтайме (live snapshot) невозможно. Во всяком случае QEMU такой функционал поддерживает 9. Остается не ясным лишь как обновить конфигурацию domU, чтобы перенаправить дисковые операции на диск-снимок и вернуть их обратно при удалении снимка.

Выше были рассмотрены все известные мне варианты реализации дисковой подсистемы на основе файлов.

Виртуальные жесткие диски на основе LVM

LVM является более надежным вариантом реализации дисковой подсистемы для domU, рассмотрим его подробно.

Подготовка

Подразумевается, что с LVM вы уже немного знакомы 10. Тем не менее, я рассмотрю все основные моменты от и до.

1. Предположим, что новый физический диск подключен к серверу. Первым делом необходимо его инициализировать, чтобы он распознавался LVM как физический том:

pvcreate /dev/sdb

2. На следующем этапе нужно создать группу томов:

vgcreate vg00 /dev/sdb

Примечание: группа томов может состоять из множества физических томов.

3. Теперь пришло время «нарезать» группу на логические тома. Если абстрагироваться от LVM и представить себе операции над обычным физическим диском, то на данном этапе идет создание логических разделов (например на диске /dev/sdc создаются /dev/sdc1 и /dev/sdc2). Не будем сразу тратить все свободное место, а выделим пока что 10ГБ:

lvcreate -L 10G -n 2012R2Test01 vg00

где 2012R2Test01 — имя логического тома.

Конфигурация виртуальной машины

Конфигурация диска виртуальной машины в данном случае очень проста и практически не отличается от подключения каких-либо физических устройств:

disk = [
        '/dev/vg0/2012R2Test01,,hda'
       ]

Все действительно очень просто.

Снимки дисков

LVM, как известно, тоже поддерживает снимки. Сделать это можно командой:

lvcreate -L 5G -s -n 2012R2Test01-Disk001-sn /dev/vg0/2012R2Test01-Disk001

В примере выше для логического тома /dev/vg0/2012R2Test01-Disk001 создается снимок (-s) с именем (-n) 2012R2Test01-Disk001-sn объемом (-L) 5Gb.

После создания снимка все операции ввода/вывода должны быть направлены на диск-снимок. В момент создания снимка виртуальная машина должна быть отключена, далее нужно в дисковой конфигурации этой ВМ указать диск-снимок вместо оригинального диска.

comments powered by HyperComments