簡単な質問:initramfsは、起動時にmdadm RAIDアレイを組み立てる方法をどのように知っていますか?
私の問題:サーバーを起動して次のようになります:
Gave up waiting for root device.
ALERT! /dev/disk/by-uuid/[UUID] does not exist. Dropping to a Shell!
これは、/ dev/md0(/ boot、RAID 1)および/ dev/md1(/、RAID 5)が正しくアセンブルされていないために発生します。/dev/md0がまったくアセンブルされていません。/dev/md1はアセンブルされますが、/ dev/sda2、/ dev/sdb2、/ dev/sdc2、および/ dev/sdd2を使用する代わりに、/ dev/sda、/ dev/sdb、/ dev/sdc、/を使用しますdev/sdd。
これを修正してサーバーを起動するには、次のようにします。
$(initramfs) mdadm --stop /dev/md1
$(initramfs) mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
$(initramfs) mdadm --assemble /dev/md1 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
$(initramfs) exit
そして、それは適切に起動し、すべてが機能します。起動時にRAIDアレイを適切にアセンブルする必要があるので、手動でアセンブルする必要はありません。 /etc/mdadm/mdadm.confを確認しました。そのファイルにリストされている2つのアレイのUUIDが$ mdadm --detail /dev/md[0,1]
のUUIDと一致しています。
その他の詳細:Ubuntu 10.10、GRUB2、mdadm 2.6.7.1
更新:私はそれがスーパーブロックと関係があると感じています。 $ mdadm --examine /dev/sda
は、$ mdadm --examine /dev/sda2
と同じものを出力します。 $ mdadm --examine /dev/sda1
は、/dev/md0
に関する情報を出力するため、問題ないようです。これが問題であるかどうかはわかりませんが、/dev/md1
ではなく/dev/sd[abcd]
でアセンブルされる/dev/sd[abcd]2
に適合するようです。
/dev/sd[abcd]
のスーパーブロックをゼロにしてみました。これにより、スーパーブロックも/dev/sd[abcd]2
から削除され、/dev/md1
をアセンブルできなくなりました。元に戻すには$ mdadm --create
を使用する必要がありました。これにより、スーパーブロックも元の状態に戻りました。
Initramfsをアセンブルするために使用されるスクリプトをよく見て、問題はおそらく/etc/mdadm/mdadm.confが古くなっているだけだと思います。
システムのアレイが完成したら、次のコマンドを実行してmdadm構成を更新します。念のため、もう一度確認してください。
mdadm --detail --scan > /etc/mdadm/mdadm.conf
完了したら、initramfsを次のように更新します。
update-initramfs
これが常に失敗する場合は、スーパーブロック(配列の組み立てに使用されるメタデータ)が撮影される可能性があります。各ドライブとそのパーティションを調べて確認することをお勧めします。最悪の場合、mdadmを使用してスーパーブロックをゼロにし、再作成します。
これが私が思いついた回避策です:
このスクリプトを/etc/initramfs-tools/scripts/local-top
に追加します。
#!/bin/sh
sleep 6
mdadm --stop /dev/md1
mdadm --stop /dev/md0
sleep 6
mdadm --assemble --scan
これにより、システムがmd1
を/root
にマウントしようとする前にRAIDアレイが修正されます。コマンドを一貫して機能させるために、一時停止を追加する必要がありました。
これで実際に問題が解決するわけではありませんが、RAIDアレイの変更やソフトウェアのアップグレードを必要としないことがわかった最良のソリューションです。
私も同じ問題を抱えており、その理由を説明する次のリンクを見つけました: https://bugs.launchpad.net/ubuntu/+source/debian-installer/+bug/599515 sda2パーティションはディスクの最後まで行き、ディスクのスーパーブロックを上書きするので、sdaとsda2はmdadmと同じであり、md1をsda2ではなくsdaでアセンブルします。
Initramfsは、RAIDセットアップが間違っていた(または今とは違う)ときに作成され、それ以降更新されていないようです。
update-initramfs
(通常はカーネルの更新後に実行されます)そして、うまくいけば、これはinitramfsファイルを再構築します(正しいraid構成ファイルでの構築を含む)。
Debian Lennyボックス上のRAID + LVMでの同様の問題。 initramfsシェルを終了する前に、次を実行します。
$(initramfs) vgchange MyLvmVol -a y
$(initramfs) exit
その後
update-initramfs -u
質問に答えるために:はい、それはスーパーブロックに関係しています。技術ドキュメントはこちら: https://raid.wiki.kernel.org/index.php/RAID_superblock_formats
/ dev/sd [abcd] 2は、パーティションテーブルでタイプ "fd"(RAID自動検出)として設定されていますか? fdisk -l | less
を実行して、パーティションテーブルを表示します。 initrdがパーティションを検出していないようですが、rawデバイスではスーパーブロックが表示されています。または、initrdに不正なmdadm.confがある可能性もありますが、update-initramfs
で修正されると思います。
ディレクトリを作成してinitrdを抽出し、cd
を作成して実行します。
gunzip </path/to/initrd | cpio -ivd
次に、initrdを構成するすべてのファイルと、それが実行しているスクリプトを確認できます。これらを調査することで、正確に原因を突き止めるのに役立つ場合があります。
しかし、最初にパーティションテーブルを確認します...