Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Размещение виртуалок на LVM  (Прочитано 2406 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн jed

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Размещение виртуалок на LVM
« : 02 Марта 2013, 21:12:26 »
Всем привет,

Настраиваю сервер (ubuntu 12.10+kvm+qemu) для разработчиков с виртуалками (ubuntu 12.10) для БД, серверов приложений, билд-машин. Захотелось сделать правильно, с разделами на LVM-томах. Но как я понимаю, виртуальной машине для загрузки нужен стандартный процесс - загрузчик из первого сектора, загрузчик второй стадии, ядро и т.д., то есть кроме просто тома для корневого раздела, виртуалке нужно ещё пробросить блоковое устройство с классической таблицей разделов и загрузчиком.

Я придумал такое размешение: на каждую виртуалку по 2 LVM-тома. Один с таблицей разделов, GRUB-ом, разделом для /boot и разделом для свопа. Второй просто файловая система для /. Первый редко меняется, а второй меняет размеры в пару кликов (LVM-том, ФС на томе).

Хочу услышать от сообщества критику, комментарии, советы. Я сам ни разу не админ, поэтому хочу быть уверенным в выбранной схеме. Может можно обойтись одним томом без таблицы разделов с установкой GRUB-а в него?

Всем спасибо!

Оффлайн jed

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Размещение виртуалок на LVM
« Ответ #1 : 09 Марта 2013, 16:44:08 »
Может быть кому-то будет полезен мой опыт:
Итак, дано: сервер на Е5-2407(2 слота), 16Гб памяти, 2х1Тб в RAID1.
Необходимо: сервер с виртуалками для команды разработчиков.
Выбран Ubuntu Server 12.10 и для гипервизора и для виртуалок потому что у автора больше всего опыта с Ubuntu и автор не админ.
Технологии виртуализации: те, что позиционируются как "стандартные" для Ubuntu, а это kvm+qemu+libvirt.

Хост-гипервизор установлен на 5Гб раздел в LVM (весь диск).
Для виртуалок решено не делать полноценные диски, потому что это затудняет изменение их размера (lvm->таблица разделов виртуалки->ФС виртуалки), а решено делать сразу тома с корневой ФС и обходить BIOS-загрузчик. В Ubuntu lvm thin-provisioning'у не хватает нужных утилит, хотя наделать томов он позволит, поэтому делаем обычные тома (пришлось позорно отступать, подменяя отсутствующие /sbin/thin_check с помощью /bin/true). Тома форматируются сразу в ext4.

На гипервизоре в /vmboot/vmX лежат ядра и initrd для виртуалок.
В описании виртуалки в libvirt указываем пусть к ядру и initrd, указываем LVM том как hda/sda/vda и указываем параметрах ядра где лежит корневая файловая система (root=UUID=abcd-abcd-1234...).
Также пробрасываем /vmboot/vmX как filesystem в виртуалку, в fstab'е которой сказано монтировать этот каталог в свой /boot. Таким образом, если виртуалка обновляет ядро, то оно меняется в /vmboot/vmX и не нужно копировать его вручную.

Все /vmboot/* лежат в отдельном LVM томе.

Таким образом получаем среду, хорошо разбитую на компоненты: том гипервизора, том ядер для VM, тома для VM. Легко бэкапить, легко обновлять, легко изменять размер VM.

Немного деталей:
LVM гипервизора:
$ sudo lvs
  LV        VG     Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert
  host_root system -wi-ao--   5.00g
  host_swap system -wi-ao--   4.66g
  vmboot    system -wi-ao-- 500.00m
  appsrv    system -wi-a---   5.00g
  jira      system -wi-a---   5.00g
  oracle    system -wi-a---   5.00g
  template  system -wi-a---   1.00g

Расклад в томах:
$ sudo file -sL /dev/system/*
/dev/system/appsrv:    data
/dev/system/host_root: Linux rev 1.0 ext4 filesystem data, UUID=f6ac67b1-c6b0-4fba-8808-1946951a166f, volume name "root_host" (needs journal recovery) (extents) (large files) (huge files)
/dev/system/host_swap: Linux/i386 swap file (new style), version 1 (4K pages), size 1220607 pages, no label, UUID=b132bf9d-325c-4ed5-94eb-36ddf4fb3e78
/dev/system/jira:      Linux rev 1.0 ext4 filesystem data, UUID=90ef6a3f-0ac9-4d73-ae9e-6c2cb3a569a1 (extents) (large files) (huge files)
/dev/system/oracle:    data
/dev/system/template:  Linux rev 1.0 ext4 filesystem data, UUID=33ceecbc-80a6-41f0-9f26-58a8ce9a3912 (extents) (large files) (huge files)
/dev/system/vmboot:    Linux rev 1.0 ext4 filesystem data, UUID=3726d98c-580e-45df-8dc4-6179b2d21070 (needs journal recovery) (extents) (huge files)

Определение виртуалки в libvirt (немного порезано):
$ sudo cat /etc/libvirt/qemu/jira.xml
<domain type='kvm'>
...
  <os>
    <type arch='x86_64' machine='pc-1.2'>hvm</type>
    <kernel>/vmboot/jira/vmlinuz-3.5.0-23-generic</kernel>
    <initrd>/vmboot/jira/initrd.img-3.5.0-23-generic</initrd>
    <cmdline>root=UUID=90ef6a3f-0ac9-4d73-ae9e-6c2cb3a569a1</cmdline>
    <boot dev='hd'/>
  </os>
  <devices>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/system/jira'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <filesystem type='mount' accessmode='mapped'>
      <driver type='path' wrpolicy='immediate'/>
      <source dir='/vmboot/jira'/>
      <target dir='boot'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </filesystem>
...
</domain>

Гипервизор (порезано):
$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
...
UUID=3726d98c-580e-45df-8dc4-6179b2d21070 /vmboot         ext4    defaults        0       0

Виртуалки (порезано):
$ cat /etc/fstab
# <file system>                                 <mount point>   <type>  <options>       <dump>  <pass>
...
#/boot                                          boot           9p      trans=virtio,version=9p2000.L   0  0

Кому нужны деатали - отвечу!
Всем удачи.

 

Страница сгенерирована за 0.015 секунд. Запросов: 21.