本文使用“署名-非商业性使用-相同方式共享 4.0 国际(CC BY-NC-SA 4.0)”进行许可。
商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接。 如果您再混合、转换或者基于本作品进行创作,您必须基于相同的协议分发您贡献的作品。
非常简略地记录下利用 Rclone 备份服务器的过程。
由于我基本上都是 docker 应用,volume 又设置在同一个文件夹的子文件里,所以只需要备份这一个文件夹即可。如果需要备份多个文件夹,可以略微改动 bak.sh
即可。
将要备份的文件打包为 .tar.gz 存入本地的一个备份文件夹中,再将这个文件夹备份到 Google Drive 或其他 rclone 支持的地方。默认保留三个备份。
安装官网指引安装并配置好需要使用的服务,比如 Google Drive。
同时了解自己的配置文件的地址:一般在配置是使用的账户的 home 文件夹的 .config/rclone/rclone.conf
。
先创建本地的目标文件夹。将以下 bash 脚本复制到合适的地方,命名为 bak.sh
,修改 source_dir
等选项。
#!/bin/bash
# 要备份文件夹路径
source_dir="/home/yunfi/docker/"
# 备份的文件在本地存储的位置
target_dir="/home/yunfi/baks/usrdocker/"
# 备份的文件在远程的存储位置
remote_dir="gd:/bak/nc/docker"
# Rclone 配置文件位置
config_path="/home/yunfi/.config/rclone/rclone.conf"
# 最多保留的备份数
max_files=3
# 以下内容无须修改
# 获取当前时间作为文件名后缀
prefix="nc-yunfi-docker-"
suffix=$(date +%Y%m%d%H%M%S)
target_file="${target_dir}${prefix}${suffix}.tar.gz"
# 打印开始信息
echo "------ START ${suffix} ------"
# 执行打包操作
tar -czPf "$target_file" "$source_dir"
# chown -R -v yunfi:yunfi "$target_file"
echo "已成功创建打包文件:$target_file"
# 查找目标文件夹中所有以 prefix 开头,'.tar.gz'结尾的文件
files_count=$(find $target_dir -maxdepth 1 -type f -name "${prefix}*.tar.gz" | wc -l)
# 判断文件数量是否超过设定的最大文件数
if [ $files_count -gt $max_files ]; then
# 获取目标文件夹中所有符合条件的文件,并按修改时间排序
files_to_delete=$(find $target_dir -maxdepth 1 -type f -name "${prefix}*.tar.gz" | sort)
# 删除旧文件(保留最新的max_files个文件)
delete_count=$(expr $files_count - $max_files)
echo "❌发现 $files_count 个文件,需要删除 $delete_count 个旧文件"
echo "$files_to_delete" | head -n $delete_count | xargs rm -v
fi
# Rclone 同步文件
echo "🔄开始同步至 Google Drive"
rclone sync $target_dir $remote_dir --config $config_path --drive-chunk-size 64M --delete-after -v
echo "🔄同步结束"
# 打印结束信息
echo -e "------ END ${suffix} ------\n"
加上运行权限 chmod +x bak.sh
可以手动跑一下这个脚本(用 sudo),验证下效果。
sudo crontab -e
由于部分由 Docker 生成的文件是 root:root 的用户权限,所以最好以 root 权限跑这个脚本。
添加一行,脚本位置和日志位置改成你自己的
0 4 * * 0,2,5 /home/yunfi/baks/bak.sh >> /home/yunfi/baks/bak.log 2>&1
每周二、周五、周日的凌晨 4 点进行备份。如果服务器时区不是东八区,可以改成对应的不太繁忙的时间。
本文使用“署名-非商业性使用-相同方式共享 4.0 国际(CC BY-NC-SA 4.0)”进行许可。
商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接。 如果您再混合、转换或者基于本作品进行创作,您必须基于相同的协议分发您贡献的作品。