Jes*_*sse 28 linux raid performance mdadm raid-1
我有一个带有 2TB HDD 的廉价 2 盘位 NAS。为了防止磁盘故障,我正在考虑购买第二个 2TB HDD 并将其放入带有 Linux mdadm 的 RAID1。文件系统是ext4。
这会提高还是降低 NAS 的性能?仅读取或写入性能如何?
网上似乎有很多关于这个的意见,但没有达成共识。
谢谢。
编辑:
所以我已经得到了三个不同的答案:“快一点”、“你不会注意到”和“如果有的话会降低性能”。(我主要对读取性能感兴趣。)维基百科说“读取性能可以大致上升为副本数量的线性倍数”。哪一个?
编辑2:
我发现越来越多的证据支持 RAID1 提高读取性能,包括 MD 联机帮助页:
更改并行写入所有设备。从任何一台设备读取数据。驱动程序尝试在所有设备之间分配读取请求以最大化性能。
我还发现了 MD 的 RAID10 with --layout=f2,它提供了 RAID1 的冗余和 RAID0 的读取性能,并且可以使用两个驱动器。然而,写入性能会降低,因为顺序写入涉及两个驱动器在驱动器的远处部分之间来回寻找。man md详情。
Now*_*ker 43
是的,只要同时执行两个单独的磁盘读取操作,RAID1 的 Linux 实现就能将磁盘读取操作的速度提高两倍。这意味着在 RAID1 上读取一个 10GB 文件不会比在单个磁盘上更快,但读取两个不同的 10GB 文件*会更快。
为了演示它,只需使用dd. 在执行任何操作之前,请使用 清除磁盘读取缓存sync && echo 3 > /proc/sys/vm/drop_caches。否则hdparm将声称超快速读取。
单个文件:
# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 65,9659 s, 159 MB/s
Run Code Online (Sandbox Code Playgroud)
两个文件:
# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT skip=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 64,9794 s, 161 MB/s
10485760000 bytes (10 GB) copied, 68,6484 s, 153 MB/s
Run Code Online (Sandbox Code Playgroud)
读取 10 GB 数据需要 65 秒,而读取 10 GB + 10 GB = 20 GB 数据总共需要 68.7 秒,这意味着多磁盘读取从Linux 上的RAID1 中受益匪浅。skip=$COUNT部分非常重要。第二个进程从 10 GB 偏移量读取 10 GB 数据。
Jared 的回答和 ssh 对http://www.unicom.com/node/459的评论是错误的。那里的基准测试证明磁盘读取不会从 RAID1 中受益。但是,该测试是使用 bonnie++ 基准测试工具执行的,该工具不会一次执行两个单独的读取。作者明确指出 bonnie++ 不可用于对 RAID 阵列进行基准测试(请参阅自述文件)。
是的,您将获得读取性能提升 + 冗余。您可以很容易地想象,由于文件位于两个 HDD 上,因此您可以同时从两个不同的 HDD 读取文件的各个部分。
所以理论上,如果 RAID 控制器正常工作,您可以获得 O(n) 的加速。