同僚と私は、仮想デバイス上に2つのパーティションを持つ2つの物理ディスクで構成されるmdadmを使用してソフトウェアRAID1をセットアップしました。セットアップは正常に行われ、RAIDディスクの1つから直接起動すると次のようになりました。
# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sda1[0] sdb1[1]
92094464 blocks super 1.2 [2/2] [UU]
md1 : active (auto-read-only) raid1 sda2[0] sdb2[2]
4069376 blocks super 1.2 [2/2] [UU]
unused devices: <none>
次に、セットアップをテストするために、マシンをシャットダウンし、ディスクの1つを切断して、再起動しました。システムは正常に起動し、自然に劣化した状態になりました。
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sda1[1]
92094464 blocks super 1.2 [2/1] [_U]
md1 : active (auto-read-only) raid1 sda2[2]
4069376 blocks super 1.2 [2/1] [_U]
unused devices: <none>
次に、マシンを再度シャットダウンし、切断されたディスクを再接続して、もう一方のディスクを切断しました。繰り返しますが、次の予想される状態で、すべてがうまくいきました。
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sda1[0]
92094464 blocks super 1.2 [2/1] [U_]
md1 : active (auto-read-only) raid1 sda2[0]
4069376 blocks super 1.2 [2/1] [U_]
unused devices: <none>
最後に、最後にシャットダウンし、すべてを再接続しましたが、取得したのは次のとおりです。
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md1 : active (auto-read-only) raid1 sdb2[2] sda2[0]
4069376 blocks super 1.2 [2/2] [UU]
md127 : active raid1 sdb1[1]
92094464 blocks super 1.2 [2/1] [_U]
unused devices: <none>
ご覧のとおり、最初のパーティション(2番目のエントリ、何らかの理由でスワップされた)は劣化状態にあります(2番目は劣化していませんが、これは単なるスワップパーティションです)。特に気になりませんでした。結局のところ、シミュレートされたディスクの交互の障害の後、2つのパーティションは完全に等しくなくなることが予想されます。不足しているパーティションを次のように追加しました。
# mdadm --manage /dev/md127 --add /dev/sda1
mdadm: re-added /dev/sda1
/dev/sda
のパーティションが/dev/sdb
のパーティションと同期(上書き)されることを期待していました。代わりに、ファイルシステムが破損しました(数秒以内に多数のエラーが発生しました)。
この経験の後、3番目のディスクから再起動し、/dev/md127
でファイルシステムを再初期化し(適切な方法としてmkfs.ext4の-c
オプションを使用)、再起動して再び機能するRAIDに戻しました。次に、もう一度、シャットダウンし、一方のディスクを切断して起動し、再度シャットダウンして、ディスクを再接続しました。今回は、もう一方のディスクも接続したままにして、起動しました。今、私たちはこれを手に入れました:
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sda1[0]
92094464 blocks super 1.2 [2/1] [U_]
md1 : active (auto-read-only) raid1 sdb2[2] sda2[0]
4069376 blocks super 1.2 [2/2] [UU]
unused devices: <none>
上記のように--add
オプションを使用しただけでも、同じことが再び起こるのではないかと心配しています。
2つの質問があります:
mdadm --add
をだまして再同期を行わなかったと思います。マウントされた状態を権限として使用し、追加されたディスクをそれに同期するようにmdadmに指示するコマンドの正しいシーケンスは何でしたか?それが役立つ場合は、mdadm --examine
からの現在の出力は次のとおりです。
# mdadm --examine /dev/sda1
/dev/sda1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 726d9204:889a4c89:b7a1bdb9:a77d8130
Name : testhost:0 (local to Host testhost)
Creation Time : Mon Feb 4 14:39:21 2019
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 184188928 (87.83 GiB 94.30 GB)
Array Size : 92094464 (87.83 GiB 94.30 GB)
Data Offset : 131072 sectors
Super Offset : 8 sectors
Unused Space : before=130984 sectors, after=0 sectors
State : clean
Device UUID : 46077734:6a094293:96f92dc3:0a09706e
Update Time : Tue Feb 5 13:36:59 2019
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : 139d1d09 - correct
Events : 974
Device Role : Active device 0
Array State : A. ('A' == active, '.' == missing, 'R' == replacing)
# mdadm --examine /dev/sdb1
/dev/sdb1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 726d9204:889a4c89:b7a1bdb9:a77d8130
Name : testhost:0 (local to Host testhost)
Creation Time : Mon Feb 4 14:39:21 2019
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 184188928 (87.83 GiB 94.30 GB)
Array Size : 92094464 (87.83 GiB 94.30 GB)
Data Offset : 131072 sectors
Super Offset : 8 sectors
Unused Space : before=130984 sectors, after=0 sectors
State : clean
Device UUID : dcffbed3:147347dc:b64ebb8d:97ab5956
Update Time : Tue Feb 5 10:47:41 2019
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : e774af76 - correct
Events : 142
Device Role : Active device 1
Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
何が悪かったのかわかりました。私はこれを mdadmのドキュメント で見つけました:
デバイスがアクティブなアレイに追加されると、mdadmは、デバイスにメタデータがあるかどうかを確認します。これは、デバイスが最近アレイのメンバーであったことを示しています。含まれている場合は、デバイスを「再追加」しようとします。デバイスが削除されてから変更がない場合、またはアレイに変更があったものを記録した書き込み意図のビットマップがある場合、デバイスはすぐに配列の完全なメンバーになり、ビットマップに記録されたそれらの違いは解決されます。
(私の強調)
両方のデバイスが最初の切断時から分岐したため、記録された変更は相互に互換性がなく、ファイルシステムが細断されました。
このような場合の解決策は、不足しているデバイスを追加する前に、そのデバイスでmdadm --zero-superblock
を呼び出すことです。これにより、クリーンな再構築が強制されます。
2番目のケースでは、デバイスの1つだけが分岐しましたが、おそらく無害でしたが、試したことはありません。物理ドライブを交換する必要がある実際の障害の場合、そもそもメタデータがないので問題ないはずです。