Назад | Перейти на главную страницу

KVM + LVM: Куда поставить LVM?

Хай, сейчас я настраиваю новый сервер, используя libvirt + kvm. После этого на этом сервере должно быть запущено около 5 виртуальных машин (+ несколько тестовых машин).

Хранилище размещено на устройстве raid-5, настроенном с помощью LVM. KVM теперь работает на некоторых логических томах LVM.

Вопрос в том: Есть ли какие-либо недостатки в использовании lvm снова (второй раз) внутри виртуальной машины для разделения пространства? Итак, это будет: Жесткий диск -> Контроллер рейда -> LVM для физического сервера -> Один логический том на виртуальную машину -> LVM внутри каждой виртуальной машины -> Несколько логических томов внутри каждой виртуальной машины.

Есть ли другие возможности, если мне нужны динамические разделы внутри моих виртуальных машин?

Спасибо

Накладные расходы на производительность LVM тривиальны, их использование дважды не изменит этого. Ваше устройство raid-5 будет иметь гораздо большее влияние, чем lvm.

Статья в блоге на http://hyperthese.net/post/kvmized-debian-on-lvm/ предлагает вам создать логические тома LVM на хосте (физическом сервере) и создать файловые системы непосредственно на них, без создания разделов и до создания виртуальных машин.

Я попробовал это, и короче говоря: казалось, работает, и я смог увеличить LV и файловую систему на нем.

Вот длинная история, то есть то, что я сделал:

Созданы логические тома LVM для root, var и swap для виртуальной машины на хосте (под управлением Ubuntu 10.04):

me@host:~$ sudo lvcreate -L4G -n test-root vg1
me@host:~$ sudo lvcreate -L20G -n test-var vg1
me@host:~$ sudo lvcreate -L2G -n test-swap vg1

Созданы файловые системы и своп на LV:

me@host:~$ sudo mkfs.ext3 /dev/mapper/vg1-test--root
me@host:~$ sudo mkfs.ext3 /dev/mapper/vg1-test--var
me@host:~$ sudo mkswap -f /dev/mapper/vg1-test--swap

Создал виртуальную машину:

me@host:~$ sudo virt-install --name=test --ram=2048 --os-type=linux --os-variant=ubuntulucid --cdrom=ubuntu-server-10.04-lts-64bit.iso --disk path=/dev/mapper/vg1-test--root --disk path=/dev/mapper/vg1-test--var --disk path=/dev/mapper/vg1-test--swap --network bridge=br0 --vnc --noautoconsole

Затем я подключился к новой виртуальной машине с помощью virt-viewer, и установщик Ubuntu ждал. Я выбрал режим «Установить минимальную виртуальную машину» (клавиша F4).

На этапе разбиения я выбрал ручное разбиение. Программа установки обнаружила виртуальные диски vda, vdb и vdc и распознала первые два с ext3 и последний как swap. Я выбрал разделы ext3 и сказал использовать их как разделы ext3 (по умолчанию было «не использовать»), с «нет, сохранить существующие данные» и точку монтирования как / для первого и / var для второго. По умолчанию своп настроен правильно. Затем я решил установить grub на первый диск.

Я установил виртуальную машину и работает нормально. Fdisk показывает, что vda имеет пустую таблицу разделов, а vdb и vdc не имеют действительной таблицы разделов. Я не знаю, является ли наличие или отсутствие таблицы разделения проблемой, это обсуждается на https://unix.stackexchange.com/questions/5162/how-to-install-grub-to-a-whole-ext4-disk-without-partition-table .

Наконец, я попытался изменить размер диска var. Сначала на хосте:

me@host:~$ sudo lvextend -L24G /dev/vg1/test-var

Затем я перезагрузил виртуальную машину и изменил размер файловой системы на виртуальной машине:

me@test:~$ sudo resize2fs /dev/vdb

И размер изменился нормально.

Я не знаю, хороший ли это способ сделать это или нет, но пока, похоже, он работает. Любые комментарии?

Я думаю, что использование LVM во второй раз не будет хорошо для производительности, но кроме сетевой файловой системы, я не могу придумать другого стабильный решение с динамическим разделом (вы можете попробовать zfs с fuse или btrfs, но они не готовы к производству).

Если вы хотите сохранить LVM внутри виртуальной машины, вы можете создать LV на хосте для каждого раздела каждой виртуальной машины.

В общем, использование большего количества деталей означает, что сломается больше вещей. Я бы посоветовал переосмыслить то, что вы делаете, чтобы LVM не понадобился дважды. Возможно, используйте что-то вроде OpenVZ вместо KVM, OpenVZ поддерживает изменение размера виртуальных разделов быстро и на лету.