当我的一台Linux机器中的硬盘驱动器出现故障时,我借此机会从RAID5迁移到一个6磁盘软件RAID6arrays。
在迁移的时候,我没有全部6个驱动器 – 更具体地说,第四个和第五个(插槽3和4)驱动器已经在原始arrays中使用,所以我创build了RAID6arrays,有几个missing设备。 我现在需要在这些空插槽中添加这些驱动器。 使用mdadm --add 确实产生了正确的RAID6configuration,只有一个小故障 – 新的驱动器被放置在新的插槽中,导致这个/proc/mdstat片段:
... md0 : active raid6 sde1[7] sdd1[6] sda1[0] sdf1[5] sdc1[2] sdb1[1] 25185536 blocks super 1.0 level 6, 64k chunk, algorithm 2 [6/6] [UUUUUU] ...
mdadm -Evalidation设备超级块中的实际槽号是否正确,然而/proc/mdstat中显示的数字仍然很奇怪 。
我想解决这个问题,既要满足我内在的完美主义者,又要避免任何潜在的危机源头。 有没有办法指定一个新设备应该占用RAIDarrays的哪个插槽?
更新:
我已经validation插槽编号在组件设备超级块中保留。 对于我使用的1.0版本的超级块,将会是Linux内核源码的include/linux/raid/md_p.h中定义的dev_number字段。 我现在正在考虑直接修改上述字段来改变插槽号码 – 我不认为有一些标准的方式来操纵RAID超级块?
更新2:
要修改设备超级块中的插槽分配,我需要执行以下操作:
dev_number dev_roles数组以将旧插槽标记为空,并在新插槽中放置适当的angular色 (1)和(2)相对简单,可以通过脚本或小程序自动执行。 (3)开始推动一些东西 – 我将不得不撕开从md驱动程序的超级块校验码,修改它与用户空间程序工作,并希望最好的。
我没有花时间去debugging一个C应用程序,而是冒着杀死我的数组的风险,于是我决定试图让md / mdadm为我做我的工作,正如我的回答中所提到的。 这似乎工作,虽然它可能仍然有一定程度的风险…