我在2020年购入了群晖当年的新品DS920+,如今服役了5年有余了。白裙的稳定性毋庸置疑,目前为止没有发生过数据损坏的问题。性能我个人使用也绰绰有余。唯一让人苦恼的是硬盘的噪音,为了找出噪音产生的原因,也是熬了不少夜。好在功夫不负有心人,也是有了一点小心得。
噪音来源
我的群晖盘位情况大致如下:
盘位 | 硬盘 | 阵列 | 存储池 |
---|---|---|---|
SATA 1 | WD HC550 16TB | RAID 1 | 存储池 1 |
SATA 2 | WD HC550 16TB | RAID 1 | 存储池 1 |
SATA 3 | Intel S4510 960GB | Basic | 存储池 2 |
SATA 4 | |||
M.2 1 | PM981a 256GB | RAID 1 | SSD 缓存 |
M.2 2 | PM981a 256GB | RAID 1 | SSD 缓存 |
有规律的噪音
有规律的噪音一般出现在系统无负载的时候,此时写入的数据基本上全是系统数据,比如系统日志、套件日志等。表现为固定几秒钟哒哒几声。
无规律的噪音
无规律的噪音一般是出现在访问群晖数据的时候,比如WebStation、Synology Photos等服务,这些服务需要频繁读取磁盘,并且大多是小文件,硬盘磁头来回摆动,出现类似炒豆子的声音。
解决方案
SSD 全备
土豪方案,所有硬盘全部采用固态硬盘,可以达到绝对安静。如果有M.2盘位,也可以创建成为存储池使用。代价是成本极高。群晖将只剩下散热风扇的声音,如果风扇吵换猫扇解决。
折衷方案是用SSD作为系统、套件、热数据存储池,HDD作为冷数据存储池。此方案还需要配合物理降噪、阵列优化来达到完美状态。目前我使用此方案。
SSD 缓存
先说结论,SSD 缓存无法做到完全没有一点噪音,但是至少能减少80%的噪音。即使只是16GB的缓存,也有奇效!
起初我使用的是英特尔傲腾内存M10 16GB,一个是写入达到365TBW,“一盘传三代”不仅仅是网友相传的段子,而是这块盘真正的变态寿命。况且一块盘15块钱就能拿下。
后来我执着于那剩下的20%噪音,怀疑是缓存太小的缘故,因此升级到了256GB。结果让我失望了,和容量关系并不大。
虽然噪音没有什么缓解,但是容量大了,缓存的内容自然更多,一些数据淘汰前的留存时间也更久,如果访问到这些数据,还是会有加速效果。
物理降噪
受限于群晖的构造和做工,不但无法隔绝硬盘噪音,反而对噪音有放大作用!
为了消除这种共振效应,避免把主机放在一些容易加剧共振的位置上,例如一些木质桌子。可能整个桌子都能感受到震动。尝试使用一些减震的橡胶垫(用鼠标垫替代尝试)放在主机下面。
另外一个共振效应明显的地方出现在硬盘架上,硬盘架和硬盘之间存在缝隙,也会导致噪音变大。可以参考油管上的视频,用魔术贴填充硬盘之间的缝隙。
阵列优化
可以注意到我的存储池2是一块固态硬盘,我计划再添加一块相同的固态,组成RAID 1,然后将系统转移到固态中。由于数据量过大(已使用8TB左右),还有大量套件和设置,还没有确定转移方案。
群晖的磁盘管理逻辑是:每一块加入的硬盘都会进行初始化,在初始化的过程中,硬盘会被分为3个区,第一个分区为rootfs系统分区,第二个分区为swap虚拟内存交换分区,第三个是用户分区。
第一个分区,所有加入的磁盘共同组成RAID 1(/dev/md0
);
第二个分区,所有加入的磁盘共同组成RAID 2(/dev/md1
);
第三个分区,由用户在存储管理器中创建存储池时的选择决定。
群晖这种处理方式目的在于:即使硬盘发生损坏,只要还有一块硬盘,系统都能正常运行。
由于所有磁盘都有系统分区的存在,那么在有固态存储池和机械存储池同时存在的情况下,即使将套件安装在固态存储池上,机械硬盘还是会产生读写。
群晖系统基于Linux,底层使用mdadm来管理软RAID阵列,这就给了我们操作空间。对于第三个分区用户分区,我们能够在存储管理器中调整阵列类型,但是第一个分区和第二个分区由系统自动完成,需要通过Shell进行操作,将机械硬盘系统分区和交换分区从RAID 1中剔除。
查看磁盘和阵列信息
首先要确定需要需要剔除的硬盘设备名。这里的编号并不一定和群晖硬盘架顺序一样,需要确认一下。
fdisk -l | grep '^Disk' | grep -E 'sata|nvme'
mdadm --detail /dev/md0
mdadm --detail /dev/md1
cat /proc/mdstat
[UUU]
表示所有磁盘正常,[3/3]
表示 3 个设备都活跃。
实际上盘位1、盘位2我放入的是16TB硬盘,盘位3放入的是960GB固态硬盘,这里显示顺序并不正确。这种情况可能发生在创建存储池之后,拔出硬盘更改了顺序,但是并不影响系统正常功能。
调整阵列磁盘
接下来,先将机械盘标记为故障(fail),然后才能从阵列中移除硬盘。
# 系统分区
mdadm --fail /dev/md0 /dev/sata2p1
mdadm --fail /dev/md0 /dev/sata3p1
mdadm --remove /dev/md0 /dev/sata2p1
mdadm --remove /dev/md0 /dev/sata3p1
mdadm --detail /dev/md0
# 交换分区
mdadm --fail /dev/md1 /dev/sata2p2
mdadm --fail /dev/md1 /dev/sata3p2
mdadm --remove /dev/md1 /dev/sata2p2
mdadm --remove /dev/md1 /dev/sata3p2
mdadm --detail /dev/md1
由于我现在SSD只有一块,并没有组成RAID 1,避免产生严重数据损失,所以接下来操作使用交换分区演示,并且操作之前关闭了交换分区。
swapoff -a
此时,存储管理器中应该会收到存储降级警告,不要修复,接下来通过调整阵列活跃设备数,将其他硬盘重新加入阵列作为备用盘(spare),消除警告。
mdadm --grow -n 1 --force /dev/md1
mdadm --detail /dev/md1
!> 因为RAID 1只要需要2块硬盘,我目前只有1块SSD,这不符合阵列常规配置,因此出现了警告,添加--force
强制执行。
!> 请不要像我这样操作,为了数据安全,这里至少使用两块SSD,并将活跃数量设置为2。mdadm --grow -n 2 /dev/mdX
mdadm --add /dev/md1 /dev/sata2p2
mdadm --add /dev/md1 /dev/sata3p2
mdadm --detail /dev/md1
新加入的硬盘成为备用盘(spare),当活跃硬盘数量低于设定值(这里为1,推荐至少2)时,备用盘会自动替换故障硬盘。
到此,配置完成。系统分区的读写都在固态硬盘,备用盘并不会产生读写。存储管理器中警告也消除了。
参考:
https://www.freemindworld.com/blog/2018/180705_synology_dsm_ssd_cache_improved.shtml
https://community.synology.com/enu/forum/17/post/59407?reply=218363