• 那是云首页
  • 快捷导航
  • 更多
    设为首页收藏本站
  • |
花生壳

在威联通NAS上实现硬盘独立休眠(修订版)

威联通 QNAP  / 教程分享  / 正序浏览   © 著作权归作者本人所有

#楼主# 2022-5-26 22:47

跳转到指定楼层
本帖最后由 dandelion 于 2022-6-5 23:40 编辑

前言

在本论坛写过一篇帖子,从反馈来看,大多数人按教程实现了无访问硬盘独立休眠,csdn和smzdm还有人对我的教程进行了"改造", 他们要不去掉了定时任务,要不去掉了开机自启动,或者步骤错误。写那篇文章时,原理没有解释清楚,让操作的人担心风险,还想修改部分内容,但又不能改了,所以就有了这篇文章。

众所周知,硬盘休眠既能降低功耗,还能延长硬盘寿命(群晖官网写的),减少噪音。但是对nas来说,硬盘休眠并不容易。威联通设置的硬盘待机是所有硬盘整体休眠,也就是说要不同时运转,要不同时休眠。让NAS所有硬盘休眠很麻烦,考虑的因素有很多,即使好不容易休眠了,不知道什么系统程序又将硬盘唤醒,这样频繁唤醒和启动对硬盘反而对硬盘不好,以至于很多人都关闭了硬盘待机。网上大部分讨论的是如何整体休眠。比如检查cloudlink 、病毒防护 、NTP伺服器是否启用等等。对于普通的家庭用户,我们更需要的是硬盘能独立休眠,哪个硬盘被访问,哪个硬盘才运行。

下面这个方法通过两个脚本实现威联通nas上的硬盘无访问独立休眠。我把系统和应用套件安装在SSD固态硬盘上,其它机械硬盘空闲一段时间后处于休眠状态。我如果只访问其中一块机械硬盘,其它两块机械硬盘处于休眠状态。比如我pt下载,只访问一块硬盘,其它盘处于休眠状态。


一、原理:
先从硬盘分区说起 (分区的功能介绍部分来自群晖官网,我想也应该适用于威联通,顺便吐糟下威联通,威联通的帮助文档太少):

系统分区:此分区存储操作系统、用户设置(例如,帐户凭据、网络设置和控制面板设置)和系统日志。默认情况下,系统使用 RAID 1 的镜像功能,并将一组相同的系统分区数据保存到 NAS 的每个硬盘上。当系统检测到NAS 中的硬盘损坏或发生故障时,仍可使用状态良好的硬盘中的系统数据来启动系统。如果有多个状态良好的硬盘可供系统启动,则将先使用硬盘编号较小的硬盘。例如,如果硬盘 1 和硬盘 4 都处于良好状态,则硬盘 1 将用于系统启动。(这是nas为什么采用raid1的原因,也是硬盘不能休眠的原因)

SWAP 分区:当 RAM 已满且系统需要更多内存资源时,此分区可用作临时内存资源。 默认情况下,系统使用 RAID 1 的镜像功能并将一组相同的 SWAP 分区数据保存到 NAS 的每个硬盘上。

数据分区:此分区由存储池和存储空间组成。所有数据和安装的套件都存储在此处。



威联通nas的硬盘分区结构图:
Screenshot 2022-05-26 125716.png

威联通的系统分区RAID 1有两个,对于4盘位nas来说,每个硬盘的第1分区sda1、sdb1、sdc1、sdd1组成一个系统分区RAID 1(路径/dev/md9),硬盘第4分区sda4、sdb4、sdc4、sdd4组成一个系统分区RAID 1(路径/dev/md13),这两个分区跨越所有硬盘并不断访问这两个分区。所以硬盘不能独立休眠。大家肯定注意到了,swap分区也组成了raid1,也就是说如果你任务很多,内存不够时,会使用到swap分区,也会造成不能独立休眠。原作者在在自启动添加一个脚本关闭swap分区,使用系统盘的交换文件做缓存。上次教程没写,这次补上。如果你的nas内存大或任务少,swap分区可以不管。

如上所说,这两个系统分区是操作的重点。验证过程有点复杂,与后面操作也没多大关系,就略过了。感兴趣的可以看我原来那个帖子或者国外那篇文章,文章最后有链接。

原因找到了,系统分区组成RAID 1造成了硬盘不能独立休眠。那么怎么做呢,那么我们就把非系统盘暂时脱离系统分区RAID 1,硬盘就会独立休眠。我们设置2个定时任务,每天或每周定期让非系统盘“加入”这个分区,过15分钟后,然后再脱离系统分区RAID 1,硬盘又能独立休眠,同时保证系统安全。


