web-dev-qa-db-ja.com

mdadm Ubuntu12.04が起動中にRAID6をアセンブルできません

私はこれを短くしようとします。

11台のドライブを備えたmdadmRAID6があります。これは何年もの間、問題なく再インストールなどで「うまく機能」してきました。 mdadm.confを設定する必要すらありませんでした。

12.04のリリース後、mdadmがアレイのマウントに失敗し、initramfs Shellにスローされない限り、マシンを起動できなくなりました。起動時に、mdadmは7つのドライブを取得し、/ dev/md127で起動しますが、もちろん失敗します。

起動したら、停止し、すべてのドライブをmd0として再アセンブルすると、すべて正常に戻ります。

問題は、起動中でも動作させるにはどうすればよいですか?

かなりのテストの後、私の現在のmdadm.confは次のようになります: http://Pastebin.com/SWx1nCNg

起動中のmdadm-status: http://Pastebin.com/Ua9W3aj4

上記の貼り付けで、再組み立てに使用されるコマンドが正常に機能することに注意してください。

助けて? :)

3
Ueland

問題は、すべてのドライブが初期化される前に/ usr/share/initramfs-tools/scripts/mdadm-functionsが呼び出されることです。

RAIDアレイに6台のドライブがあります。それらのうちの2つはオンボードSATAであり、4つはmpt2sas(SAS2008)カード上にあります。

どうやらmdadmは、6つのドライブすべてがシステムに接続される前にアレイを初期化しようとします

これにmdadm-functionsを編集すると、すべてが機能します(醜い修正):

degraded_arrays()
   {
       sleep 15
   mdadm --misc --scan --detail --test >/dev/null 2>&1
   return $((! $?))
  }

私にとって、このバグは、今日10.04LTSから12.04.1LTSにアップグレードしたときに発生しました。

2
jonaz

だから私はいくつかのヒントの後で問題はいくつかのドライブがmdadmによって十分に速く検出されないことであると理解しました、それでそれは単に停止します。

誰かがカーネルパラメータとしてrootdelay = 30を追加することを提案しましたが、Ubuntuは単にそれを無視しました。代わりに、initramfsプリマウントスクリプトを追加しました。

echo "sleep 60" > /etc/initramfs-tools/scripts/init-premount;
chmod +x /etc/initramfs-tools/scripts/init-premount;
update-grub; 
update-initramfs -u;

そして再起動すると、起動に1分長くかかりますが、mdadmがすべてのドライブを検出したことがわかります。

1
Ueland

私のために働いた他の場所で見つかった答えの変更。

私が見た症状:

Lucid/10.04で正常に動作していたRAIDは、Precise /12.04にアップグレードすると自動アセンブルを停止しました。 RAIDは、Preciseでは/ dev/md127としてアセンブルされていました。 initramfs Shellでは、次の問題が修正され、マシンが起動できるようになりました。

mdadm --stop/dev/md127 mdadm --assemble/dev/md0

うまくいった解決策:

Mdadm.confに正しいARRAY行があることを確認してください。 (/ dev/md0を正しくアセンブルできたという事実は、mdadm.confが正しいことを示唆していました。)

/ usr/share/initramfs-tools/scripts/local-topにスクリプトを作成します(私はそれをmdfixと呼びました)

#!/bin/sh
sleep 6
mdadm --stop /dev/md127
sleep 6
mdadm --assemble /dev/md0

次に

chmod +x mdfix
update-grub
update-initramfs -u

update-initramfsは、/ dev/md127について「そのようなデバイスはありません」を生成する場合があります。タオルを頭にかぶせて、慌てないでください。 :)

再起動すると、以前より少し遅い場合は、/ dev/md0が正しくマウントされるはずです。 (睡眠は必要ないかもしれませんが、後悔するより安全です。)

1
jmjf