web-dev-qa-db-ja.com

RAIDアレイを組み立てる方法をinitramfsまたはUbuntu Serverのブートプロセスに指示するものは何ですか?

簡単な質問: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を使用する必要がありました。これにより、スーパーブロックも元の状態に戻りました。

6
Brad

Initramfsをアセンブルするために使用されるスクリプトをよく見て、問題はおそらく/etc/mdadm/mdadm.confが古くなっているだけだと思います。

システムのアレイが完成したら、次のコマンドを実行してmdadm構成を更新します。念のため、もう一度確認してください。

mdadm --detail --scan > /etc/mdadm/mdadm.conf

完了したら、initramfsを次のように更新します。

update-initramfs

これが常に失敗する場合は、スーパーブロック(配列の組み立てに使用されるメタデータ)が撮影される可能性があります。各ドライブとそのパーティションを調べて確認することをお勧めします。最悪の場合、mdadmを使用してスーパーブロックをゼロにし、再作成します。

10

これが私が思いついた回避策です:

このスクリプトを/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アレイの変更やソフトウェアのアップグレードを必要としないことがわかった最良のソリューションです。

1
Brad

私も同じ問題を抱えており、その理由を説明する次のリンクを見つけました: https://bugs.launchpad.net/ubuntu/+source/debian-installer/+bug/599515 sda2パーティションはディスクの最後まで行き、ディスクのスーパーブロックを上書きするので、sdaとsda2はmdadmと同じであり、md1をsda2ではなくsdaでアセンブルします。

1
MrGuga

Initramfsは、RAIDセットアップが間違っていた(または今とは違う)ときに作成され、それ以降更新されていないようです。

update-initramfs(通常はカーネルの更新後に実行されます)そして、うまくいけば、これはinitramfsファイルを再構築します(正しいraid構成ファイルでの構築を含む)。

1
David Spillett

Debian Lennyボックス上のRAID + LVMでの同様の問題。 initramfsシェルを終了する前に、次を実行します。

$(initramfs) vgchange MyLvmVol -a y
$(initramfs) exit

その後

update-initramfs -u
0
Trollinux

質問に答えるために:はい、それはスーパーブロックに関係しています。技術ドキュメントはこちら: https://raid.wiki.kernel.org/index.php/RAID_superblock_formats

0
mattdm

/ 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を構成するすべてのファイルと、それが実行しているスクリプトを確認できます。これらを調査することで、正確に原因を突き止めるのに役立つ場合があります。

しかし、最初にパーティションテーブルを確認します...

0