mdadm mdadm:无法打开 /dev/sda1:设备或资源繁忙

mdadm mdadm:无法打开 /dev/sda1:设备或资源繁忙

我无法从单个磁盘切换到 raid 10

发出的命令是:

mdadm --create /dev/md0 --level=10 --raid-devices=8 /dev/sd[abcdefgh]1

输出为:

mdadm mdadm: cannot open /dev/sda1: Device or resource busy

我已经证实这与 DM 无关:

]# dmsetup status

No devices found

文件系统是 GPT,我使用sgdisk --backup=table /dev/sdasdhsgdisk --load-backup=table /dev/sdb复制分区表

该表如下所示:

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  525MB   524MB   ext3                  boot
 2      525MB   86.4GB  85.9GB  ext4
 3      86.4GB  90.7GB  4295MB  linux-swap(v1)
 4      90.7GB  1000GB  909GB

我已经成功创建了其他阵列,但是我无法为第 1 和第 2 个分区创建 raid。

当前状态:

]# cat /proc/mdstat
Personalities : [raid10]
md3 : active raid10 sdh3[7] sdg3[6] sdf3[5] sde3[4] sdd3[3] sdc3[2] sdb3[1] sda3[0]
      16766976 blocks super 1.2 512K chunks 2 near-copies [8/8] [UUUUUUUU]
        resync=DELAYED

md4 : active raid10 sdh4[7] sdg4[6] sdf4[5] sde4[4] sdd4[3] sdc4[2] sdb4[1] sda4[0]
      3552147456 blocks super 1.2 512K chunks 2 near-copies [8/8] [UUUUUUUU]
      [========>............]  resync = 42.5% (1513033344/3552147456) finish=76.2min speed=445722K/sec

unused devices: <none>

有人能提供一些建议吗,我是否需要启动到救援磁盘并在未安装 / 和 /boot 时创建阵列?

答案1

我需要...为 / 和 /boot 创建数组吗当它们没有被安装时

恰恰。

我希望您也意识到旧内容将在此过程中被清除,因此您可能需要创建一个缺少一个设备的新阵列(使用mdadm --level=10 --raid-devices=8 --missing /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1)。然后在新阵列卷上格式化文件系统并将所有数据从 /dev/sda1 复制到其中。然后从阵列重新启动(因此不使用 /dev/sda1 根目录)并实际添加 /dev/sda1。

不要忘记相应地调整引导加载程序。

答案2

在重新排列数组之前尝试停止:

sudo mdadm -Esv
sudo mdadm  --stop /dev/md*
sudo mdadm --misc --scan --detail /dev/md0
sudo mdadm -v --assemble "$array" "$disk1$part" "$disk2$part"

答案3

我遇到了同样的问题。更换了故障驱动器(在发生故障并从 RAID 1 中移除后),但无法将其添加回去。资源一直很繁忙。

解决如下...

问题是系统将我的新磁盘映射为 md126 和 md127(不知道为什么)。因此,这两个额外的驱动器显示为未连接,但在 cat /proc/mdstat 中却存在。

当我执行 mdadm --stop /dev/md* 时,它删除了 md126 和 md127 条目。然后资源使用错误消失,当我执行 mdadmin --manage /dev/md0 --add /dev/sdb1 时,它又正常工作了。耶 :-)

答案4

首先打开此文件 /proc/mdstat 并检查您的块设备 /dev/sda1 是否是任何 md* 的一部分,如果在那里看到它,请尝试使用以下命令将其删除:mdadm --stop md* (* 表示 /dev/sda 所属的 md 后面的编号)

相关内容