Grub2 RAID/ブート

Grub2 RAID/ブート

私はHomeServerでGentooを使用しています。私のHDDはmdadmを介してミラーリングされるraid1です。

私の質問は/ bootパーティションを正しく起動する方法です。

/dev/md1 consists of /dev/sdc2 & /dev/sdd2 mounted on /boot

私のシステムにはgrub.cfguuidがありますが、/dev/md1もちろん起動時にアレイはまだ準備されていません。

最も簡単な方法は/ bootパーティションへの攻撃をキャンセルすることですが、私が望むものではありません。

それでは、攻撃隊員のUUIDはどのようにわかりますか?ls -l /dev/disk/by-uuiduuidのみが表示されます/dev/md1。ディスクアレイをマウント解除すると、UUIDを取得するためにマウントできなくなります。mount: unknown filesystem type 'linux_raid_member'

それでは、Grub2にこれらのディスクを起動させるにはどうすればよいですか? Grub2がRAIDに入る前に内容を確認できますか? (実際にはext2です)。

gptパーティションテーブルを使用することを追加する必要があるため、/dev/sdc1 and /dev/sdd1bios_grubパーティションをホストしている両方のドライブに小さなパーティションがあります。そのATMは急襲されたATMではありません。

Gilesの答え以下のコメントで指摘したように、私の問題は残ります。 Grubがデバイスを見つけることができません。教えてください。

error: no such device: 9f81a-(device uuid)-5580.
entering rescue mode...
grub rescue> 

その後、いくつかの行を追加しました。

insmod part_msdos
insmod part_gpt
insmod raid
insmod mdraid

ルートを定義する行のすぐ上にあるgrub.cfgにコピーしましたが、root='(md0)' まだ同じエラーが発生します。

もう少し調べてみた結果、これがuuid関連のバグのようです。

# grub-probe -d --target=fs_uuid /dev/md1
9f81a35d-0813-481f-9ae0-e4fba57c5580
# blkid
/dev/sdc2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="88826c5e-d12b-307d-6e54-556d1ebb2458" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/sdd2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="15150fb2-5066-edba-d39b-08b63219453c" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/md1: UUID="9f81a35d-0813-481f-9ae0-e4fba57c5580" TYPE="ext2"
(I cut away the other drives here)

ご覧のとおり、両方のパーティションのUUIDが同じであるため、grub.cfgでドライブのUUIDを編集して再grub-install /dev/sdx実行しましたが、まだ「古い」/ dev / md1 UUIDのエラーが発生しました。

ベストアンサー1

これGentoo WikiGrub 1とGrub 2に関する情報があります。 Grub 1とGrub 2では、状況はまったく異なります。 Grub 1はRAIDについて何も知りませんが、RAID-1デバイスの1つを読み取ることで、RAID-1デバイスからの読み取りを偽にすることができます。ディスク(1.1または1.2以外の0.9または1.0 mdraidスーパーブロック形式が必要です)Grub 2はデフォルトでLinux mdraidボリュームをサポートしています。

Grub 2は3つのステップで動作します(参照:ここ詳細は):

  1. ブートセクタ。
  2. install-grubで生成されたコアイメージで/boot/grub/core.img、構造メッセージを表示してモジュールをロードできますが、それ以上ではありません。
  3. ロード可能なモジュールを備えたシステム全体は、通常(モジュールを介してnormal)で説明されている起動メニューを表示します /boot/grub/grub.cfg

コアイメージの作成

実行してgrub-install /dev/sdaコアイメージを構築し、/boot/grubモジュールファイルを埋めます。grub-installまた、表示されているデバイスにブートセクタをインストールします。両方のドライブにブートセクタが必要な場合は、grub-install /dev/sdc両方を実行してください。grub-install /dev/sdd

grub-installドライブが正しく検出されない場合は、次のスクリプトを生成して/usr/local/sbin/grub-probe-verbose実行してgrub-install --grub-probe=/usr/local/sbin/grub-probe-verbose何が起こっているかを確認してください。

#!/bin/sh
exec /usr/sbin/grub-probe "$@" | tee /dev/stderr

ログによれば、RAIDアレイとして検出されず、何も返さないようにbash -x /sbin/grub-install /dev/sdc見えます。問題が起動コードにのみ存在し、起動コードには存在しない場合は、その決定を上書きしてください。grub-probe/dev/md1/sbin/grub-probe --device-map=/boot/grub/device.map --target=partmap --device /dev/md1/sbin/grub-probe --device-map=/boot/grub/device.map --target=abstraction --device /dev/md1grub-probe

grub-install --modules='biosdisk ext2 msdos raid mdraid' /dev/sdc

mdraid 1.xスーパーブロックのサポートはまだ非常に最新です。 Grub 1.98にはありません。少なくとも必要です。バザーリビジョン 2550 日付 2010-07-20(このコードは次の場所にあります。木の枝数ヶ月前)。 Debian squeezeとUbuntu 10.10は1.xスーパーブロックをサポートしています。 Gentooは今のところ1.99になると予想しています。

grub.cfgの生成

grub-mkconfig -o /boot/grub/grub.cfg.grub-mkconfig一時Grub設定ファイルを作成するには実行してください。確認して正しいと思われる場合は、名前を/boot/grub/grub.cfg

機器図

/boot/grub/device.map正しい出力を得るには調整が必要な場合がありますgrub-mkconfiggrub-mkdevicemapファイルがないと自動的に作成されますが、複数のディスクを使用する設定ではファイルが混乱する傾向があります。私はそれに次のようなものを含めたい

(md0) /dev/md1
(hd0) /dev/sdc
(hd1) /dev/sdd

Linuxの名前であるmd0Grubボリューム名はどこにありますか?/dev/md1Grubは次の2つにアクセスする必要があります/boot/grub

  • Grubのブートセクタは、BIOSがサポートしているディスクの固定位置からコアイメージを読み取ります(選択肢はあまりありません)。 PC BIOSの場合、(hd0)BIOSはブートセクタを読み取るディスク(ブートセクタを含むディスク)であり、(hd1)他のディスク(常に選択の余地はありません)です。(hd0)ディスク(またはRAID-1アレイを持つディスク)に/boot/grub
  • コアイメージは、決定されたファイルシステムの場所(通常はGrubでサポートされているRAIDアレイまたは他のボリュームタイプ)からモジュールとLinuxカーネルをロードしますgrub.cfggrub-install/grub/boot/grub

変更があったら、もう一度実行するdevice.map必要がありますgrub-installgrub-mkconfigすべてのタスクを完了するためにコマンドを使用しない場合は、そのコマンドを再実行する必要がありますsearch

おすすめ記事