当我创建mdadm
RAID 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
在此上下文中意味着什么?
最初该
md_mod/parameters/new_array
参数仅支持创建"md_*" where * is not all digits
. 稍后在linux commit 039b7225e6和mdadm commit 039df36231mdNNN
中添加了数组的创建。尽管此提交早于您的内核,但它从未进入 v4.9.x,因此您的内核尚不支持它。要使此更改生效,您需要 linux 内核 v4.12 或更高版本,以及 mdadm v4.1 或更高版本。您已经有 mdadm v4.1,但内核未更新,因此整个问题归结为“您的 mdadm 比您的内核新”。
在这种情况下
mdadm
,会退回到旧的节点创建模式,该模式按预期工作,因此尽管出现错误消息,但它还是成功的。最后你仍然得到你的数组,一切都很好(对于更大的数字或更奇特的 md 名称可能会失败)。问题是为什么你的靶心内核这么老。从我在 raspbian 上看到的情况来看,它应该随 linux 6.1 或 5.10 一起提供,所以不确定为什么你坚持使用 4.9。