假设我有一个使用 3 个设备 /dev/sdb[1-3] 的 RAID 1 配置。md 设备是 /dev/md0。
如果我像以下示例一样任意写入一个/一些底层设备,会发生什么情况?
dd if=/dev/zero of=/dev/sdb2 bs=512 count=10 && dd if=/dev/zero of=/dev/sdb3 bs=512 count=20
通过运行以下命令可以看出,RAID 控制器似乎没有发现底层设备之间存在任何不一致
mdadm --detail
/dev/md0:
Version : 1.2
Creation Time : Sun Sep 25 19:31:26 2016
Raid Level : raid1
Array Size : 1134592 (1108.19 MiB 1161.82 MB)
Used Dev Size : 1134592 (1108.19 MiB 1161.82 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sun Sep 25 21:33:25 2016
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Name : u2:0 (local to host u2)
UUID : 952d3545:9681da3d:58cc4024:75e1fc89
Events : 81
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
2 8 19 2 active sync /dev/sdb3
cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb3[2] sdb1[0] sdb2[1]
1134592 blocks super 1.2 [3/3] [UUU]
unused devices: <none>
但是,当我尝试挂载 /dev/md0 文件系统时出现以下错误:
mount /dev/md0 /mnt/a
mount: wrong fs type, bad option, bad superblock on /dev/md0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
RAID 设备中的数据能否幸存?如果可以,怎么办?
提前致谢,
答案1
是的,因为1个磁盘仍然有正确的数据。
您可能需要手动失败+移除坏磁盘,重新分区,将其添加回来并同步阵列...小心。
https://www.thomas-krenn.com/en/wiki/Mdadm_recovery_and_resync
停止和启动阵列可能让它立即在降级模式下工作。但您可能仍需要修复阵列。
https://superuser.com/questions/603481/how-do-i-reactivate-my-mdadm-raid5-array
mdadm --stop /dev/md0
mdadm --assemble --scan
答案2
mdraid 不验证数据的一致性,即使在 raid1/5 中也是如此。因此在这种情况下可能会发生无声损坏。但最糟糕的是,在这种情况下 mdraid 不知道哪个磁盘包含正确的数据。如果您损坏了第一个磁盘上的数据并使用类似这样的命令执行阵列修复:
echo repair > /sys/block/md0/md/sync_action
您将真的倒霉。在这种情况下,mdraid 会将错误的数据从第一个磁盘复制到第二个磁盘。它会有效地擦除该位置的正确数据。因此,始终需要有良好的备份计划,并记住 raid 不是完美的或白痴教授。