我最近让我的网络托管商 (Hetzner) 为我的网络服务器添加了 16TB 的付费 SATA 硬盘。目前使用了其中的 2.5TB。它们是 RAID 1 镜像。
我还有两个 4TB nVME 驱动器,目前有 700GB,也是 RAID 1 镜像。
CentOS 每周都会启动一个 cronjob 来对我的两个 md 阵列进行“检查”。它们同时发生,nVME 阵列在 5 小时后完成。SATA 阵列则需要痛苦的 18 小时,整个过程以 200MB/秒的速度运行。
# Run system wide raid-check once a week on Sunday at 1am by default
0 1 * * Sun root /usr/sbin/raid-check
我的服务器非常强大,配有 32 核 EPYC 和 128GB 内存,但我确实注意到在运行此检查时 IO 速度有所减慢。
有必要每周运行这些吗?
200MB/秒 * 18 小时意味着它正在处理整个 16TB,而不仅仅是已占用的空间。能否以任何方式使其变得更智能/更懒惰,以便它仅在已占用的空间上运行?
这项工作可能
nice
完成或类似吗?我知道这会花更长时间,但这可能是更好的选择。 请参阅下面的编辑编写暂停脚本是不是一个坏主意?那么我每晚可以工作 3 个小时(而不是一次性工作 18 个小时)吗?
这是每个人都会遇到的问题吗?还是我做了一些错误的决定?例如,安装硬件 RAID 卡会让我更开心吗?
编辑
我现在已经发现/etc/sysconfig/raid-check
并改为NICE=low
。NICE=idle
我想直到下周我才会知道这会带来什么不同。
答案1
不,MD RAID 不可能比这更智能。如果您只想检查已使用区域,请使用 ZFS,或者 BTRFS。
每周检查太频繁了。请每月检查一次,甚至每隔一个月检查一次。
我不知道这个 NICE 到底有什么用。如果它设置了 [mdX_resync] 内核进程的 I/O 优先级,那就好了,使用idle
。您可以限制的是检查的带宽:它在文件中以 kB/s 为单位设置/sys/block/mdX/md/sync_speed_max
。这是一个虚拟文件,例如,系统重启后它将被重置。
顺便说一句,默认情况下,它被限制在 200 MB/s,而你似乎已经达到了这个限制。你可以提高 SSD 的速度(设置 5000000,看看它们会在多长时间内被检查)。而不是“暂停”HDD,我会尝试限制(例如,在高负载期间,我会设置下限,在空闲时间,我会设置 600000 — SATA 6 Gb/S 接口最大带宽)。
我怀疑 HW RAID 卡会让情况变得更好。