我发现无法使用一个命令从服务器中删除 mdraid。
我可以通过以下方式阻止它mdadm --stop /dev/md0
但超级块仍然在设备中。
mdadm --zero-superblock DEVICE
需要每个设备(例如 /dev/sdb1)
我知道我能做到mdadm --detail /dev/md0
,然后我就看到了这些设备。
我可以编写一个脆弱的脚本来从 的输出中获取 /dev/sd... 字符串mdadm --detail /dev/md0
,但我想避免这种情况。
是否有一个单行程序可以从 mdraid 的所有设备中删除超级块?
我想避免解析 的输出mdadm --detail
,因为这感觉很脆弱。
如果您知道阵列组件设备,您可以简单地发出以下命令
mdadm --zero-superblock /dev/sd[abcd]
使用单个命令从多个设备中删除超级块。
请注意,
mdadm
在将任何内容归零之前会检查超级块,因此sd*
在上面的命令中指定应该只触及组件磁盘,而不向其他磁盘写入任何内容。但是,我强烈建议不要这样做:超级块检测路由或使用中的任何问题--force
都将覆盖非组件磁盘上的良好数据(导致数据丢失)。从手册页:由于上述原因,如果您不知道阵列组件设备,我建议通过以下方式列出它们
blkid -t TYPE="linux_raid_member" -o device
然后使用 将特定磁盘归零
mdadm --zero-superblock
。这可以使用单行 bash 命令编写脚本:与往常一样,请仔细检查任何此类命令以避免数据丢失。
编辑:要发现阵列组件设备而不需要解析
mdadm --detail
输出,您可以使用lsblk
. 例如,在通过loop
设备创建的测试阵列上:没有一个命令 (
mdadm …
) 可以从 mdraid 的所有设备中删除超级块。然而,编写一个脚本然后变成一行是相当简单的:示例用法,假设脚本被调用
mdzero
并且它位于 PATH 中,等等,并且不需要的 RAID 设备是/dev/md1
:除非您输入(大写)“Y”来响应“停止并擦除?” 问题 - 或者命令正在以非交互方式运行 - 该工具将在此时退出。本质上,您已经进行了 20 多行健全性检查,以确保
mdadm --zero-superblock
仅在绝对需要的情况下运行活动命令您可以
blkid
通过一些操作来完成此操作。首先,获得你关心的raid阵列。
将 UUID 转换为正确的 UUID 格式,您可以使用它
blkid
来提取所有磁盘成员。如果您只想爆破所有 mdadm raid 阵列,则无需收集任何其他标识符:
要使用此方法爆破所有内容,您甚至可以使用
wipefs
. 那可能看起来像......当然,这会将所有磁盘的所有 raid 阵列清零,而不关心有问题的特定 raid 阵列。我添加了一个
-n
以防止人们粗心地复制/粘贴!