大家一起快乐
你快乐吗
最近买的独服自己加了个2t的硬盘,装的pve开始玩,因为是小厂,最近在考虑备份的问题,如果是大厂就没这么多担忧了。
首先是网站/数据库/docker,这个可以用面板来备份,小鸡鸡以及其他手搓项目的备份的话就不能用面板了。
看了下别人的方法,都不是很适合我,于是,开始琢磨手搓一个备份脚本。
搭配面板的计划任务,可以使用脚本备份多个目录的文件打包后传到alist挂载的网盘内,也可以是存储桶。
主要是相对网上大多数的方法而言,更加的简单灵活,但网站备份方面依赖面板的备份,当然也可以直接指定项目运行的目录,免去使用面板生成备份文件。
开始配置
首先在alist内挂载存储,可以是本地,也可以是网盘&存储桶,我现在用的是夸克网盘,因为虚拟机的快照过大,存储桶显然不是性价比最高的选择。
然后在alist设置→对象存储→生成id以及密钥→添加一个存储桶,设定名称以及选择你备份文件存储的网盘&存储桶(挂载网盘教程参考官方文档)。
image
然后复制粘贴代码保存到你想存储的目录下即可,使用简单,无需复杂配置。 xhj003
/root/backup/
├── backup.sh # 主脚本
├── config.conf # 配置文件
├── logs/ # 日志目录
├── temp/ # 临时目录
└── snar/ # snar文件目录
├── dir1.snar # 对应目录1的snar文件
├── dir2.snar # 对应目录2的snar文件
└── ...
备份流程:
读取配置文件
创建临时目录和日志目录
检查每个备份目录的变化
创建增量备份包
上传到WebDAV
清理临时文件
记录日志
WebDAV上传实现:
使用 curl 命令进行WebDAV操作
通过 HTTP PUT 方法将文件传输
支持断点续传(未验证)
验证上传完整性
验证可行性
测试了小文件的上传,打包网站什么的自然没什么问题。
然后测试了把虚拟机备份上传到webdav,18G左右的快照,跑了一个多小时上传成功了,期间没有遇到大家说的webdav的断流
大文件应该也没什么问题了,开始贴代码。
测试日志
小型备份
配置文件
WEBDAV_URL="http://127.0.0.1:5244/dav" # 此处根据实际情况修改,后缀/dav不要删除
WEBDAV_USER="username"
WEBDAV_PASS="password"
BACKUP_DIRS="/opt/1panel/backup/"
REMOTE_BACKUP_DIR="/夸克/backup" # 根据你的命名自行修改
COMPRESS_LEVEL=6 # 压缩级别(1-9)
INCREMENTAL_BACKUP=false # 是否启用增量备份
脚本代码
fi
fi
local end_time=$(date +%s)
local duration=$((end_time - start_time))
console_log "INFO" "备份完成: ${dir} (耗时: ${duration} 秒)"
log "BACKUP" "备份完成: ${dir}" "$backup_file"
log "INFO" "备份耗时: ${duration} 秒"
return 0
}
main() {
# 检查依赖
check_dependencies
# 创建必要的目录
mkdir -p "$LOG_DIR" "$TEMP_DIR" "$SNAR_DIR"
console_log "INFO" "开始备份任务..."
log "INFO" "开始备份任务..."
# 检查配置
if [ -z "$BACKUP_DIRS" ]; then
handle_error "未配置备份目录"
fi
# 处理每个备份目录
for dir in $BACKUP_DIRS; do
if [ ! -d "$dir" ]; then
console_log "WARN" "目录不存在,跳过: ${dir}"
log "WARN" "目录不存在,跳过: ${dir}"
continue
fi
# 创建备份
create_backup "$dir"
# 上传到WebDAV
local dir_name=$(basename "$dir")
local backup_file="${TEMP_DIR}/${BACKUP_PREFIX}_${dir_name}.tar.gz"
upload_to_webdav "$backup_file" "${REMOTE_BACKUP_DIR}/${DATE}/${dir_name}.tar.gz"
done
# 清理
cleanup
console_log "INFO" "备份任务完成"
log "INFO" "备份任务完成"
}
main "$@"