最近买的独服自己加了个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的断流
大文件应该也没什么问题了,开始贴代码。

测试日志
小型备份

配置文件

config.conf

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 "$@"

推荐文章

大家一起快乐

你快乐吗

【欢迎建议】【总结】几种常见跑frp/内网穿透的途径

省流: 跑的少(20G以内一个月)啥便宜用啥,也可以看...

可按 ESC 键退出搜索

0 篇文章已搜寻到~