原理有点复杂,但是操作很简单,操作的主角是mdadm,它是Linux下的一款标准的软件 RAID 管理工具。

对于硬盘sdb来说,执行下面这两个命令,硬盘“脱离”系统raid1分开,硬盘可以独立休眠:
  1. mdadm /dev/md9 --fail /dev/sdb1
  2. mdadm /dev/md13 --fail /dev/sdb4
复制代码
执行下面这两个命令,硬盘“重新加入”系统raid1,恢复原设置:
  1. mdadm /dev/md9 --re-add /dev/sdb1
  2. mdadm /dev/md13 --re-add /dev/sdb4
复制代码

二、添加定时任务

下面操作以4盘nas为例,第二块、第三块和第四块硬盘脱离系统RAID1。我以前的那篇文章是以5盘nas为例。

1 首先在威联通上设置ssh允许访问,硬盘设置允许休眠

控制台 ->网络和文件服务->telnet/ssh,允许ssh连接。应用保存。

控制台 ->系统->硬件->常规,开启磁盘待机模式。应用保存。

2 创建”脱离“系统RAID1的可执行脚本

ssh客户端登录,推荐Xshell,个人版免费。还可用putty,win10以上版本powershell也自带ssh命令。文章最后有下载链接。

touch命令创建空文件:

  1. touch /share/homes/admin/disconnect_internal_raid.sh
复制代码

修改脚本文件为执行文件:

  1. chmod +x /share/homes/admin/disconnect_internal_raid.sh
复制代码

用vi命令或者winscp编辑脚本disconnect_internal_raid.sh,另外威联通应用市场有一个文本编辑器(Text Editor),可自行安装,用它编辑也很方便,推荐。脚本内容如下:

  1. #!/bin/bash
  2. echo "Disconnecting md9"
  3. mdadm /dev/md9 --fail /dev/sdb1
  4. mdadm /dev/md9 --fail /dev/sdc1
  5. mdadm /dev/md9 --fail /dev/sdd1

  6. echo "Disconnecting md13"
  7. mdadm /dev/md13 --fail /dev/sdb4
  8. mdadm /dev/md13 --fail /dev/sdc4
  9. mdadm /dev/md13 --fail /dev/sdd4
复制代码

Screenshot 2022-05-28 201805.png

3 创建“加入"系统分区的可执行脚本

  1. touch /share/homes/admin/rebuild_internal_raid.sh
  2. chmod +x /share/homes/admin/rebuild_internal_raid.sh
复制代码

编辑脚本rebuild_internal_raid.sh,脚本内容如下:
  1. #!/bin/bash
  2. echo "Re-adding md9"
  3. mdadm /dev/md9 --re-add /dev/sdb1
  4. mdadm /dev/md9 --re-add /dev/sdc1
  5. mdadm /dev/md9 --re-add /dev/sdd1

  6. echo "Re-adding md13"
  7. mdadm /dev/md13 --re-add /dev/sdb4
  8. mdadm /dev/md13 --re-add /dev/sdc4
  9. mdadm /dev/md13 --re-add /dev/sdd4
复制代码

4 添加定时任务:

威联通不能用crontab -e添加任务,可直接编辑 /etc/config/crontab文件添加任务。

ssh登录,执行两条命令, 可以添加定时任务 每天1:00和1:15执行脚本同步系统raid一次:
  1. echo "00 01 * * * /share/homes/admin/rebuild_internal_raid.sh" >> /etc/config/crontab
  2. echo "15 01 * * * /share/homes/admin/disconnect_internal_raid.sh" >> /etc/config/crontab
复制代码

可用命令crontab -l 查看定时任务,应该看到已经添加的2个任务。

执行下面命令,可不必重启系统就使定时任务立即生效:

  1. crontab /etc/config/crontab && /etc/init.d/crond.sh restart
复制代码


三 、开机自动运行(autorun.sh)

关机后,再启动nas后会重新建立系统raid-1,为了避免每次手动执行脱离系统分区脚本,可设置开机自动运行脚本。

我查看了威联通的帮助文档,威联通 的nas型号不同,设置autorun.sh也不同。如果你不是x86机型,去看下面链接,有原文链接。

具体操作如下:

控制台 ->硬件->常规:启动时运行用户自定义的进程前面打勾启用。(见下图)

ssh登录nas,对于intel或amd机型来说,执行下面命令:

  1. mount $(/sbin/hal_app --get_boot_pd port_id=0)6 /tmp/config   #型号不同,这条命令也不同
  2. touch /tmp/config/autorun.sh
  3. chmod +x /tmp/config/autorun.sh
