我使用以下命令从六个硬盘驱动器创建了基于 mdadm 的 RAID 5:
# mdadm --create /dev/md0 --level=5 --raid-devices=5 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 \
--spare-devices=1 /dev/sdg1
我希望该阵列有一个热备用,即 /dev/sdg1。然而,检查mdadm --detail
显示有 2 个备件:
# mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 spares=2 name=...
此外,如图所示的阵列大小df
为 2 TB,这仅相当于我使用的 500 GB 驱动器中的四个。
那么 的语义到底是什么--spare-devices
?手册页指出它“指定初始阵列中备用(额外)设备的数量。”,但这里的情况似乎并非如此。
答案1
该输出是正确的。您创建了一个包含 5 个磁盘的 RAID 5(其中只有 4 个将“使用”空间)。并且您添加了额外的备用驱动器。
因此,您实际上拥有一个 RAID 5,它允许一个磁盘出现故障 + 一个额外的备用驱动器。
如果你想要的实际上是 6 个磁盘的 RAID 5 并且有 5 个磁盘的空间,那么你需要将命令更改为:
mdadm --create /dev/md0 --level=5 --raid-devices=6 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1
但在这种情况下,根据 RAID 5 的规范,您只能容忍一个磁盘故障。
编辑:添加官方 raid 页面中的链接:您可以看到带有 6 个磁盘的 raid 5,并且它状态为 Spare=1: 初始数组创建
更新:我决定在我的系统中创建一个 raid 5,一旦阵列处于干净状态,备用值就会消失:
Raid Devices : 4
Total Devices : 4
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
洁净状态:
Raid Devices : 4
Total Devices : 4
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
因此,正如 OP 评论所述,在初始 raid 5 创建期间,它具有备用驱动器,直到 raid 构建/同步完成。
答案2
为了清楚起见,我将在这里汇总 derobert 和 Alexandre Alves 提供的信息以及我的一些进一步测试:
mdadm
的--spare-devices
参数确实按照手册页所述工作,即它定义了阵列中“热备用”驱动器的数量。在普通 RAID 术语中,“热备用”与 RAID 5 或 RAID 6 阵列中存在的额外驱动器没有任何关系,它是一个额外的驱动器,旨在在阵列中的驱动器出现后立即接管失败了。
备用驱动器的数量在阵列创建时给出。稍后,可以使用 进行检查#mdadm --detail --scan
。
然而,在基于 mdadm 的 RAID 5 初始化的短暂期间,有一个优化,描述于https://raid.wiki.kernel.org/index.php/Initial_Array_Creation,这使得额外的备用驱动器出现在该命令的输出中:
“对于 raid5,有一个优化:mdadm 获取其中一个磁盘并将其标记为“备用”;然后以降级模式创建阵列。内核将备用磁盘标记为“重建”并开始从“良好”读取磁盘,计算奇偶校验并确定备用磁盘上应该有什么,然后写入它。”
阵列初始化完成后,报告的备用数量将恢复到创建时选择的数量。