Skip to content

Instantly share code, notes, and snippets.

@KyonLi
Last active April 24, 2023 11:21
Show Gist options
  • Save KyonLi/d1e8b6243ad0c903fe0990bb63f37697 to your computer and use it in GitHub Desktop.
Save KyonLi/d1e8b6243ad0c903fe0990bb63f37697 to your computer and use it in GitHub Desktop.
QNAP硬盘休眠

QNAP硬盘休眠

适用于系统盘为SSD数据盘有HDD的情况,实现开机自动解除HDD系统占用,每天4:00~4:30自动同步数据避免系统出错

  1. 启用开机自启,参考wiki,编辑autorun.sh加入以下内容
#!/bin/sh

/share/Public/scripts/disk_standby.sh start
  1. 在共享文件夹Public中创建scripts目录,向其中放入disk_standby.sh,添加执行权限chmod +x disk_standby.sh
  2. 添加定时任务
echo "0 4 * * * /share/Public/scripts/disk_standby.sh readd" >> /etc/config/crontab
echo "30 4 * * * /share/Public/scripts/disk_standby.sh remove" >> /etc/config/crontab
crontab /etc/config/crontab && /etc/init.d/crond.sh restart
#!/bin/bash
MD_DEVICES="md9 md13"
SYS_DEV=$(df $(getcfg SHARE_DEF defVolMP -f /etc/config/def_share.info) | awk '/^\/dev/ {print $1}')
turn_off_swap(){
echo "Turning off swap on HDD..."
for partition in $(cat /proc/swaps | grep partition | awk '{print $1}'); do
swapoff $partition
done
}
remove_from_raid(){
for md in $MD_DEVICES; do
echo "Disconnecting HDD from /dev/${md}..."
save=
for partition in $(mdadm -D /dev/${md} | grep 'active sync' | awk 'NF{ print $NF }'); do
disk=${partition//[[:digit:]]/}
disk=${disk#"/dev/"}
if [ $(cat /sys/block/${disk}/queue/rotational) = 1 ]; then
mdadm /dev/${md} --fail ${partition}
save=${save}${partition}$'\n'
fi
done
[ -n "$save" ] && echo -n "$save" > /tmp/disk_standby_${md}
done
}
readd_to_raid(){
for md in $MD_DEVICES; do
[ ! -f "/tmp/disk_standby_${md}" ] && break
echo "Reconnecting HDD to /dev/${md}..."
for partition in $(cat /tmp/disk_standby_${md}); do
mdadm /dev/${md} --re-add ${partition}
done
rm "/tmp/disk_standby_${md}"
done
}
case "$1" in
start)
turn_off_swap
remove_from_raid
;;
remove)
remove_from_raid
;;
readd)
readd_to_raid
;;
*)
echo "Usage:"
echo " $0 [command]"
echo " command:"
echo " start - turn off swap and remove hdd from raid1."
echo " remove - remove hdd from raid1."
echo " readd - readd hdd to raid1."
exit 0
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment