読み取りおよび書き込みのためにローカルファイルシステムを再マウントできません(RAID1)。

読み取りおよび書き込みのためにローカルファイルシステムを再マウントできません(RAID1)。

私はAsus P9X79マザーボードに新しいシステムを構築し、そのRAIDコントローラを使用して2つの500Gbドライブで構成されたRAID1アレイを作成しました。

/dev/md126外付けドライブからアーチを起動すると、そのアレイに対応するドライブを問題なく使用できます。このようにしてパーティションとファイルシステムを作成し、ドライブをルートに置き換えてArch Linuxをインストールしました。

ただし、RAID:で正常に起動できず、/読み取り/書き込みモードで再インストール(戻る)できないため、緊急/bootコンソールが表示されます。そこから再インストールしようとしても失敗し、ドライブが書き込み禁止になっていると言いました。/homemount32

いくつかの必須カーネルモジュールがロードされず、起動時に使用されていないようですmkinitcpio.confmdadm_udevudev、前filesystems)。私が理解したところによると、これで十分ですが、配列に、およびをraid1追加raid456ext2てみましたが、何も変更されませんでした。ext4MODULES

mdadm_udevRAID1自体は、Hook(デバイスが存在する)によって初期環境で認識されます。raid1このフックによっても自動的にロードされるようです。

私はまだ外部ドライブから起動してRAID1デバイスをマウントできたので、それをlsmod実行してlsmod「ローカル」システムと比較しました。疑わしいことはないと思います。

$ diff <(sort lsmod.old | cut -f1 -d ' ') <(sort lsmod.new | cut -f1 -d ' ')
7a8,12
> async_memcpy
> async_pq
> async_raid6_recov
> async_tx
> async_xor
13a19,20
> drm
> drm_kms_helper
24a32
> i2c_algo_bit
43c51
< nvidia
---
> nouveau
48a57,58
> raid456
> raid6_pq
64a75,76
> ttm
> uas
71a84
> xor

old効果的です。ご覧のとおり、始まる唯一の行<はです< nvidia。したがって、必要なすべてのモジュールがロードされます(追加のモジュールのいくつかはnew私がロードしたい依存関係ですraid456)。

私がここで何を見逃しているのでしょうか? 2つのシステム間にどのような違いがありますか?カーネルバージョンは3.6.8と同じです。 (しかし、私が最初に使ったインストールメディアは3.6.6で、その配列では機能しませんでした。

答え1

(レフ解決策が見つかりました、なぜ動作するのかを説明しています。 )

RAIDコントローラを使用したRAID1アレイの作成

これは悪い兆候です。偽の攻撃- ファームウェアのいくつかの助けを借りて、主にWindowsドライバとして実装されるRAID実装です。ハードウェアRAIDのすべての欠点(ファームウェア依存性)とソフトウェアRAIDのすべての欠点(パフォーマンスの利点なし)があります。

RAIDメタデータはファームウェアによって処理されます。 (メタデータは、RAIDデバイスに保存されているファイルシステムやパーティションの一部ではない場所に保存する必要がある追加データです。たとえば、各データブロックをソートする必要がある場所、再同期を処理するための追加データなど)実装(少なくともこのドライバの場合)これはカーネルだけでは処理されません。mdmon便利それも必要です。

システムが起動すると、カーネルと初期RAMドライバ(ファイルシステムの初期化)。この初期RAMドライブには、ルートファイルシステムをマウントするために必要なすべてのロード可能なモジュールとプログラムが含まれている必要があります。 RAMに適合する必要があるため、ほとんどのディストリビューションはシステムに必要なドライバに基づいて要求に応じてinitramfsを生成します。これは通常、カーネルをアップグレードするたびに行われます。

mdmonArch Linuxのinitramfs生成スクリプトは、起動時にこのプログラムが必要であることを検出できず、機能しないinitramfsを生成したようです。mdmoninitramfsが機能するようにするには、initramfsに強制的に存在する必要があります。

答え2

私はそれを動作させるために以下の提案に従いました。ここ。つまり、/sbin/mdmon配列BINARIESに追加しましたmkinitcpio.conf

これは私に少し黒魔法のように見えるので、とにかく説明と一緒に詳細な答えを歓迎します。

関連情報