复制代码

vi或winscp编辑脚本autorun.sh, 内容如下:

  1. #!/bin/bash
  2. /share/homes/admin/disconnect_internal_raid.sh
复制代码
最后一定要执行下面命令,很重要,不然重启后脚本丢失。(有人写的文章这步漏掉了)
  1. umount /tmp/config
复制代码


Screenshot 2022-05-26 222326.png
至此,我们的工作完成,nas开机后三块机械硬盘脱离系统raid1,并且每天在规定时间加入系统raid1,同步一次。

四 关闭swap分区(可选)

原作者认为swap分区组成 RAID 1也会导致硬盘不能独立休眠,关闭了swap分区,用系统盘的swap文件替代,但我没改swap分区也能独立休眠。如果运行程序很多,内存不够用,系统使用swap分区,会导致硬盘不能独立休眠。所以这步是可选的。

游客,如果您要查看本帖隐藏内容请回复

五、 恢复原设置

改了这些内容后,有人想恢复原设置,也很容易。

1 删除2个脚本

2 编辑/etc/config/crontab文件,将添加的两条定时任务删除

3 编辑autorun.sh,步骤与第三步相同,只不过autorun.sh内容为空。

六、结论  

假如你想检查你的硬盘sdc是否处于休眠状态,可用命令检查:  hdparm -C /dev/sdc。如果显示idle/active, 硬盘没有休眠。 如果显示standby, 那么说明硬盘处于休眠状态。但是这条命令有的硬盘可能不准。

另外,我把nas电源插头插在功率测定仪上,用功率检测硬盘是否休眠。我的nas接1个ssd和3个机械硬盘。未使用脚本前,硬盘不能休眠,nas功率30瓦左右。使用脚本后,硬盘能独立休眠,nas功耗12-14瓦之间波动,如果我用电脑访问其中一个机械硬盘,功耗马上跳到20瓦左右,机械硬盘的功耗6瓦左右。我停止访问硬盘。空闲5分钟(我设了5分钟休眠)后,功耗又变为14瓦,证明这个机械硬盘确实独立休眠了。

磁盘做了raid也可用这个方法的,我没有试过。但是原作者使用的nas是4盘位的,一个用装ssd,2个机械硬盘组了一对raid1,一个硬盘设为静态卷。
这个方法也可能适用于黑威联通,如果有网友在黑威联通上用这个方法使硬盘独立休眠,请反馈一下。


硬盘是否休眠谈谈自己的看法:
在前文的留言,看到有人对nas硬盘休眠可以延长硬盘寿命提出质疑,认为nas不要设置休眠,休眠反而会缩短寿命,在网上这种说法确实流传这种说法。先看看群晖官方是怎么说的,硬盘休眠降低功耗和延长硬盘寿命(下面有链接)。相信很多人家里的windows电脑一般都有两块以上的硬盘吧,默认设置是硬盘20分钟后硬盘休眠,windows电脑的硬盘是独立休眠的。现在比较火的unraid系统,优点之一是硬盘可以独立休眠。硬盘休眠本身不会缩短寿命,是硬盘频繁休眠和唤醒会缩短寿命。这个道理有点像我们用的电灯,频繁开关电灯反而缩短电灯寿命。企业用户因为频繁访问硬盘,应该关掉休眠。
大家都知道,全球正在变暖,未来人类最大的危机是全球变暖,希望此文能为节能减排做一点微博之力。大家也应该能节能就尽量节能吧。

错误难免,欢迎指正。

参考文章链接:
https://forum.qnap.com/viewtopic.php?f=55&t=130788
https://wiki.qnap.com/wiki/Running_Your_Own_Application_at_Startup
https://wiki.qnap.com/wiki/Add_items_to_crontab
https://kb.synology.com/en-us/DSM/help/DSM/AdminCenter/system_hardware_hibernation?version=6


xshell和winscp下载:链接:https://pan.baidu.com/s/1n8mGWP7kBeEfCSua9YzcZg
提取码:1234








补充内容 (2023-9-12 22:11):
重要补充:
看到有人说升级到qts5.x后,开机后自启动脚本不起作用了,但是我的ts551升级到5.1还是没问题的。
我在网上搜了下,升级到qts5.x后,发现修改autorun.sh和qts4.x不同了,执行第一条命令mount命令前要先获取root权限才可以。这是原文链接
www.qnap.com.cn/zh-cn/how-to/faq/article/running-your-own-application-at-startup。


