假设您有带有 2 个磁盘的 mdadm raid1。
然后关闭服务器,将每个磁盘拆分到不同的机器上并启动它们,因此它们会变得稍微不一致
现在关闭这两个盒子并将磁盘放回原始机器并启动它。
mdadm 如何确定这 2 个磁盘中哪一个是正确的,哪一个是“错误的”并与正确的磁盘同步?
是否有可能以某种方式指定这一点?如果您这样做,实际上会发生什么,磁盘会自动同步还是阵列会损坏?
答案1
在这种情况下,每个磁盘都会声称另一个磁盘出现故障。
结果取决于您如何准确地组装磁盘,但本质上,它将使用一个磁盘并忽略另一个磁盘;或者它可能会将另一个集合为一个单独的突袭,这会给你一个分裂的大脑。
我用循环设备做了一个实验,我首先更改了loop1,然后更改了loop2,因此loop2是更“最近”的一个,但它被忽略了:
# mdadm --assemble /dev/md42 /dev/loop1 /dev/loop2
mdadm: ignoring /dev/loop2 as it reports /dev/loop1 as failed
mdadm: /dev/md42 has been started with 1 drive (out of 2).
如果你以相反的方式执行它,它只会忽略另一个磁盘:
# mdadm --assemble /dev/md42 /dev/loop2 /dev/loop1
mdadm: ignoring /dev/loop1 as it reports /dev/loop2 as failed
mdadm: /dev/md42 has been started with 1 drive (out of 2).
这让我相信它只会坚持它首先找到的任何磁盘。因此,完全有可能在重新启动后,您突然看到 RAID 的另一面。这实在是太糟糕了。
它不会自动同步,甚至完全忽略其他磁盘:
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md42 : active raid1 loop1[0]
102272 blocks super 1.2 [2/1] [U_]
您永远不想处于这种情况,因此您应该避免它(不要通过按照您所描述的方式移动磁盘来故意引发它)。诸如此类的冲突必须手动解决。