Ключевые слова:lvm, snapshot, disk, redhat, virtual, xen, (найти похожие документы)
From: Andrey Markelov
Date: Mon, 3 Aug 2010 17:02:14 +0000 (UTC)
Subject: Использование LVM snapshots для упрощения работы с виртуальными машинами
Оригинал: http://markelov.blogspot.com/2008/10/lvm-snapshots.html
Использование мгновенных снимков LVM (Snapshots, снапшоты) при работе с виртуальными
машинами позволяет получить ряд полезных преимуществ:
* быстрое, за считанные минуты, развертывание стандартных конфигураций;
* создание/удаление машин, для которых требуется быстрый возврат к стандартной
конфигурации (тестовые/учебные машины, машины без сохранения конфигурации);
* экономия места дискового хранилища.
Продемонстрируем работу на примере дистрибутива Fedora/RHEL с использованием гипервизора
Xen. Задача разбивается на следующие шаги:
1. создание логического тома;
2. установка на логический том виртуальной машины;
3. удаление "машинозависимой" информации;
4. создание снапшота логического тома;
5. копирование и редактирование конфигурационного файла DomU;
6. создание домена;
7. для создания следующего домена переходим к пункту 4.
Если вы плохо знакомы с устройством и командами LVM2, то перед тем, как читать дальнейший
текст, ознакомьтесь, например, с русскоязычной сатьей на IBM developerWorks Россия.
Сначала подготовим виртуальную машину-шаблон. Создадим новый раздел на жестком диске и
установим его тип в 8e (Linux LVM):
[root@server1 ~]# fdisk -l
Disk /dev/sda: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Units = цилиндры по 16065 * 512 = 8225280 байт
Device Boot Start End Blocks Id System
/dev/sda1 * 1 19 152586 83 Linux
/dev/sda2 20 12767 102398310 83 Linux
/dev/sda3 12768 13022 2048287+ 82 Linux своп / Solaris
/dev/sda4 13023 19457 51689137+ 5 Расширенный
/dev/sda5 13023 19457 51689106 8e Linux LVM
Теперь инициализируем /dev/sda5 как физический том, создадим на нем группу томов volgroup и
часть дискового пространства volgroup отдадим под логический том vmtemplate:
[root@server1 ~]# pvcreate /dev/sda5
Physical volume "/dev/sda5" successfully created
[root@server1 ~]# vgcreate volgroup /dev/sda5
Volume group "volgroup" successfully created
[root@server1 ~]# lvcreate -L 16G -n vmtemplate volgroup
Logical volume "vmtemplate" created
[root@server1 ~]# vgdisplay volgroup
--- Volume group ---
VG Name volgroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 49,29 GB
PE Size 4,00 MB
Total PE 12619
Alloc PE / Size 4096 / 16,00 GB
Free PE / Size 8523 / 33,29 GB
VG UUID t0E3c4-DYeW-Si8k-FBNF-sRnO-wVYG-cmpEX7
Итак, по выводу vgdisplay видно, что под снапшоты мы оставили 33G. Сколько выделить места
под логический том vmtemplate и снапшоты, зависит от количества и целей, для которых будут
использоваться виртуальные машины.
На этом мы закончили подготовительные действия, и теперь можно приступить к созданию
эталонной виртуальной машины. В Fedora/RHEL проще всего ее создать при помощи утилиты
virt-manager. Запустив мастер создания виртуальной машины, указываем ее имя, например,
template1. В качестве типа виртуализации выбираем "паравиртуализация", задаем URL, по
которому доступен дистрибутив, и месторасположение kickstart-файла, если вы заранее его
подготовили. Теперь - важно: в качестве дискового хранилища указываем наш заранее созданный
логический том /dev/volgroup/vmtemplate.
На оставшихся двух экранах укажем способ подключения к сети, число ЦП и объем ОЗУ. В итоге:
Пока наша виртуальная машина устанавливается, можно на несколько минут отойти и выпить
чашечку кофе :) Следующий важный шаг, который необходимо выполнить по окончании установки,
- удалить всю "машинозависимую" информацию с жесткого диска виртуальной машины.
Действительно, нам вряд ли будут необходимы несколько машин с одинаковым MAC-адресом или
именем хоста. В большинстве случаев, единственное, что нужно отредактировать, это удалить
строку HWADDR в файле конфигурации сетевого интерфейса:
[root@template1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Xen Virtual Ethernet
DEVICE=eth0
BOOTPROTO=dhcp
DHCPCLASS=
HWADDR=00:16:3E:XX:XX:XX
ONBOOT=yes
После чего завершаем работу template1:
[root@server1 ~]# xm shutdown template1
Наш шаблон готов. Дальнейшие шаги повторяем столько раз, сколько виртуальных машин нам
необходимо. При регулярном создании/удалении машин проще всего будет автоматизировать эти
шаги при помощи скрипта. Создаем снапшот:
[root@server1 ~]# lvcreate -L 1G -s -n snap01 /dev/volgroup/vmtemplate
Logical volume "snap01" created
[root@server1 ~]# lvdisplay /dev/volgroup/snap01
--- Logical volume ---
LV Name /dev/volgroup/snap01
VG Name volgroup
LV UUID 1mMgmi-FdGJ-EDJK-QWXI-ePH3-EIRH-ZX2Ik3
LV Write Access read/write
LV snapshot status active destination for /dev/volgroup/vmtemplate
LV Status available
# open 0
LV Size 16,00 GB
Current LE 4096
COW-table size 1,00 GB
COW-table LE 256
Allocated to snapshot 0,00%
Snapshot chunk size 4,00 KB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
После чего нам нужно создать конфигурационный файл для домена vm01. За основу можно взять
конфигурационный файл "шаблона":
[root@server1 ~]# cp /etc/xen/template1 /etc/xen/vm01
После редактирования описание виртуальной машины не должно содержать UUID и MAC-адрес, или
же они должны быть уникальными. Также необходимо сменить имя домена с template1 на
выбранное ранее vm01. Ну и конечно в качестве хранилища нужно указать наш снапшот. В итоге
должно получиться нечто похожее на:
[root@server1 ~]# cat /etc/xen/vm01
name = "vm01"
maxmem = 384
memory = 384
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1" ]
disk = [ "phy:/dev/volgroup/snap01,xvda,w" ]
vif = [ "bridge=virbr0" ]
Все готово. Создаем домен:
[root@server1 ~]# xm create /etc/xen/vm01
Using config file "/etc/xen/vm01".
Started domain vm01
[root@server1 ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 1510 2 r----- 7528.0
vm01 4 383 1 -b---- 15.4
При необходимости всегда можно проверить, сколько места занимает "разница" между шаблоном и
снапшотом, при помощи команды:
[root@server1 ~]# lvdisplay /dev/volgroup/snap01
Сразу после создания домена vm01 и интерактивного входа пользователя (GNOME) - эта разница
составляет порядка 20Мб. Теперь, пользуясь нашим "шаблонным" логическим томом vmtemplate,
мы можем создавать/удалять столько виртуальных машин, сколько нам надо, экономя время и
дисковое пространство хоста.