All HAL-based Intel and AMD NAS:

Note: Starting from QTS 4.3.3 it's required to enable the autorun.sh processing in the Control Panel -> Hardware -> General: Run user defined startup processes (autorun.sh)

QTS 5.x:

sudo -i
mount $(/sbin/hal_app --get_boot_pd port_id=0)6 /tmp/config

QTS 4.x:
mount $(/sbin/hal_app --get_boot_pd port_id=0)6 /tmp/config

「真诚赞赏,手留余香」
那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

0

精华

410

回帖

1018

积分

发烧玩家

Rank: 2

云币
0
贡献
30
活跃
660
精华
0
茄子jun 发表于 2024-4-25 16:27 来自 中国天津
哇,感谢老师的新教程。。
回复 支持 反对 印象

使用道具 举报

nec

0

精华

2

回帖

77

积分

入门用户

Rank: 1

云币
0
贡献
3
活跃
61
精华
0
nec 发表于 2024-4-23 11:15 来自 中国吉林吉林市
谢谢楼主的分享 保姆级教程
回复 支持 反对 印象

使用道具 举报

0

精华

6

回帖

53

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
50
精华
0
mowic 发表于 2024-4-20 16:18 来自 中国广东深圳
感谢UP主的教程,取消SWAP不知道对系统的稳定性有没有影响
回复 支持 反对 印象

使用道具 举报

0

精华

1

回帖

12

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
11
精华
0
thismypc1 发表于 2024-4-6 17:55 来自 中国北京
楼主真是强大,实在是太感谢了
回复 支持 反对 印象

使用道具 举报

0

精华

84

回帖

808

积分

入门用户

Rank: 1

云币
0
贡献
48
活跃
522
精华
0
zml1985 发表于 2024-3-29 14:27 来自 中国西藏拉萨
又搞了好久,不知道为什么  autorun.sh不好使了,开机运行什么都没效果,用了这个APP自己写开机启动了,先在共享目录建立一个download共享文件夹,之后安装APP,里面就有xxx.sh了,把需要启动的加进去就行了

н.rar

197.02 KB, 下载次数: 0

回复 支持 反对 印象

使用道具 举报

0

精华

23

回帖

121

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
109
精华
0
liuyuanle 发表于 2024-3-20 13:52 来自 中国浙江杭州
现在最新系统输入断开指令之后  md9  md13里面硬盘还在,不知道怎么回事,无法断开了
回复 支持 反对 印象

使用道具 举报

0

精华

23

回帖

121

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
109
精华
0
liuyuanle 发表于 2024-3-20 13:18 来自 中国浙江杭州
很有用,学习一下,有时间了回去试试看,请问现在最新的系统也可以用吗?
回复 支持 反对 印象

使用道具 举报

0

精华

84

回帖

808

积分

入门用户

Rank: 1

云币
0
贡献
48
活跃
522
精华
0
zml1985 发表于 2024-3-19 23:48 来自 中国西藏拉萨
QTS升级到5.1.5 2679后, 其中一台autorun.sh 无法运行分离和合并的脚本了,测试了好几遍,突然发现是
脚本的shell没法执行了,原有是
  1. #!/bin/bash
复制代码

升级后可能是不支持bash了,所以分离和合并脚本都改成
  1. #!/bin/sh
复制代码

之后就好了
威联通没法直接 cat /etc/shells
回复 支持 反对 印象

使用道具 举报

0

精华

9

回帖

348

积分

入门用户

Rank: 1

云币
0
贡献
47
活跃
108
精华
0
科比不带摁的 发表于 2024-3-3 12:29 来自 中国河南郑州
谢谢楼主的分享,普及知识,为民造福。
回复 支持 反对 印象

使用道具 举报

0

精华

3

回帖

68

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
66
精华
0
easyalx 发表于 2024-2-29 16:26 来自 中国安徽合肥
Jojoの鹹裘瓣 发表于 2023-11-24 01:11
11/10升级到5.1.3.2578之后好像不能用了,虽然删除了md9和md13里面的raid1,但机械硬盘还是不能休眠

我现在5.1.5.2645,TS-264C,是可以休眠的,依然有效,但是夜间能遇到不知道备什么唤醒1~2次
回复 支持 反对 印象

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

dandelion

入门用户

  • 主题

    2

  • 帖子

    24

  • 关注者

    15

etsme
快速回复 返回列表 搜索 官方QQ群
懒人地图| 手机版|小黑屋| 智能生活 , 上那是云 |闽ICP备2020018196号-1 |网站地图