使用 mdadm 创建 RAID1 镜像会警告“创建失败”,但成功完成

使用 mdadm 创建 RAID1 镜像会警告“创建失败”,但成功完成

当我创建mdadmRAID 1 阵列时,命令成功完成,但我收到警告。

系统特征(Pi 3 上的 Debian/Raspbian“靶心”):

uname -a
Linux pi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

mdadm --version
mdadm - v4.1 - 2018-10-01

head -n4 /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"

工作示例:

dd if=/dev/zero bs=1M count=128 >/tmp/r1.img               # 128MB will do nicely
cp /tmp/r1.img /tmp/r2.img                                 # Another slice
for r in 1 2; do losetup /dev/loop$r /tmp/r$r.img; done    # Associate block devices

mdadm --create /dev/md0 --level=raid1 --raid-devices=2 --metadata=default /dev/loop1 /dev/loop2

警告信息:

mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
mdadm: array /dev/md0 started.

退出状态 ( $?) 为零,即成功完成。

cat /proc/mdstat几分钟后,状态检查 ( ),允许新的 RAID 阵列同步:

Personalities : [raid1]
md0 : active raid1 loop2[1] loop1[0]
      130048 blocks super 1.2 [2/2] [UU]

unused devices: <none>

引用的“文件”确实存在:

ls -l /sys/module/md_mod/parameters/new_array
--w------- 1 root root 4096 Sep 13 10:34 /sys/module/md_mod/parameters/new_array

以下是运行中的相关部分strace mdadm …

openat(AT_FDCWD, "/run/mdadm/creating-md0", O_RDWR|O_CREAT|O_LARGEFILE, 0600) = 4
close(4)                                = 0
openat(AT_FDCWD, "/sys/module/md_mod/parameters/new_array", O_WRONLY|O_LARGEFILE) = 4
write(4, "md0", 3)                      = -1 EINVAL (Invalid argument)
close(4)                                = 0
write(2, "mdadm: Fail create md0 when usin"..., 74mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
) = 74
unlink("/run/mdadm/creating-md0")       = 0

鉴于元设备已成功创建,该术语Fail create在此上下文中意味着什么?

答案1

最初该md_mod/parameters/new_array参数仅支持创建"md_*" where * is not all digits.mdNNN稍后添加了数组的创建Linux 提交 039b7225e6,mdadm 提交 039df36231

尽管此提交早于您的内核,但它从未进入 v4.9.x,因此您的内核尚不支持它。要使此更改生效,您需要 linux 内核 v4.12 或更高版本,以及 mdadm v4.1 或更高版本。您已经有 mdadm v4.1,但内核未更新,因此整个问题归结为“您的 mdadm 比您的内核新”。

在这种情况下,mdadm会退回到旧的节点创建模式,该模式按预期工作,因此尽管出现错误消息,但它还是成功的。最后你仍然得到你的数组,一切都很好(对于更大的数字或更奇特的 md 名称可能会失败)。

问题是为什么你的靶心内核这么旧。从我在 raspbian 上看到的情况来看,它应该随 linux 6.1 或 5.10 一起提供,所以不确定为什么你坚持使用 4.9。

相关内容