ストライプサイズが正しくなく、ディスク障害のないRaid 5の再構築 - データが失われますか?

ストライプサイズが正しくなく、ディスク障害のないRaid 5の再構築 - データが失われますか?

RAID5とRAID5の再構築に隠された複雑さがあるかどうか疑問に思います。

私が理解したように(3つのディスクアレイで)、再構築はディスク1と2のパリティを直接計算し、そのパリティをディスク3(または交換されたすべてのディスク)に書き込みます。本当に簡単な場合は、実際にディスクを交換せずに再構築するとデータが失われますか?

たとえば、すべてのディスクと生データがそのままのRAIDアレイを構成したが、間違った対称性、間違ったストライプサイズ、間違ったディスクの順序などを設定した場合は「仮定」します。これにより、何らかの理由でアレイを再同期または再構築すると、データが失われますか(または変更されますか?)

ベストアンサー1

RAID からディスクを取り出したが、欠落しているディスクが重複して上書きされるため、RAID が動作し続ける場合は、交換用ディスクを追加すると追加されたディスクが上書きされます。デバイスに表示されるデータは/dev/mdX変更されないため、データの損失はありません。ただし、追加されたディスクに機密データがある場合、上書きはそのデータを失います。

したがって、すべては、残りのディスクのデータが破損していないかどうかによって異なります。

間違った対称性の設定、間違ったストライプサイズ、間違ったディスクの順序など

mdadm --createRAIDの復元を避けてください。これはエラーが発生しやすいため、最悪のオプションです(ディスク順序、ブロックサイズ、RAIDレベル、RAIDレイアウト、メタデータバージョン、データオフセットなどの変数が多すぎます。mdadmこれらの変数のデフォルト値は時間の経過とともに変わります)。なので、すべて正しく指定する必要があります。)

必ず使用する必要がある場合は、読み取り専用モードで使用する必要があります。メタデータ領域のバックアップ、スナップショットレイヤー、--assume-clean同期を防ぐための不足しているディスクなど...

誤った同期によってデータが破損したり変更されたりするかどうかは、設定​​エラーの重大度によって異なります。デフォルトでは、RAID5では、すべてのディスクが破損せず、すべてのパリティデータが正しい限り、すべてのディスク順序とブロックサイズと同期できます。同期自体は害を及ぼさない。 XORはXORなので、順序やサイズに関係なく結果は同じです。

# truncate -s 128M a b c
# losetup -f --show a b c
/dev/loop0
/dev/loop1
/dev/loop2
# mdadm --create /dev/md42 --level=5 --chunk=512 --raid-devices=3 /dev/loop0 /dev/loop1 /dev/loop2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md42 started.
# shred -n 1 /dev/md42
# mdadm --stop /dev/md42
mdadm: stopped /dev/md42
# dd if=/dev/loop0 bs=1M skip=8 | md5sum
98f23e09198f7943e27030e8e0f9bc30  -
# dd if=/dev/loop1 bs=1M skip=8 | md5sum
90ef43c60e540b930c6db8dae831f8ab  -
# dd if=/dev/loop2 bs=1M skip=8 | md5sum
d010c8ae141fadc3347e8ed319b76db9  -
# mdadm --create /dev/md42 --level=5 --chunk=64 --raid-devices=3 /dev/loop2 /dev/loop0 /dev/loop1
mdadm: /dev/loop2 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Fri Sep  5 11:35:51 2014
mdadm: /dev/loop0 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Fri Sep  5 11:35:51 2014
mdadm: /dev/loop1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Fri Sep  5 11:35:51 2014
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md42 started.
# mdadm --wait /dev/md42
# mdadm --stop /dev/md42
mdadm: stopped /dev/md42
# echo 3 > /proc/sys/vm/drop_caches
# dd if=/dev/loop0 bs=1M skip=8 | md5sum
98f23e09198f7943e27030e8e0f9bc30  -
# dd if=/dev/loop1 bs=1M skip=8 | md5sum
90ef43c60e540b930c6db8dae831f8ab  -
# dd if=/dev/loop2 bs=1M skip=8 | md5sum
d010c8ae141fadc3347e8ed319b76db9  -

ただし、セットからディスクが欠落している場合、またはセットに追加のディスクがある場合、またはディスクの1つのパーティションオフセットなどの他のエントリが変更された場合、または別のRAIDレベルを使用している場合、そのディスクは機能しなくなります。このように動作すると、同期的に作成された内容はすべて失われます。そこから回復できるかどうかは、上書きされたデータを上書きできる他のディスクにまだ重複があるかどうかによって異なります。この状況で簡単に回復する方法はありません。

おすすめ記事