出于实验目的,我需要在单个系统中安装尽可能多的磁盘。由于我只有 6 个备用磁盘,因此我决定将它们划分为 128 个 GPT 分区,并使用每个分区创建一个设备的 RAID0 阵列。
问题是 mdadm 仅创建了 512 个数组/dev/md[0-511]
,我无法创建任何其他数组。
尝试创建第 513 个数组后,出现错误:
% mdadm -C /dev/md512 -l raid0 -n 1 /dev/sdd128 --force
mdadm:打开 /dev/md512 意外失败
这是设计的限制吗?有什么办法可以绕过它吗?
答案1
/dev/md*
您已达到单个 Linux 系统上阵列的最大限制。
这与传统的 Unix 设备主次编号有关。最初,MD RAID 驱动程序分配的主块设备编号为 9(定义为/usr/include/linux/raid/md_u.h
MD_MAJOR),并且允许一组 256 个次设备编号,从而允许 256 个唯一的 RAID 阵列设备。(设备号分配的规范列表包含在内核源代码包附带的文档中。)
mdp_major
这最终被证明是不够的,并且开发了一种机制,以便在需要超过 256 个 RAID 阵列时使用一个额外的主编号(在内核代码中称为)。您可以在内核源文件中找到处理此问题的代码.../drivers/md/md.c
。额外的主设备号mdp_major
是从动态主设备号范围(234..254,从顶部开始向下分配)中动态分配的。
要在一台主机上使用超过 512 个 MD RAID 阵列,需要重写这一机制以使用多个动态主编号(如果需要)。
答案2
有一个相当肮脏的解决方法(适用于3.10.0-862.11.6
分支的最新内核)
# echo md512 > /sys/module/md_mod/paramaters/new_array
# mdadm -C /dev/md512 -l raid0 -n 1 /dev/sdd128 --force