问题:
# ls /dev/md*
/dev/md0 /dev/md1
# dd if=/dev/zero of=/dev/sdb3 bs=1M count=1
# dd if=/dev/zero of=/dev/sdd3 bs=1M count=1
# mdadm --zero-superblock /dev/sdb3
# mdadm --zero-superblock /dev/sdd3
# mdadm --create -l 1 -n 2 /dev/md2 /dev/sdb3 /dev/sdd3
mdadm: cannot open /dev/sdb3: Device or resource busy
# ls /dev/md*
/dev/md0 /dev/md1 /dev/md127 /dev/md2
# mdadm -D /dev/md127
mdadm: md device /dev/md127 does not appear to be active.
我没有要求它自动检测和组装任何东西。我也没有重新启动。
我多次移动这些磁盘上的分区来尝试不同的设置。所以这些实验的痕迹可能无处不在。
sdb3 并不忙。我几秒钟前才创建它,如下所示:
swapoff -a
parted /dev/sdb rm 4 (my old raid10 + lvm)
parted /dev/sdb rm 3 (my old swap)
parted /dev/sdd unit s mkpart root4 503808 5860533118 (start here is same as swap start, and end is same as raid10+lvm end)
parted /dev/sdd set 3 raid on
另外,如果我创建了一个只有 /dev/sdd3 的设备,那么 --create 命令也会打印以下内容:
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
但是现在它还会打印,在“-l 1”再次工作之后,没有“设备或资源繁忙”消息。(并且该磁盘具有 bios_grub 和启动 raid1 分区,其元数据为 0.90,但这个 sdd3 与启动无关)。
但是我现在无法重现这个问题...我尝试了几次并且重现得很好,但是在尝试使用“-l 0”之后,它起作用了。“-l 10”与“-l 1”具有同样的效果。
问题:
为什么会出现md127呢?
如果创建失败,为什么还要使用 md2 呢?
将来,除了使用:
- 将块设备的起始位置清零
- mdadm --zero-超级块
- 并使用“-l 0”创建(这是一个无意义的解决方案)
我还能做些什么来清理磁盘以便为“--create”做好准备?
答案1
md127
仅从屏幕上发布的输出很难解释为什么会出现。但下次您可以做的是检查cat /proc/mdstat
显示的内容 - 它会告诉您这是否md127
真的是内核设备。如果不存在,您可以删除/dev/md127
。
与此相关,回答第二个问题,该mdadm
工具将尝试创建下面的设备节点/dev
,但如果由于某种原因失败,它将不会清理它们。
回答第三个问题 - 确保磁盘确实未被使用。cat /proc/mdstat
,使用 停止任何 md 设备mdadm --stop
,运行mdadm --zero-superblock
,然后通过运行 确保没有 md 元数据mdadm --examine /dev/sd...
。
答案2
md127 是“分裂” RAID1 阵列时的结果。内核开始反向编号它们,以避免与现有配置的设备发生冲突。它将备用磁盘算作未知 RAID1 阵列的成员。我不知道为什么它将另一个磁盘指定为 md2。这是一个谜。