威联通(QNAP)硬盘不休眠(待机)的解决方法
此处感谢此帖 威联通(QNAP)硬盘不休眠(待机)的解决方法 的作者,同时也在此作一下整理与备份。
背景
好奇观察了下453Bmini
硬盘的休眠(待机)情况,发现在已有SSD
作为系统和软件安装区域后,HDD
仍不进入休眠状态,或进入休眠短时间被唤醒。 我的 1 号硬盘位是SSD
,所以以 2 号硬盘位的HDD
举例:查看硬盘是否休眠可通过命令hdparm -C /dev/sdb
,如果输出drive state is: active/idle
则表示硬盘是唤醒状态,如果输出drive state is: standby
则表示硬盘已休眠(低功耗模式)。
调查
首先排查NAS
系统中是否开启了硬盘待机,在“控制台”>“系统”>“硬件”中,我已经开启; 排查了官方文档中描述的其他场景, 我用了Container Station
,但是全部都是在SSD
上,应当也不会阻止HDD
休眠。 这就比较奇怪了,只能网上搜索一番,直到找到下面这两篇博客给我解了疑:
我将上面的博客内容总结一下,除系统盘之外的硬盘不能休眠,是因为QNAP
选择将每一块硬盘都分出来两个区块,然后将这部分区块组成了RAID1
(下文称为“系统RAID1
”,路径为/dev/md9
和/dev/md13
),也就是说只要系统有读写,那所有硬盘都将不能休眠。
那如何解决呢?很简单,将非系统盘的分区移出“系统RAID1
”即可,这里以我的第二块硬盘举例:
1
2
mdadm /dev/md9 --fail /dev/sdb1
mdadm /dev/md13 --fail /dev/sdb4
添加定时任务
这里我提供两个脚本,一个用于断开“系统RAID1
”,一个用于恢复“系统RAID1
”:
1
2
3
4
#!/bin/sh
# fail_raid1.sh(断开系统 RAID1)
mdadm /dev/md9 --fail /dev/sdb1
mdadm /dev/md13 --fail /dev/sdb4
1
2
3
4
#!/bin/sh
# readd_raid1.sh(恢复系统 RAID1)
mdadm /dev/md9 --re-add /dev/sdb1
mdadm /dev/md13 --re-add /dev/sdb4
需要注意的是,QTS
(QNAP
的系统)不能通过crontab -e
这个方式添加定时任务,因为系统内部有一套逻辑会覆盖通过这种方法增加的定时任务,详情可参考官方文档:
1
2
3
4
5
6
7
8
# 每天 0 点恢复系统 RAID1
echo "0 0 * * * /bin/bash /share/CACHEDEV1_DATA/my_cron/readd_raid1.sh" >> /etc/config/crontab
# 每天 0 点 15 分恢复系统 RAID1
echo "15 0 * * * /bin/bash /share/CACHEDEV1_DATA/my_cron/fail_raid1.sh" >> /etc/config/crontab
# 每 10 分钟检测 HDD 是否休眠,结果保存在 raid1_monitor.log 中
echo "*/10 * * * * /bin/bash /share/CACHEDEV1_DATA/my_cron/raid1_monitor.sh" >> /etc/config/crontab
# 重启 crontab
crontab /etc/config/crontab && /etc/init.d/crond.sh restart