web-dev-qa-db-ja.com

grub2がRAID1md0デバイスで/ bootを見つけられない

4つのパーティション(sda2、sdb2、sdc2、sdd2)で構成される/ boot用のRAID1md0があります。 2TB HDDでGPTを使用しているので、各ディスクの最初のパーティション(sda1、...)は1メガバイトのbios_grubパーティションです。

また、LVM用のRAID10 md1(/を含む)とスワップ用のRAID0 md2もあり、どちらも4つのドライブすべてのパーティションから構築されています。

mdadm永続スーパーブロックのバージョンは0.9です。

Grubは、4つのドライブすべて(hd0、hd1、hd2、hd3)にgrub-install --modules="mdraid lvm" '(hd0)'のようなものでインストールされました。

問題。

再起動すると、grub2は「エラー:そのようなディスクはありません」で失敗し、「grubrescue>」プロンプトが表示されます。 lsコマンドは、4つのディスクとそのパーティションのみを表示しますが、_md*_デバイスは表示しません。 _insmod normal_を再試行すると、「エラー:そのようなディスクはありません。」が表示されます。 'root'と 'prefix'を調べると、 '(md0)/ grub'のようなものが表示されます。これは正しいです。 set prefix=(hd0,2)/grubを実行してから_insmod normal_を実行すると、正常に起動できます。

質問です。

Grub2がmd0を認識しないのはなぜですか?

これまでのところ、私が見ることができる唯一の解決策は、ハードコードされた作業プレフィックス(grub-mkimage --prefix = '(hd0,2)/ grub')を使用してgrubイメージを手動でビルドし、grub-setupを使用してそれぞれにイメージを書き込むことです。ディスク。ただし、このソリューションは醜く、エラーが発生しやすくなります(エラーを回避するには、grub-installがこれら2つのコマンドを呼び出す方法を調査する必要があります)。より良い解決策をいただければ幸いです。 (注:これはリモートサーバーであるため、実際には「再起動デバッグ」を実行できません。)

2
chronos

RAIDは、依然としてブートローダーIMHOの灰色の領域の1つです。

最近RAID1システムを構築し、数時間後にLILO/GRUB/GRUB2を取得してレイドを検出しようとした後、あきらめて、検出された最初のHDDの最初のパーティションを使用するように指示し、HDDに次の障害が発生した場合に確認しました。 HDDはすでに正しいMBR /ブートローダーなどと並んでいました...

つまり、起動し、カーネルを取得して最初のHDDからinitfsを実行し(RAIDなし)、カーネルを起動して、すべてのRAIDをカーネルに任せます。 GRUB/LILOはドライブに物理的に書き込みを行わないため、ドライブに損傷を与えることはありません。

基本的に、ブートローダーの段階ではRAIDをすべて無視しました。

grubが最初に行う場合でも、カーネルはRAIDアレイを再アセンブルする必要があります。起動中にドライブに障害が発生しない限り、RAID1システムでgrubがraidを認識する必要がある本当の理由はありません。

P.S. SWAPをraid0する必要はありません。この機能はすでにカーネルに含まれています。 FSTABで両方のスワップデバイスの優先度を1に設定するだけです

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

また、通常の操作中に1つのスワップドライブに障害が発生した場合、システムに障害が発生する可能性が非常に高くなります。 (上記のようにfstabからではなく、raid1スワップを実行できます)

3
Silverfire