NAS 未读写时的硬盘噪音问题

2023/12/30 更新:

拥抱全闪。去你妈的机械硬盘。


家里有台装有两块 14T 氮气盘的威联通 TS-264C,硬盘炒豆子的声音可以接受,但忍不了没有读写的时候硬盘也会隔几秒就哐当一下。小小研究了一下解决办法。

根据 这篇帖子 可以得知威联通为了确保拔掉任何一块硬盘都能进系统,威联通会给所有硬盘分区,并把硬盘的第一块分区组 RAID 1 md9,用于存储固件,第四块分区组 RAID 1 md13,用于存放系统配置和应用数据。以 md9 为例。

# ihainan @ TS-264C-NAS in ~ [15:25:20]
$ sudo mdadm -D /dev/md9
/dev/md9:
...
    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2     259        1        2      active sync   /dev/nvme1n1p1
       3     259        7        3      active sync   /dev/nvme0n1p1
...

当 SSD 存在读写的时候,数据也会同步到两块机械盘,基本就没法让硬盘进入休眠状态。

让机械硬盘能够正常休眠的思路如下:

首先需要将两块机械盘移除出 RAID,同时出于安全性考虑,需要添加两个深夜执行的定时任务,分别将硬盘添加回 RAID,和等待一段时间时候,再重新将硬盘移除,具体可以参见 原贴 的脚本。

可以使用工具 hdparm 命令查看当前硬盘是否有读写,也可以使用 fatrace监控当前目录所在分区 具体是哪个进程在读写什么数据(草考):

$ sudo hdparm -C /dev/sda
/dev/sda:
 standby

$ sudo fatrace -c -t
15:40:44.486460 momd(7203): RO  /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/pgrep
15:40:44.486460 momd(7203): R   /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/pgrep
15:26:13.080351 smbd(2587): O   /share/CACHEDEV2_DATA/Shares/Net_Storage/03_Media
15:26:13.080582 smbd(2587): C   /share/CACHEDEV2_DATA/Shares/Net_Storage/03_Media
# 注意访问 Web UI 的时候也会定时读写机械硬盘
16:05:20.528158 chartReq.cgi(28645): CO  /share/CACHEDEV2_DATA
16:05:21.322976 chartReq.cgi(28888): CO  /share/CACHEDEV2_DATA

但是在两块硬盘都进入 standby 之后,实际上还是会隔几秒就听到哐当声,这时候还需要在威联通的控制台里面开启硬盘待机模式,并选择一个自己觉得合适的时间间隔

qnap_web

可以通过 读取 LED 灯的值 来了解系统是否已经让硬盘进入待机模式, 0x00000001 表示已经休眠,0x00000000 则是未休眠。

$ sudo cat /var/ledvalue
0x00000000

以我上面设置的五分钟为例,当两块硬盘的 Standby 状态持续超过五分钟之后,硬盘会进入休眠状态,这时候 NAS 基本是完全无声状态了,直到硬盘下次被唤醒。写了一个脚本检查硬盘和 LED 状态来验证结果:

Wed Dec 13 16:05:14 HKT 2023  standby standby 0x00010000
Wed Dec 13 16:05:24 HKT 2023  active/idle active/idle 0x00000000 # 有读写的时候硬盘被唤醒
Wed Dec 13 16:05:50 HKT 2023  standby standby 0x00000000
// ...
Wed Dec 13 16:10:31 HKT 2023  standby standby 0x00000000
Wed Dec 13 16:10:41 HKT 2023  standby standby 0x00010000 # 没有数据读写的五分钟,硬盘重新进入休眠

再顺便加到 Home Assistant 里面监控状态:

home_assistant

顺便一提,频繁唤醒是否对硬盘有损是个 有争议的话题。相比硬盘的寿命,我更希望自己用得舒心一些。此外唤醒是需要时间的,因为会比较频繁出现读取磁盘(打开 SMB 目录、看剧看电影)时需要等待片刻的情况。