Home Suspend disks for QNAP nas
Post
Cancel

Suspend disks for QNAP nas

威联通(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休眠。 这就比较奇怪了,只能网上搜索一番,直到找到下面这两篇博客给我解了疑:

  1. 在威联通NAS上完美实现硬盘单独休眠

  2. QNAP 威联通磁盘分区探索与数据导出

我将上面的博客内容总结一下,除系统盘之外的硬盘不能休眠,是因为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

需要注意的是,QTSQNAP的系统)不能通过crontab -e这个方式添加定时任务,因为系统内部有一套逻辑会覆盖通过这种方法增加的定时任务,详情可参考官方文档:

Add_items_to_crontab

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
This post is licensed under CC BY 4.0 by the author.

Rescue dead R6220 by nmrpflash

Great breakfast comes back!