RAID на LVM

Вечер субботы омрачился тем, что на сервере из-за физического сбоя побился LVM-образ с виртуалкой под kvm. После рестарта всего железного сервера она просто перестала пинговаться. Просмотр её рабочего экрана через vnc показал, что ubuntu падает на initramfs – помирает на первых же секундах загрузки с кучей специальных букв и слов.

Во-первых о том, чего делать не надо:

– не надо пытаться сделать fsck образу lvm. Не получится, и даже не пробуйте колдовать с superblock как советуют в интернетах;
– не надо делать fsck всему разделу, на котором лежат ваши образы lvm. Говорят что это их нафиг убьёт, я не пробовал;
– не надо пытаться монтировать их чтобы вытащить данные. Будет долго и скорее всего безуспешно.

Во-вторых о том, что делать надо:

– показать средний палец противникам lvm и виртуализации, потому что им пришлось бы восстанавливать систему с помощью сотрудников или спецсредств дата-центра;
– отредактировать конфиг виртуалки таким образом, чтобы поставить boot from cdrom;
– в блок описания сидирома подсунуть source file /full/path/to/image.iso с путём до установочного образа вашего линукса или live-cd;
– задефайнить (virsh define) конфиг виртуалки заново, или проапдейтить если вам так проще;
– стартовать её (virsh start);
– подключиться по vnc и запустить установку в режиме восстановления (resque mode).

Ваша цель – загрузить виртуалку с CD (это может получиться не с первого раза, вирш конфиг адски не очевиден) и дойти до командной строки, отказавшись от монтирования разделов. В командной строке напоминаете себе как называются ваши дисковые устройства (fdisk -l), и начинаете лечить их по-одному: e2fsck /dev/sda1 и так далее. После всех – reboot. После ребута скорее всего заново пойдет загрузка с CD, вручную выберите чтобы виртуалка грузилась с жесткого диска. Если вам повезёт – загрузится родная ОС виртуальной машины. После этого останется только переставить автозагрузку с сидирома обратно на “hd” (virsh edit) и оценивать масштабы повреждений.

Теперь о том, к чему вся эта статья:

Событие послужило хорошим поводом поэкспериментировать с RAID на LVM, то есть с установкой виртуальной машины на виртуальный же raid поверх lvm. Делается это, как и всё в линуксах, очень просто:

Создайте необходимое число lvm-образов (lvcreate) нужного размера. Например, у меня для RAID5 было создано три образа.

Как подключить все три диска к виртуализатору kvm? Это ключевой момент, который абсолютно не описан ни в одной доке в интернете: запустите virt-install, передав ему подряд информацию о всех дисках. Пример:

virt-install -n vserver –vcpus=2 -r 512 -f /dev/vms/vserver_m1 -s 30 -f /dev/vms/vserver_m2 -s 30 -f /dev/vms/vserver_m3 -s 30 -c /iso/ubuntu-server-lts.iso –accelerate –os-type=linux –os-variant=generic26 -v –vnc -w bridge:br0

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

После этого вам остаётся подключиться по vnc к создаваемой виртуалке и провести установку. Предположим, что вы хотите создать три RAID5-раздела: /boot, корень и swap. Для этого в установщике нужно сначала разметить каждый из трёх дисков – тремя разделами соответствующих размеров и типов. Затем перейти к созданию рейда, и также создать три raid-раздела, не забывая снова указывать их необходимый тип (boot, корень или swap). Затем следует выбрать “Finish” и установка продолжится. В итоге вы получите обычный linux-сервер с обычными разделами, физически находящимися на виртуальном рейде.

RAID5 с которым я экспериментировал в данном случае – известен как не очень быстрый, но довольно надёжный формат. Действительно, установка на него выполнялась подозрительно медленно, однако далее под нагрузкой от простого ab и сервиса loadimpact.com я никаких просадок по диску не заметил. Но в целом – raid поверх lvm это отличное поле для экспериментов перед выходом на продакшен-систему. Выбирайте подходящий формат, и успехов вам!

UPD: верно говорят что пятый рейд адски тормозит. Для веб-проектов с большим количеством движухи в БД – не рекомендую.