编辑:我的问题的解决方案如下
我想在 CentOS 系统上使用 mdadm 创建一个经过良好优化的 RAID6 阵列,其中包含一个 XFS 分区。它将涉及十个 ST3000DM001 Seagate 3TB 硬盘,我将通过千兆以太网连接一次写入几 TB 的数据,全部写入超过 100 MB 的文件中。我阅读的有关配置 RAID(使事物相互对齐等)的文章越多,我就越觉得自己不知道自己在做什么。
具体来说,我希望得到有关 mdadm --create 和 mkfs.xfs 命令的一些帮助,以及是否需要在硬件或操作系统中更改任何其他内容的建议。
通过查看在线资源,我最好的猜测是
RAID6 块大小:2MiB(这只是猜测)
XFS 块大小:4KiB(我假设这是我的系统的页面大小,并且我认为不能再高了)
XFS agcount:64(这只是猜测)
单位=4096,宽度=32768
因此看起来我的命令应该是:
# mdadm --create /dev/md0 --chunk=2048 --level=6 --raid-devices=10 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdh /dev/sdi /dev/sdj /dev/sdk
# parted /dev/md0
mklabel gpt
mkpart primary 0.00TB 27.00TB
# mkfs.xfs -L /big_raid -b size=4096 -d agcount=64,sunit=4096,swidth=32768 /dev/md0p1
但我很乐意听取任何建议。我制作了一个具有类似设置的 RAID5 阵列,但速度非常慢,写入速度为 20 MB/秒(这是我使用单个驱动器可以获得的速度的 1/5)
编辑:
因此,我发现 Seagate ST3000DM001 可能是我可能选择的最糟糕的硬盘,根据 Backblaze 的说法,所以第一件事就是:不要买!我认为一年半内 10 个硬盘中有 4 个出现故障
我通过以下更改构建了 RAID6,它的速度提高了 5 倍,但我不确定每个单独的更改会造成多大的影响
- 创造对齐分区在每个驱动器上并从中构建 RAID,如下面的答案所述
从这一页
在每个驱动器上禁用 NCQ。对于每个驱动器
# echo 1 > /sys/block/sd[driveletterhere]/device/queue_depth
设置预读
# blockdev --setra 65536 /dev/md[raidnumberhere]
设置 RAID 的 stripe-cache_size
# echo 16384 > /sys/block/md[raidnumberhere]/md/stripe_cache_size
希望这对那些和我一样正在寻找同样东西的人有所帮助!我的 CPU 是 AMD A4-5300,内存是 8GB,这个设置几乎不影响任何一个
答案1
我同意。不过你不必在 md0 上运行 parted,只需创建一个分区即可。
# mdadm --create /dev/md0 --chunk=2048 --level=6 --raid-devices=10 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdh /dev/sdi /dev/sdj /dev/sdk
# mkfs.xfs -L /big_raid -b size=4096 -d agcount=64,sunit=4096,swidth=32768 /dev/md0
根据我的经验,改变块大小不会对性能产生太大的改善。它总是只有 1-2%,没什么大不了的。
直接在驱动器上创建 raid 可能会在某些系统上造成一些问题,如果您想将其用作启动驱动器,情况会更糟。因此,我会在驱动器上使用 parted,在每个驱动器上创建 1 个 gpt 分区。分区最好对齐 - parted 支持哪些分区(请关注https://www.google.cz/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=parted%20alignment%20partitions),然后在 /dev/sda1、/dev/sdb1、... 上创建 md0