本帖最后由 muxiachuixue 于 2023-7-13 23:38 编辑
2022/5/9 更新:修复了部分情况无法删除旧备份的bug,请重新下载v1.2.6版本的脚本 ha_atuo_backup.sh
2021/12/30 更新:百度网盘bypy已不需要科学即可完成授权,备份log提示百度网盘备份失败的,请执行pip install -U bypy 升级最新版bypy工具,再执行bypy info 重新授权2022/01/10 更新:百度网盘和阿里网盘如有一方备份失败,不会影响另外一方的备份,请重新下载v1.2.5版本的脚本 ha_atuo_backup.sh
一、前言
辛苦折腾大半年的HA,因内存卡/硬盘坏掉,所有配置全部丢失?不留云端备份是很冒险的做法,所以定期云端自动备份,显得尤为重要。
论坛此前已有大神发过相关帖子,本人写了一个一键的shell脚本,可同时支持百度网盘、阿里网盘,脚本依赖于百度网盘工具 bypy 和阿里网盘工具 aliyunpan-cli,感谢原作者。
脚本支持所有版本的homeassistant(Hassos/Supervised or Hassio/Core/Container);Core/Container版本备份的是/config (宿主机中的homeassistant)文件夹
如需备份到NAS,请参考Samba Backup、Remote Backup (uses scp)
脚本可实现/支持的功能:
1. 定时自动备份HA,支持设置备份密码
2. 可设置保留的备份个数,自动清理最早的多余备份
3. 支持备份到百度网盘、阿里网盘,可自由选择
4. 自动修改备份后的文件名,以“时间+版本号”命名,更方便管理
5. 本地备份后,自动同步到网盘,只确保本地备份上传到网盘,不会删除本地和网盘中不同文件名的文件
6. 如果上一次上传到网盘失败(如只上传了一半),下次同步时会继续上传,直到网盘和本地备份文件Hash值完全一致,这样可以确保每个云端备份都有效
二、安装百度网盘工具
1. 安装bypy
宿主机上执行以下命令(不要在docker里面执行)
宿主机上执行以下命令
会返回一个链接,复制到浏览器打开,得到一个授权码,按terminal中的提示填入,等待授权成功
测试是否安装好,宿主机上执行
若返回网盘的空间信息,则表示安装成功
3. bypy添加到环境变量
我出现过几次系统提示找不到bypy命令的情况,为防止备份失败,最好把bypy路径加入环境变量
宿主机执行
把返回的路径添加到宿主机上/etc/profile文件,比如我的是:
# PATH for baidu yunpan
export PATH=$PATH:/home/pi/.local/bin
上面/home/pi/.local/bin是我的路径地址,如果你的不是这个,记得修改
保存后再执行
三、安装阿里网盘工具
没阿里网盘的可注册一个,目前上传下载不限速:注册地址
1. 安装
宿主机执行
pip3 install aliyunpan
2. 配置与登录
查看命令位置:
假设返回:/home/pi/.local/bin/aliyunpan-cli
将路径加入系统环境变量:
sudo nano /etc/profile
加入如下代码
# PATH for aliyunpan-cli
export PATH=$PATH:/home/pi/.local/bin
其中/home/pi/.local/bin是我的路径,如果你的不是,请修改
根据github项目地址中的教程,登录自己的阿里云网盘账号并获取到refresh token,回到宿主机终端,输入:
echo "refresh_token: 'xxxxx'" > ~/.config/aliyunpan.yaml
其中xxxxx是你的refresh token,注意单引号和双引号,不要弄错
再在宿主机终端中输入
如果返回的信息中包含root,则表示登录成功
3. 自动刷新token
宿主机执行:
添加如下代码
# aliyunpan refresh token update
*/50 * * * * output=$(/home/pi/.local/bin/aliyunpan-cli token -r) && [ ${#output} -eq 32 ] && echo "refresh_token: '$output'" > ~/.config/aliyunpan.yaml
表示每50分钟刷新一次refresh_token,并将新的refresh_token保存到~/.config/aliyunpan.yaml文件。其中 /home/pi/.local/bin/是aliyunpan-cli命令的路径,可用which aliyunpan-cli 查看,如果你的不是此路径,请修改
记住,一定要带上命令的路径,否则无法运行成功
四、配置自动备份脚本
1. 修改自定义配置
下载脚本文件ha_atuo_backup.sh,把文件放入到宿主机任意位置,比如/home/pi 目录
(20220509更新v1.2.6:修复了部分情况无法删除旧备份的bug)
(20220110更新v1.2.5:百度网盘如备份失败,不再影响阿里网盘的备份)
(20211105更新v1.2.4:自动生成的备份文件名包含了HA的版本号)
(20211029更新v1.2.3:阿里网盘同步后不会覆盖云端文件修改时间,要配合最新版aliyunpan-cli使用:pip3 install aliyunpan --upgrade)
(20211028更新v1.2.2:百度网盘支持自定义远程备份路径,修复了一些其他小问题)
(20211027更新v1.2.1:修复了百度网盘上传日志文件报错的bug)
(20211026更新v1.2.0:修复了crontab 定时任务找不到网盘命令的bug)
ha_auto_backup_v1.2.6.rar
(3.14 KB, 下载次数: 180)
打开脚本,自定义设置:
cd /home/pi
sudo nano ha_atuo_backup.sh
自定义配置
ha_path:检查 HA主目录 ha_path 文件夹路径是不是/usr/share/hassio/homeassistant,如果不是,修改成自己的(core/container版本用户必改)可在宿主机上执行如下命令查看HA主目录:
sudo find / -name .HA_VERSION 2>/dev/null | grep -o '/.*/'
new_backup:是否创建新备份,默认为"yes",如果改为"no"则不会在本地创建新的备份
backup_password:备份密码如果是默认值no_password,则无备份密码;可自行修改备份密码
number_of_files_to_keep_local:默认保留5个最新备份,删除多余的较早备份,可自定义修改保留备份数
upload_baiduyun:是否上传到百度网盘,默认为"yes",如果改为"no"则不会将备份上传到百度网盘
upload_aliyun:是否上传到阿里网盘,默认为"yes",如果改为"no"则不会将备份上传到阿里网盘
baiduyun_backup_remote_path:百度网盘远程备份路径,默认为/homeassistant_backup,可去掉此行注释进行修改
aliyun_backup_remote_path:阿里网盘远程备份路径,默认为/homeassistant_backup,可去掉此行注释进行修改
2. 手动运行验证
手动运行一下脚本,看看有无报错(如果backup文件夹中已有备份,且超过5个,会自动删除多余的备份,请务必修改保留的备份数后再执行脚本)
sh ha_auto_backup.sh
日志文件可在backup文件夹下查看:auto_backup.log
3. 检查是否备份成功
HA页面,supervisor-备份(只有Hassio/Hassos版本用户才能看到):
备份
百度网盘-我的应用数据(apps)-bypy文件夹:
百度网盘
阿里网盘-/homeassistant_backup/backup
阿里网盘
五、设置定时备份:
可利用crontab任务设置自动定时备份,宿主机执行
添加如下代码可实现每天凌晨2点自动备份(建议将备份时间设置为凌晨,不占用网速)
# HA auto backup
0 2 * * * bash -lc 'sh /home/pi/ha_auto_backup.sh'
其中/home/pi/ha_auto_backup.sh 路径请自行修改成你自己的。注意bash -lc 不能少,否则可能找不到命令路径;其他定时任务自行百度
完,任何问题可以留言~
|