У меня есть два раздела жесткого диска, которые я объединил в RAID1, используя mdadm
, и создал файловую систему ext4 на полученном устройстве.
Когда я mdadm --zero-superblock
два раздела и воссоздайте RAID, тогда исходные метаданные ext4 волшебным образом сохранятся.
Это почему?
И как я могу сказать 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
flag ничего не стирает, а просто показывает информацию):
# wipefs /dev/md1
offset type
----------------------------------------------------------------
0x438 ext4 [filesystem]
LABEL: mylabel
UUID: 3d230d31-fb82-46ef-a4e0-e9473e05825c
LABEL: mylabel
показывает, что метка ext4 "пережила" очистку суперблока mdadm и воссоздание RAID.
Как это может быть?
Я думал, что после очистки и восстановления суперблока mdadm должен предоставить мне «чистый» вид устройства (то есть все нули), если не задан флаг, который отключает это (например, --assume-clean
, который я не приводил).
Поскольку обнуление суперблока mdadm удаляет только метаданные, описывающие массив raid, оно не удаляет информацию о том, что на самом деле находится на остальной части диска. На самом деле это хорошо, так как это означает, что вы можете восстановить том, когда сам массив не собирается по какой-то досадной причине.
И для ясности: поскольку вы создаете массив с использованием томов, а не всего диска, таблица разделов не затрагивается mdadm, поэтому обнуление суперблока рейда не повлияет ни на метку диска, ни на структуру разделов. .
Еще не получили окончательного ответа на вопрос «полностью удалить метаданные рейда»?
вот мой (фрагмент скрипта создания рейда при обнаружении предыдущего 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))
Надеюсь, это сэкономит кому-то время, которое мне стоило разобраться.