type
status
date
slug
summary
tags
category
icon
password
今天来实现将NAS异地备份至远程NAS,远程NAS在指定时间上限参与备份,其他时间保持断电离线状态,整个过程全自动。
我现在住的房子里部署了一台主力NAS,为了满足3+2+1备份原则中的异地离线备份的需求,我将老家一台13年配置的台式电脑改装成了一台NAS,但受限于CPU的生产工艺,老电脑做NAS的最大缺点就是功耗高。因为我需要备份的内容主要是手机里日常新拍摄完的的视频和照片,所以无需实时做二次远程备份,只需要定期将家里的NAS备份至老家的NAS就行,比如说每周两次。来,看我是如何实现全自动定期离线备份的。
一、准备工作
- 24小时开机的主力NAS(这里称作“A房NAS”)
- 老家的备份NAS(这里称作“B房NAS”)
- 米家开机卡
二、通过米家APP设置定时开机
将开机卡插在B房NAS的PCIe插槽,设置定时开机时间,我是设置在每周一、周四的凌晨00:01开机,05:00关机,这样可以避开网络拥堵以及跨运营商限流的问题,可以吃满A房NAS的上传速度,5个小时的时间足以满足完成日常增量数据的备份。
三、打开B房的WebDAV服务
打开B房的WebDAV服务,目的时能够让A房的备份服务访问B房NAS的备份目的地文件夹。

四、在A房NAS上设置远程备份
在A房NAS的备份程序中设置备份目的地B房NAS的。注意


通过以上设置实际上就可以实现NAS数据的自动化备份。
但有没有方法实现在每次备份完成后,B房NAS自动关机,而不是霸蛮等到凌晨5:00才关机呢?
我才用的是通过A房NAS上的home assistant来监测远程备份进程,若特定时间内无远程备份进程,则通过home assistant的米家插件向远程开机卡发送关机命令。
五、备份完毕即自动关机
可以通过A房NAS的 cron 定时任务 + Shell 脚本 + Home Assistant API 调用 实现该功能。以下是分步实现方案:
(一)Shell 脚本实现
1. 脚本功能设计
脚本需要完成以下任务:
- 检测进程是否存在:使用
pgrep
命令判断backup_remote
进程状态。
- 控制 Home Assistant 实体:通过 REST API 关闭指定开关。
- 状态持久化:创建锁文件,确保当日仅执行一次操作。
2. 脚本代码
利用ssh工具将新建的脚本文件保存在你自己指定的目录下。我是将其保存的路径为"/opt/backup_remote_power.sh”

3. 权限问题
- 你有可能会遇到Permission Denied的提示,可以按照我的另一篇文章的方法解决。
- 确保脚本有执行权限:
chmod +x /opt/backup_remote_power.sh
- 通过
chmod 777 /var/lock/ha_monitor
将锁文件目录/var/lock/ha_monitor
需允许写入。
(二)Cron 定时任务配置
添加定时任务

- 编辑好内容后,按下
*Ctrl + O**
,然后按回车保存;
- 接着按
*Ctrl + X**
退出。
(三)Home Assistant 配置
1. 生成长期访问令牌
- 登录 Home Assistant Web 界面。
- 点击右上角用户头像 → “设置” → “长期访问令牌” → “创建令牌”,保存生成的 Token。

2. 验证 API 调用
手动测试脚本是否能成功关闭实体:
此时你有可能会遇到以下提示:
原因是脚本文件
backup_remote_power.sh
可能是在 Windows 系统或使用 Windows 工具(如记事本、VS Code 未配置 Unix 换行符) 中编辑的,导致文件包含 \r\n
(回车+换行符),而 Linux 仅支持 \n
(换行符)。解决方法:通过
sed
删除 \r
字符注意:测试脚本时,要每次删除/var/lock/ha_monitor/目录下的的lock文件,否则重新测试脚本时,脚本检测到已有当日生成的lock文件,就会半途退出脚本。
- 作者:ThinkXYZ
- 链接:http://thinkxyz.top/article/1f6396bd-02de-8043-b14e-c9f01076a137
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。