🚀 前言:你的数据真的安全吗?
想象一下:某天你的Unraid阵列突然罢工,而appdata
里存着精心调校的Docker配置,boot
分区躺着启动密钥...
今天我们就来搞个全自动数据保险箱——介通过Unraid的插件生态(Appdata Backup、User Scripts、rclone)实现boot分区和appdata数据的自动化云备份!
🔧 第一步:安装必要插件
💡 小贴士:rclone
的远程存储配置,就像给司机办理一张快递公司的【送货员通行证】——告诉云盘:“这个司机是我的人,允许他往我的仓库送货!”,所以建议在命令行用rclone config
提前搞定!
📂 第二步:配置Appdata Backup插件
备份路径设置
打开Appdata Backup插件 → 设置备份路径(比如/mnt/disks/T2312040410/backup/normal
)→ 勾选需要备份的容器。排除无关文件
在Global exclusion list里添加*.tmp
,cache/
等临时文件,避免浪费打包空间。
Backup the flash drive? 记得勾选yes,不然不会备份flash
💾 第三步:打包压缩加密(User Scripts插件)
在User Scripts中点击Add New Script
新建一个脚本backup_appdata_boot,打包压缩并且加密:
#!/bin/bash
# 定义输出目录
output_dir="/mnt/disks/T2312040410/backup/encrypted"
start_time=$(date +%s) # 记录开始时间戳(秒级)
# 创建输出目录(如果不存在)
mkdir -p "$output_dir"
# 获取第一个子目录名称(按名称排序)
first_dir=$(ls -d /mnt/disks/T2312040410/backup/normal/*/ 2>/dev/null | sort | tail -n1 | xargs basename)
# 检查是否找到目录
if [ -z "$first_dir" ]; then
echo "Error: No subdirectory found in /mnt/disks/T2312040410/backup/normal"
exit 1
fi
# 压缩并加密
echo "开始压缩和加密: $(date '+%Y-%m-%d %H:%M:%S')"
tar -czvf - -C /mnt/disks/T2312040410/backup/normal --exclude="jellyfin.tar.gz" "$first_dir" | openssl enc -aes-256-cbc -salt -pbkdf2 -iter 1000000 -pass pass:'这里输入你的密码' -out "${output_dir}/${first_dir}.tar.gz"
# 计算耗时
end_time=$(date +%s)
duration=$((end_time - start_time))
# 格式化耗时(时:分:秒)
formatted_duration=$(printf "%02d:%02d:%02d" $((duration/3600)) $(( (duration%3600)/60 )) $((duration%60)))
echo "---------------------------------"
echo "压缩完成时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "总耗时: $formatted_duration"
echo "输出文件: ${output_dir}/${first_dir}.tar.gz"
我这里挂载了一块硬盘专门用于备份,其中:
/mnt/disks/T2312040410/backup/encrypted
:打包压缩加密文件到哪里
/mnt/disks/T2312040410/backup/normal
:之前Appdata Backup配置的备份路径
--exclude="jellyfin.tar.gz"
:需要排除的文件,如果没有要排除的文件,直接去掉这个就行了
☁️ 第四步:备份到云盘(User Scripts插件、rclone插件)
在User Scripts中点击Add New Script
新建一个脚本rclone_sync ,备份到云盘:
#!/bin/bash
start_time=$(date +%s) # 记录开始时间戳(秒级)
# 获取第一个文件名称(按名称排序)
first_dir=$(ls /mnt/disks/T2312040410/backup/encrypted/ 2>/dev/null | sort | tail -n1 | xargs basename)
# 检查是否找到目录
if [ -z "$first_dir" ]; then
echo "Error: No subdirectory found in /mnt/disks/T2312040410/backup/encrypted"
exit 1
fi
# 同步数据
echo "同步 ${first_dir}.tar.gz 到阿里云盘: $(date '+%Y-%m-%d %H:%M:%S')"
rclone copy /mnt/disks/T2312040410/backup/encrypted/${first_dir} AliPan:unraid
echo "同步 ${first_dir}.tar.gz 到夸克云盘: $(date '+%Y-%m-%d %H:%M:%S')"
rclone copy /mnt/disks/T2312040410/backup/encrypted/${first_dir} Quark:备份/unraid
# 计算耗时
end_time=$(date +%s)
duration=$((end_time - start_time))
# 格式化耗时(时:分:秒)
formatted_duration=$(printf "%02d:%02d:%02d" $((duration/3600)) $(( (duration%3600)/60 )) $((duration%60)))
echo "---------------------------------"
echo "同步完成时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "总耗时: $formatted_duration"
注意:
AliPan:unraid
和Quark:备份/unraid
都是我在rclone提前配置好的如需了解rclone的安装和基础操作命令,请点击跳转
⏰ 第五步:给自动化流水线定闹钟
⚡ 高级操作:如果不会Cron表达式,可以通过搜索引擎搜索:在线Cron表达式生成器,可视化生成Cron表达式
🚨 第六步:避坑指南(血泪经验总结)
空间刺客
本地备份目录和云盘存储都要设置监控,避免被备份文件“吃光硬盘”。可以用df -h
和rclone size mycloud:unraid_backup
定期检查。沉默的失败
可以在同步完成后发送Gotify通知或者TG机器人通知,表示同步已经完成,或者同步出现异常验收测试
每隔几个月,随机选一个云盘备份文件,下载到本地通过hash或者md5对比文件是否完整3rclone同步卡顿/中断
限速保平安:加上
--bwlimit 10M
限制上传带宽,避免挤占日常使用。断点续传:添加
--retries 3
和--retries-sleep 30s
,失败后自动重试。API限额规避:针对谷歌盘、OneDrive等平台,用
--drive-chunk-size 64M --tpslimit 10
绕过接口限制。
💡 终极安全口诀
“日志不落地,等于没备份;恢复没验证,等于看运气!”