Виртуальные жесткие диски в 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 файла конфигурации гостевого домена. В общем виде секция имеет формат:
1 |
disk = [ '<diskspec>', '<diskspec>', ... ] |
где diskspec – путь к диску и его настройки.
В зависимости от типа дисков, опции будут меняться, о чем я и расскажу ниже.
Виртуальные жесткие диски на основе файлов
Есть несколько ситуаций, в которых вам может понадобиться подключение файла как блочного устройства.
CD/DVD
Самый простейший и одновременно очень распространенный случай – подключение .iso-образа как CD/DVD-ROM для установки системы:
1 2 3 |
disk = [ '/root/ru_windows_server_2012_r2_x64_dvd_6052763.iso,,hdc,cdrom' ] |
В примере выше я подключаю образ Windows Server.
Hdc – просто виртуальное устройство для гостевой системы (могут быть варианты hd[x], xvd[x], sd[x] и др.), с хостом оно никак не связано.
RAW
Создать такой диск в базовом варианте достаточно просто, даже не требуется никаких подготовительных действий. Просто выполните команду:
1 |
dd if=/dev/zero of=/mnt/testdisk01/2012R2Test02-Disk001.img bs=1M count=20480 |
Или вот так (более предпочтительно):
1 |
qemu-img create -f raw /mnt/testdisk01/2012R2Test02-Disk001.img 20G |
Если виртуальный диск должен иметь большой объем (в примере выше объем всего 20ГБ), придется подождать пока файл заполнится нулями. При успешном завершении операции вы увидите что-то подобное:
1 2 3 |
20480+0 records in 20480+0 records out 21474836480 bytes (21 GB, 20 GiB) copied, 25.3414 s, 847 MB/s |
Подключение тоже выглядит просто:
1 2 3 |
disk = [ '/mnt/testdisk01/2012R2Test02-Disk001.img,raw,hda,w' ] |
Выставлять принудительно формат raw совсем необязательно, он и так используется по умолчанию. Я же указал его просто для наглядности.
QEMU
Есть ещё один вариант создания файлов и использования их как виртуальных дисков – с помощью утилиты qemu-img 5 проекта QEMU 6. Используя формат qcow2 вы можете получить дополнительный полезный функционал, например copy on write 7 или снимки состояния.
Создать диск можно командой 8:
1 |
qemu-img create -f qcow2 /mnt/testdisk02/2012R2Test03.img 20G |
А в секции disk конфигурации гостевого домена прописать:
1 2 3 |
disk = [ '/mnt/testdisk02/2012R2Test03.img,qcow2,hda,w' ] |
В данном случае указание формата обязательно. Диск будет динамически увеличивающимся.
Чтобы сделать снимок виртуального диска, достаточно выполнить команду:
1 |
qemu-img create -f qcow2 -b 2012R2Test03.img 2012R2Test03-snapshot.img |
При этом виртуальная машина должна быть отключена. Перед тем как её включить, вы должны изменить конфигурационный файл таким образом, чтобы настройки диска указывали на диск-снимок. Обратите внимание, что если вы измените диск-родитель, то все его снимки утратят работоспособность.
Выше были рассмотрены все известные мне варианты реализации дисковой подсистемы на основе файлов.
Виртуальные жесткие диски на основе LVM
LVM является более надежным вариантом реализации дисковой подсистемы для domU, рассмотрим его подробно.
Подготовка
Подразумевается, что с LVM вы уже немного знакомы 10. Тем не менее, я рассмотрю все основные моменты от и до.
1. Предположим, что новый физический диск подключен к серверу. Первым делом необходимо его инициализировать, чтобы он распознавался LVM как физический том:
1 |
pvcreate /dev/sdb |
2. На следующем этапе нужно создать группу томов:
1 |
vgcreate vg00 /dev/sdb |
3. Теперь пришло время “нарезать” группу на логические тома. Если абстрагироваться от LVM и представить себе операции над обычным физическим диском, то на данном этапе идет создание логических разделов (например на диске /dev/sdc создаются /dev/sdc1 и /dev/sdc2). Не будем сразу тратить все свободное место, а выделим пока что 10ГБ:
1 |
lvcreate -L 10G -n 2012R2Test01 vg00 |
где 2012R2Test01 – имя логического тома.
Конфигурация виртуальной машины
Конфигурация диска виртуальной машины в данном случае очень проста и практически не отличается от подключения каких-либо физических устройств:
1 2 3 |
disk = [ '/dev/vg0/2012R2Test01,,hda' ] |
Все действительно очень просто.
Снимки дисков
LVM, как известно, тоже поддерживает снимки. Сделать это можно командой:
1 |
lvcreate -L 5G -s -n 2012R2Test01-Disk001-sn /dev/vg0/2012R2Test01-Disk001 |
В примере выше для логического тома /dev/vg0/2012R2Test01-Disk001 создается снимок (-s) с именем (-n) 2012R2Test01-Disk001-sn объемом (-L) 5Gb.
После создания снимка все операции ввода/вывода должны быть направлены на диск-снимок. В момент создания снимка виртуальная машина должна быть отключена, далее нужно в дисковой конфигурации этой ВМ указать диск-снимок вместо оригинального диска.