mdadm – 在其他分区上的磁盘上的超级块

我有三个磁盘用于保存MD RAID5arrays。 我已经删除(或所以我想)这个数组,并创buildbtrfs和交换空间的partions。 在重新启动计算机时,MD仍然绑定用于容纳旧arrays的设备,导致新的文件系统无法安装。

有人向我暗示,raidarrays的旧超级块可能会被留下,导致MD认为它是一个真正的arrays,从而绑定磁盘。 build议的解决scheme是使用mdadm –zero-superblock清除受影响的磁盘上的超级块。 但是,我不知道这是怎么做的磁盘。 由于这个磁盘容纳分区,我不想盲目地开始调零。

那么我应该遵循什么程序来安全地清除MD超级块,而不会损坏驱动器上的其他分区和文件系统?

这个问题本质上是同样的问题,但是在重新分区的设备上做mdadm –zero-superblock实际上应该是安全的还是没有明确的答案: mdadm superblock hiding / shadowing partition

https://raid.wiki.kernel.org/index.php/RAID_superblock_formats

超级块是4K长,并被写入64Kalignment的块中,该块从设备的末端开始至less64K且小于128K(即,将超级块的地址围绕设备的大小降至64K的倍数,并且然后减去64K)。 每个设备的可用大小是超级块之前的空间量,因此,当一个设备被并入到一个MDarrays中时,在64K和128K之间会丢失。

所以,现在已经太晚了使用--zero-superblock 可能是不安全的 ,因为我们不知道是否有数据 – 您必须将当前分区从x-RAID的末端调整到-128K分区,然后,擦除该部分,然后重新生成分区。

其他选项1:写入大文件填满整个磁盘,它将覆盖RAID超级块并且不会被mdadm识别。

其他选项2:类似于1: https : //unix.stackexchange.com/questions/44234/clear-unused-space-with-zeros-ext3-ext4

我就是这样想的(这可能与我的情况有很大的关系,但我会尽量保持在一般情况下)。

(当我谈论设备时,我的意思是raid卷组成的设备,而不是raidarrays本身)

我使用mdadm -E $DEVICE来确定数组使用的元数据格式。 然后我去[0]find关于超级块格式的一些信息。 在我的情况下,这是0.90版本。

这种格式将超级块存储在设备的末尾。 这是我的情况进来的地方。我的旧arrays是直接在驱动器上,没有分区。 正因为如此,我知道超级块应该在设备的最后。 我的新分区最后包含一个交换分区。 因此,超级块所在的位置没有太多的数据丢失。

我做了一些阅读,我得出的结论是, mdadm --zero-superblockmdadm --zero-superblock只能清除超级块本身,因此它应该是安全的在我的情况。 我继续去除了所有三个设备上的超级块:

 mdadm --stop $ONE_OF_THE_DEVICES 

根据需要重复这一行

 mdadm --zero-superblock $DEVICE 

一些额外的评论/推测:

一般来说,如果新的分区/文件系统需要空间,它应该已经被覆盖了。 因此,如果超级块仍在那里,调零应该不会伤害分区/文件系统。 我不知道MD如何处理超级块已被一个或多个设备覆盖的情况,但不是全部。 手册页说,如果超级块无效,则需要使用-f来清除超级块,但记住它。

0: https : //raid.wiki.kernel.org/index.php/RAID_superblock_formats

wipefs --all /dev/sd[4ppropr14t3][123] (当然为你的驱动器/分区设置glob!)