https://blog.csdn.net/m0_71307711/article/details/124945976 https://forum.qnap.com/viewtopic.php?f=55&t=130788 https://baijiahao.baidu.com/s?id=1760981513002285636&wfr=spider&for=pc
一、原理:
先从硬盘分区说起:
系统分区:此分区存储 QTS 操作系统、用户设置(例如,帐户凭据、网络设置和控制面板设置)和系统日志。默认情况下,系统使用 RAID 1 的镜像功能,并将一组相同的系统分区数据保存到 NAS 的每个硬盘上。当系统检测到NAS 中的硬盘损坏或发生故障时,仍可使用状态良好的硬盘中的系统数据来启动系统。如果有多个状态良好的硬盘可供系统启动,则将先使用硬盘编号较小的硬盘。例如,如果硬盘 1 和硬盘 4 都处于良好状态,则硬盘 1 将用于系统启动。
SWAP 分区:当 RAM 已满且系统需要更多内存资源时,此分区可用作临时内存资源。 默认情况下,系统使用 RAID 1 的镜像功能并将一组相同的 SWAP 分区数据保存到 NAS 的每个硬盘上。
数据分区:此分区由存储池和存储空间组成。所有数据和安装的套件都存储在此处。
威联通创建了2个内部 RAID-1 系统分区,该分区跨越所有驱动器并不断访问该分区。所以硬盘不能独立休眠。
原因找到了,系统分区组成RAID 1造成了硬盘不能独立休眠。那么怎么做呢,那么就要非系统盘暂时脱离系统分区RAID 1。我们就设置一个定时任务,每天或每周定期让非系统盘“加入”这个分区,过15分钟后,然后再脱离系统分区RAID 1,硬盘又能独立休眠,同时保证系统安全。
如何让非系统盘暂时脱离系统分区RAID 1。事实上,威联通的系统分区RAID 1有两个,对于4盘位nas来说,硬盘第1分区sda1、sdb1、sdc1、sdd1组成一个系统分区RAID 1(路径/dev/md9),硬盘第4分区sda4、sdb4、sdc4、sdd4组成一个系统分区RAID 1(路径/dev/md13)
,这两个分区是操作的重点。验证过程有点复杂,与后面操作也没多大关系,就略过了。感兴趣的可以看我原来那个帖子或者国外那篇文章。
原理有点复杂,但是操作很简单,操作的主角是mdadm,它是Linux下的一款标准的软件 RAID 管理工具。
对于硬盘sdb来说,执行下面这两个命令,硬盘“脱离”系统raid1分开,硬盘可以独立休眠:
mdadm /dev/md9 --fail /dev/sdb1
mdadm /dev/md13 --fail /dev/sdb4
执行下面这两个命令,硬盘重新加入系统raid1,恢复原设置:
mdadm /dev/md9 --re-add /dev/sdb1
mdadm /dev/md13 --re-add /dev/sdb4
二、添加定时任务
下面操作以4盘nas为例,第二块、第三块和第四块硬盘脱离系统RAID1。
1 首先在威联通上设置ssh允许访问,硬盘设置允许休眠
控制台 ->网络和文件服务->telnet/ssh,允许ssh连接。应用保存。
控制台 ->系统->硬件->常规,开启磁盘待机模式。应用保存。
2 创建”脱离“系统RAID1的可执行脚本
ssh客户端登录推荐下shell,个人版免费。
touch命令创建空文件:
touch /share/homes/admin/disconnect_internal_raid.sh
修改脚本文件为执行文件:
chmod +x /share/homes/admin/disconnect_internal_raid.sh
用vi命令或者winscp编辑脚本disconnect_internal_raid.sh,脚本内容如下:
#!/bin/bash
echo "Disconnecting md9"
mdadm /dev/md9 --fail /dev/sdb1
mdadm /dev/md9 --fail /dev/sdc1
mdadm /dev/md9 --fail /dev/sdd1
echo "Disconnecting md13"
mdadm /dev/md13 --fail /dev/sdb4
mdadm /dev/md13 --fail /dev/sdc4
mdadm /dev/md13 --fail /dev/sdd4
3 创建“加入"系统分区的可执行脚本
touch /share/homes/admin/rebuild_internal_raid.sh
chmod +x /share/homes/admin/rebuild_internal_raid.sh
编辑脚本rebuild_internal_raid.sh,脚本内容如下:
#!/bin/bash
echo "Re-adding md9"
mdadm /dev/md9 --re-add /dev/sdb1
mdadm /dev/md9 --re-add /dev/sdc1
mdadm /dev/md9 --re-add /dev/sdd1
echo "Re-adding md13"
mdadm /dev/md13 --re-add /dev/sdb4
mdadm /dev/md13 --re-add /dev/sdc4
mdadm /dev/md13 --re-add /dev/sdd4
4 每天3:00和3:15执行脚本同步系统raid一次,添加定时任务:
echo "00 03 * * * /share/homes/admin/rebuild_internal_raid.sh" >> /etc/config/crontab
echo "15 03 * * * /share/homes/admin/disconnect_internal_raid.sh" >> /etc/config/crontab
可用命令crontab -l 查看定时任务,应该看到已经添加的2个任务。
执行下面命令,可不必重启系统就使定时任务立即生效。
crontab /etc/config/crontab && /etc/init.d/crond.sh restart
三 、开机自动运行(autorun.sh)
关机后,再启动nas会重新建立raid-1,所以为了避免每次手动操作,需要设置开机自动运行”脱离“系统raid1的脚本
我查看了威联通的帮助文档,威联通 的nas型号不同,设置autorun.sh也不同,原文链接https://wiki.qnap.com/wiki/Runni ... lication_at_Startup。
具体操作如下:
控制台 ->硬件->常规:启动时运行用户自定义的进程前面打勾启用。(见下图)
ssh登录nas,对于x86机型来说,执行下面命令:
mount $(/sbin/hal_app --get_boot_pd port_id=0)6 /tmp/config (型号不同,这条命令也不同)
touch /tmp/config/autorun.sh
chmod +x /tmp/config/autorun.sh
vi或winscp编辑脚本autorun.sh
#!/bin/bash
/share/homes/admin/disconnect_internal_raid.sh
最后一定要执行下面命令,很重要,不然重启后脚本丢失。(有人写的文章这步漏掉了)
umount /tmp/config
四 关闭swap分区(可选)
原作者认为swap分区组成 RAID 1也会导致硬盘不能独立休眠,关闭了swap分区,用1号盘的swap文件替代。但我没改swap分区也能独立休眠。如果运行程序很多,系统使用swap分区,可能会导致硬盘不能独立休眠。 如果有人想关闭swap分区,可按以下操作。
创建swap文件(8G)
# dd if=/dev/zero of=/share/homes/admin/swapfile bs=1024 count=8388608
按上面方法创建可执行脚本(move_swap_to_file.sh),详细步骤略过。
cat move_swap_to_file.sh
#!/bin/bash
echo "Turning SWAP off"
swapoff -a
echo "Initializing file swap"
mkswap /share/homes/admin/swapfile
swapon /share/homes/admin/swapfile
按上面方法将脚本加入到自启动脚本(autorun.sh)
#!/bin/bash
/share/homes/admin/disconnect_internal_raid.sh
/share/homes/admin/move_swap_to_file.sh
至此,我们的工作完成,nas开机就能脱离系统raid1,并且在每天在规定时间系统raid1同步一次。
五、 恢复原设置
改了这些内容后,有人想恢复原设置,也很容易。
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功耗12-14瓦之间波动,硬盘运行时,功率30瓦左右。如果我用电脑访问其中一个hdd,功耗马上跳到20瓦左右,机械硬盘的功耗6瓦左右。我停止访问硬盘。空闲5分钟(我设了5分钟休眠)后,功耗又变为15瓦,证明这个hdd独立休眠了。
raid也可用这个方法的,我没有试过。原作者使用的nas是4盘位的,一个用装ssd,2个机械硬盘组了一对raid1,一个硬盘设为静态卷,作者把三个机械硬盘从系统raid-1分开,让三个机械硬盘处于独立休眠也是可行的。
|