我有一个由两个 SSD 组成的 RAID 10 阵列,在 Linux 上使用 mdadm,
我创建了它
mdadm --create --verbose --level=10 --metadata=1.2 --chunk=512 --raid-devices=2 --layout=f2 /dev/md/MyRAID10Array /dev/nvme0n1p3 /dev/nvme1n1p3
但我想知道为什么当我查看数组时,我得到的块大小是 65536kb?我还认为 --chunk=512 可能太大了。
来自 cat /proc/mdstat
md127 : active raid10 nvme1n1p3[1] nvme0n1p3[0]
942664704 blocks super 1.2 512K chunks 2 far-copies [2/2] [UU]
[=====>...............] resync = 29.5% (278703616/942664704) finish=55.2min speed=200170K/sec
bitmap: 6/8 pages [24KB], 65536KB chunk
答案1
根据 mdadm wiki,https://raid.wiki.kernel.org/index.php/Mdstat,您在那里看到的是位图块,而不是数组块。根据上面两行的消息,数组块的大小是 512K,正如您设置的那样。虽然 wiki 没有完全清楚位图块值的含义,但它确实说“内存中的位图使用每个位图块的 16 位来计算对该块的所有正在进行的写入,因此它实际上比磁盘上的位图大 16 倍。”“位图块”实际上可能是内存中一个“页面”位图的大小。您的数组仅报告了 8 页位图,其中 6 页已加载到内存中;一旦您的重新同步完成,位图的页面计数应该会下降。
答案2
chunk
定义 RAID 阵列元素条带(即:数据块有多大)。从手册页:
-c, --chunk=
Specify chunk size in kilobytes. The default when
creating an array is 512KB.
mdstat
第二行证实了这一点:
942664704 blocks super 1.2 *512K chunks* 2 far-copies [2/2] [UU]
数据块不同于位图块,定义每个位图的位所覆盖的活动区域。这类块要大得多 - 在您的例子中为 64MB:
bitmap: 6/8 pages [24KB], *65536KB chunk*
一般来说,对于 RAID1/10,您不需要调整这些参数。但是,请记住,默认值是针对旋转介质 (HDD) 而不是快速 SSD 进行优化的,因此,如果您愿意,可以尝试使用较小的数据块(即:8-64K)。不过,我不会费心调整位图。