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

grub2 не находит / не загружается на устройстве RAID1 md0

У меня есть RAID1 md0 для / boot, состоящий из 4-х разделов (sda2, sdb2, sdc2, sdd2). Я использую GPT на жестких дисках емкостью 2 ТБ, поэтому первые разделы на каждом диске (sda1, ...) являются разделами bios_grub размером 1 мегабайт.

У меня также есть RAID10 md1 для LVM (содержащий /) и RAID0 md2 для подкачки, оба построены из разделов на всех 4 дисках.

Версия постоянного суперблока mdadm - 0.9.

Grub был установлен с чем-то вроде grub-install --modules="mdraid lvm" '(hd0)' на всех 4 дисках (hd0, hd1, hd2, hd3).

Эта проблема.

При перезагрузке grub2 выдает ошибку «error: no such disk» и отображает запрос «grub rescue>». ls команда показывает только 4 диска и их разделы - но нет md* устройств. Пытаюсь insmod normal опять выдает "ошибка: нет такого диска.". Изучение «корня» и «префикса» показывает что-то вроде «(md0) / grub», что правильно. Делать set prefix=(hd0,2)/grub а потом insmod normal позволяет нормально загружаться.

Вопрос.

Почему grub2 не видит md0?

Пока единственное решение, которое я вижу, - это вручную создать образ grub с жестко заданным рабочим префиксом (grub-mkimage --prefix = '(hd0,2) / grub'), а затем использовать grub-setup для записи образа в каждый диск. Однако это решение некрасиво и подвержено ошибкам (чтобы избежать ошибок, необходимо выяснить, как grub-install вызывает эти две команды). Я буду признателен за лучшие решения. (Примечание: это удаленный сервер, поэтому он не может выполнять «отладку перезагрузки».)

ИМХО, RAID по-прежнему остается одной из серых областей загрузчиков.

Я недавно построил систему RAID1, и через несколько часов, пытаясь заставить LILO / GRUB / GRUB2 обнаружить мой рейд, я сдался и просто сказал ему использовать первый раздел первого обнаруженного жесткого диска и убедился, что в случае сбоя жесткого диска следующий Жесткий диск уже был выстроен с правильным MBR / загрузчиком и т. Д. ...

Что он делает, так это загружается, захватывает ядро ​​и initfs с первого жесткого диска (без рейда), а затем загружает ядро ​​и оставляет все данные RAID ядру. Поскольку GRUB / LILO физически не записывает на диски, это не повредит их.

В основном я просто проигнорировал все вместе RAID на этапе загрузчика.

ядру необходимо повторно собрать массивы raid, даже если сначала это сделает grub. Нет реальной причины, по которой grub должен быть осведомлен о рейдах для системы RAID1, если только диск не выходит из строя во время загрузки.

P.S. Вам не нужно использовать raid0 SWAP, эта возможность уже есть в ядре. Просто установите приоритет для обоих устройств подкачки на 1 в FSTAB

/dev/sda2         none                    swap  sw,pri=1        0 0
/dev/sdb2         none                    swap  sw,pri=1        0 0
ect....

И если один диск подкачки выйдет из строя во время нормальной работы, очень высока вероятность отказа вашей системы. (вы можете обменять raid1, только не из fstab, как указано выше)