备份

我的需求

1、docker的config和data等待一系列的文件(已将正在运行的docke已全部转为compose文件,万一系统崩溃了,可以继续无损使用)

2、照片

3、其他

之前直接使用备份软件上传到网盘,虽说整体文件不大,但是文件小,还特别多,尤其是docker的内容,都是10几万个文件数量,上传一天都传不完,还容易引起网盘的风控,而且还有安全泄漏隐患。

这两天突发其想,直接使用脚本打包,然后把压缩包上传到云盘不就完事了。

一、压缩包在本地使用7z加密打包,所以先在环境变量中定义一个密码,避免直接在脚本中使用明文,直接使用明文可以跳过。

1、编辑环境变量

#编辑环境变量
nano ~/.bashrc
#添加一行zip密码,密码内容自行输入,注意密码中不要出现&字符。
export ZIP_PASSWORD=”密码”

ctrl+s保存,ctrl+x退出

2、使环境变量生效

source ~/.bashrc

二、编写脚本

1、安装p7zip

sudo apt-get install p7zip-full

解压加密的zip文件

7z x -p”你的密码” /path/to/加密文件.zip

如果源文件包含中文/特殊字符,解压时可能乱码,需指定编码(仅限命令行):

7z x -p密码 -mcp=936 加密文件.zip # Windows GBK 编码
7z x -p密码 -mcp=UTF-8 加密文件.zip # Linux/macOS

2、脚本内容

路径的文件名自行修改

nano /vol1/1000/脚本/定时ZIP任务/zip.sh

定义源文件夹和备份目录

SOURCE_DIR=”路径” #需要备份的文件夹
BACKUP_DIR=”路径” #保存备份的文件夹
设置 ZIP 加密密码(明文存储,谨慎使用!)

ZIP_PASSWORD=”
You can’t use ‘macro parameter character #’ in math mode{ZIP_PASSWORD}” #如果不使用环境变量,可以把
{ZIP_PASSWORD}直接改为明文密码

创建带时间戳的 ZIP 文件名

TIMESTAMP=$(date +”%Y%m%d_%H%M%S”)

ZIP_NAME=”脚本_${TIMESTAMP}.zip” #保存的文件名,可以修改“脚本_”以区分其他的备份

压缩文件夹并设置密码(AES-256 加密)

7z a -tzip -p”
{BACKUP_DIR}/
{SOURCE_DIR}”

删除旧备份,仅保留最近 3 个。


cd “${BACKUP_DIR}” || exit

ls -t *.zip | tail -n +4 | xargs rm -f

chmod +x zip.sh #授权

脚本就已经写好了,下面我们需要定时运行脚本。压缩包会保留最近三个,多的会删除。

crontab -e

这是我自己的内容,请自行更改为自己的时间和路径。可以把时间隔开,错位运行。

#定时表达式:分钟 小时 日期 月份 星期几( 0 3 * * 1 每周一凌晨 3 点执行)
#docker每周一凌晨4点同步,所以3点30分压缩
30 3 * * 1 /vol1/1000/other/脚本/定时ZIP任务/docker.sh
#strm流媒体每周一凌晨5点同步,所以4点30分压缩
30 4 * * 1 /vol1/1000/other/脚本/定时ZIP任务/strm.sh
#照片每周一凌晨2点同步,所以1点30分压缩
30 1 * * 1 /vol1/1000/other/脚本/定时ZIP任务/camera.sh
30 1 * * 1 /vol1/1000/other/脚本/定时ZIP任务/脚本备份.sh

三、使用自带的备份软件

新建一个任务,制定好规则就可以了。

备份规则那里,把来源地删除文件时,保留目的地对应的文件。这个勾取消掉,当然如果你需要所有的备份文件也可以勾上。

这样不仅传输速度快,而且占用空间小。我的DOCKER配置文件有5个G,压缩完才1.7个G。

网盘使用的ALIST+RCLONE挂载到本地。

天翼云老用户以前注册的有10T,不限速,实测可以跑满带宽。

[up主专用,视频内嵌代码贴在这]