『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 18350|回复: 80

[技术讨论] HA定时自动备份到百度网盘、阿里网盘(手把手教程)

  [复制链接]

5

主题

357

帖子

2046

积分

金牌会员

Rank: 6Rank: 6

积分
2046
金钱
1674
HASS币
60
发表于 2021-10-21 11:34:57 | 显示全部楼层 |阅读模式
本帖最后由 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 BackupRemote Backup (uses scp)

脚本可实现/支持的功能:
1. 定时自动备份HA,支持设置备份密码
2. 可设置保留的备份个数,自动清理最早的多余备份
3. 支持备份到百度网盘、阿里网盘,可自由选择
4. 自动修改备份后的文件名,以“时间+版本号”命名,更方便管理
5. 本地备份后,自动同步到网盘,只确保本地备份上传到网盘,不会删除本地和网盘中不同文件名的文件
6. 如果上一次上传到网盘失败(如只上传了一半),下次同步时会继续上传,直到网盘和本地备份文件Hash值完全一致,这样可以确保每个云端备份都有效

二、安装百度网盘工具
1. 安装bypy
宿主机上执行以下命令(不要在docker里面执行
pip3 install bypy
宿主机上执行以下命令
bypy info
会返回一个链接,复制到浏览器打开,得到一个授权码,按terminal中的提示填入,等待授权成功
测试是否安装好,宿主机上执行
bypy info
若返回网盘的空间信息,则表示安装成功

3. bypy添加到环境变量
我出现过几次系统提示找不到bypy命令的情况,为防止备份失败,最好把bypy路径加入环境变量
宿主机执行
which bypy
把返回的路径添加到宿主机上/etc/profile文件,比如我的是:
# PATH for baidu yunpan
export PATH=$PATH:/home/pi/.local/bin
上面/home/pi/.local/bin是我的路径地址,如果你的不是这个,记得修改
保存后再执行
source /etc/profile

三、安装阿里网盘工具

没阿里网盘的可注册一个,目前上传下载不限速:注册地址

1. 安装
宿主机执行
pip3 install aliyunpan

2. 配置与登录
查看命令位置:
which aliyunpan-cli
假设返回:/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,注意单引号和双引号,不要弄错

再在宿主机终端中输入
aliyunpan-cli tree
如果返回的信息中包含root,则表示登录成功

3. 自动刷新token
宿主机执行:
crontab -e
添加如下代码
# 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, 下载次数: 168)       
打开脚本,自定义设置:
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任务设置自动定时备份,宿主机执行
crontab -e
添加如下代码可实现每天凌晨2点自动备份(建议将备份时间设置为凌晨,不占用网速)
# HA auto backup
0 2 * * * bash -lc 'sh /home/pi/ha_auto_backup.sh'
其中/home/pi/ha_auto_backup.sh 路径请自行修改成你自己的注意bash -lc 不能少,否则可能找不到命令路径;其他定时任务自行百度

完,任何问题可以留言~














评分

参与人数 7金钱 +91 HASS币 +20 收起 理由
brigcn + 5 赠人玫瑰,手留余香!
firewater + 8 论坛有你更精彩!
jyz_0501 + 20 我也是吃过一次亏,硬盘挂了。之前用nextcl.
+ 20 + 20 感谢楼主分享!
sirakawa + 10 厉害了word楼主!
anlong + 16 论坛有你更精彩!
咸味土豆 + 12 又如滚滚黄河之水,一发不可收拾…….

查看全部评分

回复

使用道具 举报

5

主题

357

帖子

2046

积分

金牌会员

Rank: 6Rank: 6

积分
2046
金钱
1674
HASS币
60
 楼主| 发表于 2021-10-21 11:58:57 | 显示全部楼层
本帖最后由 muxiachuixue 于 2021-10-21 19:19 编辑

已支持core/container版本HA自动备份
回复

使用道具 举报

41

主题

1282

帖子

5282

积分

论坛元老

Rank: 8Rank: 8

积分
5282
金钱
3995
HASS币
20
发表于 2021-10-21 12:13:09 | 显示全部楼层
求阿里网盘的,之前一直想要这个教程,感恩楼主
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

6

主题

266

帖子

2366

积分

论坛技术达人

积分
2366
金钱
2080
HASS币
90
发表于 2021-10-21 20:34:35 | 显示全部楼层
如此详细,必须支持下
小米MIoT插件:miot-spec.com
回复

使用道具 举报

5

主题

357

帖子

2046

积分

金牌会员

Rank: 6Rank: 6

积分
2046
金钱
1674
HASS币
60
 楼主| 发表于 2021-10-22 10:04:26 | 显示全部楼层
jjcs 发表于 2021-10-21 12:13
求阿里网盘的,之前一直想要这个教程,感恩楼主

阿里网盘我没用过。你可以把脚本里面用百度网盘备份的命令改成阿里网盘的
回复

使用道具 举报

41

主题

1282

帖子

5282

积分

论坛元老

Rank: 8Rank: 8

积分
5282
金钱
3995
HASS币
20
发表于 2021-10-22 16:22:15 | 显示全部楼层
hassos要咋弄
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

5

主题

357

帖子

2046

积分

金牌会员

Rank: 6Rank: 6

积分
2046
金钱
1674
HASS币
60
 楼主| 发表于 2021-10-22 19:10:50 | 显示全部楼层

已支持阿里云,等我更新吧
回复

使用道具 举报

41

主题

1282

帖子

5282

积分

论坛元老

Rank: 8Rank: 8

积分
5282
金钱
3995
HASS币
20
发表于 2021-10-23 09:13:58 | 显示全部楼层
muxiachuixue 发表于 2021-10-22 19:10
已支持阿里云,等我更新吧

论坛有你更精彩,分享有你更精彩
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

4

主题

255

帖子

2137

积分

金牌会员

Rank: 6Rank: 6

积分
2137
金钱
1882
HASS币
0
发表于 2021-10-23 11:27:59 | 显示全部楼层
大佬,真给力
回复

使用道具 举报

5

主题

277

帖子

2298

积分

金牌会员

Rank: 6Rank: 6

积分
2298
金钱
2011
HASS币
50
发表于 2021-10-25 15:10:44 | 显示全部楼层
如果科学上网了,还可以用Home Assistant Google Drive Backup,感觉更方便些
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-23 20:12 , Processed in 0.066035 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表