Debian Jessie: RAID (mdadm) + LVM — «Unable to find LVM volume VG01/root»

При установке Debian Jessie собрал зеркало из двух разделов. На одном md0 — просто /boot в ext4, на втором md1 VG с кучей LV (aka root, home, opt …)
Собственно все работало замечательно, пока не отключил один из винчестеров. После того как система теряет винт — грузится не хочет. Grub отрабатывает, а в initrd ошибка «Unable to find LVM volume VG01/root» и вывал в initrd консоль.

Проблема решается так, в initrd консоли ломаем RAID:

(initrd): mdadm -S /dev/md0
(initrd): mdadm -S /dev/md1

После этого скан:

(initrd): mdadm -A --scan

И вуаля! RAID находит рабочий винчестер, на нем нужные раздеры и собирает md0, md1 в active статусе. Собственно разделы становятся активными и lvm тоже замечательно начинает работать.

Поскольку система тестовая, решил опробовать как аналогичная ситуация обстоит в других Linux дистрибутивах. Вышло вот что:
CentOS 7.1 — инсталлер не умеет делать так как debian-овский, тоесть на Primary раздел не дает сделать RAID1, а поверх LVM. Либо RAID с etx4, xfs … либо LVM.
Ubuntu 14.04 — Замечательно собираю также как и в Debian, при потере винта грузится как ни в чем не бывало 🙂

Просто капец какойто … ходят слухи что ubuntu-шники впилили какойто костыль для нормальной загрузки degraded рейда. Но особо копать не стал, так как недолюбливаю Ubuntu и оставаться на ней не желаю.

На LOR нашел коллегу по несчастью, он даже костыль соорудил для загрузки системы в случай потери винчестера. Подставил и себе костыльчик.
В работающей системе создаем файлик:

~# vim /etc/initramfs-tools/scripts/init-premount/assemble-md

и добавляем туда вот что:

mdadm -S /dev/md0
mdadm -S /dev/md1
mdadm -A --scan

Даем права на выполнение:

~# chmod +x /etc/initramfs-tools/scripts/init-premount/assemble-md

Обновляем initrd:

~# update-initramfs -u

Вот и все … выключаем сервак, отрубаем винчестер и пробуем грузиться. У меня получилось!

Хай щастить!

    • Евгений
    • Апрель 28th, 2015 4:37пп

    А для чего если не секрет было делать разбивку таким образом, разве что попробовать? Но всплывшая проблема, это актуально.

    • admin
    • Апрель 30th, 2015 12:34пп

    @Евгений
    А как иначе если хочется RAID1 + LVM? Инсталлер не поддерживает RAID в LVM (вернее поддерживает только Stripe, что мне было не интересно). Такчто пришлось делать так: mdadm-ом зеркало, а внутри LVM с нужными мне LV-шками.
    Конечно есть вариант всетаки сделать RAID на уровне LVM — но я побоялся, не уверен что оно стабильно.

    • Евгений
    • Май 1st, 2015 4:02пп

    Добрый день! Спасибо за ответ. Меня смутило использование raid и lvm в одном наборе, просто в таком случает для стабильности системы лутше использовать хардварный рейд (если есть возможность по деньгам), а lvm внутри рейда.
    Еще раз спаибо за ответ.

    P.S. Хочу отметить еще две ваши статьи Puppet и Bacula, спасибо очень помогли )

    • Я
    • Июль 2nd, 2015 6:36пп

    1. /boot в raid 1 на ext2 (зачем вам там ext 4 ? что там журналировать ?) — md0
    2. Все остальное — md1, внутри — lvm, а в нем — ext4. Не надо заморачиваться с созданием отдельных разделов для /opt, /var … Лишнее это.

    И да, установщик debian отлично поддерживает и создание софт-райда любого уровня и lvm и шифрование.

    • admin
    • Июль 2nd, 2015 9:46пп

    1. /boot в ext4 привычка все однотипно делать. EXT4 везде, в буте это возможно оверхед, но не критично
    2. /opt иногда юзаю, var полезно отдельный иметь так как /var/{log,lib} иногда случайно переполняются 🙂
    mdadm умеет в инсталлере делать все что угодно, LVM — только stripe, или я не нашел как сделать зеркало … но там еще приколы есть с зеркалом в LVM, на арчевом вики довольно детально описаны многие тонкости. Вцелом могу сказать что LVM предпочитаю использовать как инструмент позволяющий быстро на лету увеличить размер раздела когда это необходимо, без него тоже можно — но возни больше

    • Aleksandr K.
    • Ноябрь 16th, 2015 5:20пп


    Ну данная разбивка все равно несет проблему что описал ТС

    • Я
    • Январь 2nd, 2016 12:48пп

    «var полезно отдельный иметь так как /var/{log,lib} иногда случайно переполняются»

    logrotate же!

  1. Трэкбэков пока нет.

Why ask?