web-dev-qa-db-ja.com

mdadm --zero-superblockがファイルシステム情報を保持するのはなぜですか?

2つのハードドライブパーティションがあり、それらをmdadmを使用してRAID1に結合し、結果のデバイスにext4ファイルシステムを作成しました。

2つのパーティションをmdadm --zero-superblockしてRAIDを再作成すると、元のext4メタデータが魔法のように保持されます。

何故ですか?

また、本当に新しい初期化されていないMDを与えるようにmdadmに指示するにはどうすればよいですか


細部

RAID1とファイルシステムの作成方法:

ls /dev/sdc2  # partition 1
ls /dev/sdd2  # partition 2
mdadm --create --run --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdc2 /dev/sdd2
mkfs.ext4 -L mylabel /dev/md1

RAID1をワイプ:

mdadm --stop /dev/md1
mdadm --zero-superblock /dev/sdc2
mdadm --zero-superblock /dev/sdd2

RAID1を再作成します。

mdadm --create --run --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdc2 /dev/sdd2

デバイス情報を表示します(wipefs-aフラグを付けない場合、何もワイプされず、情報が表示されるだけです):

# wipefs /dev/md1
offset               type
----------------------------------------------------------------
0x438                ext4   [filesystem]
                     LABEL: mylabel
                     UUID:  3d230d31-fb82-46ef-a4e0-e9473e05825c

LABEL: mylabelは、ext4ラベルがmdadmスーパーブロックのワイプとRAIDの再作成を「生き延びた」ことを示しています。

それはどういうことですか?

スーパーブロックのワイプとレクリエーションの後、それをオフにするフラグ(--assume-cleanなど私は与えていません)。

4
nh2

Mdadmスーパーブロックをゼロにすると、RAIDアレイを説明するメタデータのみが削除されるため、実際にディスクの残りの部分にあるものに関する情報は削除されません。これは実際には良いことです。これは、アレイ自体が何らかの理由で組み立てられないときに、ボリュームを回復できる可能性があることを意味します。

そして明確にするために、ディスク全体ではなくボリュームを使用してアレイを作成しているので、パーティションテーブルはmdadmの影響を受けないため、raidスーパーブロックをゼロにしても、ドライブラベルやパーティション構造には影響しません。 。

7
RibaldEddie

「レイドメタデータを完全に削除する」という決定的な答えはまだありません。

これが私のものです(以前のRAIDが検出されたときのraid作成スクリプトのスニペット):

DISK=drive with partition (eg: /dev/sdc3)
DRIVE=drive without partition (eg: /dev/sdc)
DRIVE_SECTORS=$(fdisk -l $DRIVE | grep Disk | grep sectors | cut -f7 -d ' ')
RAID_OFFSET=$(wipefs $DISK | grep linux_raid_member | sed 's/  */ /g' | cut -d ' ' -f2)
wipefs -o $RAID_OFFSET $DISK
# Zero last 4M of DISK
dd bs=512 if=/dev/zero of=$DRIVE count=8182 seek=$(($DRIVE_SECTORS - 8192))

それを整理するのに私がかかる時間を他の誰かが節約することを願っています。

0
Bill Ross