使用 rsync 增量备份远端文件
记录一下使用 rsync 进行文件增量备份,把 nas 上的 docker 挂载的文件同步到本地计算机进行一个备份
创建 shell 脚本
backup.sh
#!/bin/bash
# 对 NAS 上的 docker 目录进行增量备份
set -o errexit
set -o nounset
set -o pipefail
readonly SOURCE_DIR="/volume3/docker" # nas 目录
readonly BACKUP_DIR="./" # 本地备份目录(当前目录)
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"
mkdir -p "${BACKUP_DIR}"
rsync -av --delete \
-e ssh \
"nas:${SOURCE_DIR}/" \ # 这里的 nas 是之前使用 config 文件进行配置的 ~/.ssh/config
--link-dest "${LATEST_LINK}" \
"${BACKUP_PATH}"
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
上面脚本中,每一次同步都会生成一个新目录 ${BACKUP_DIR}/${DATETIME},并将软链接 ${BACKUP_DIR}/latest 指向这个目录。
下一次备份时,就将 ${BACKUP_DIR}/latest 作为基准目录,生成新的备份目录。
最后,再将软链接 ${BACKUP_DIR}/latest 指向新的备份目录。
参数介绍
-a、--archive参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。-v参数表示输出细节。-vv表示输出更详细的信息,-vvv表示输出最详细的信息。--delete参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。-e参数指定使用 SSH 协议传输数据。--link-dest参数指定增量备份的基准目录。
压缩备份文件夹
zip -r -e -o NAS_Docker_Backup_20211216.zip ./2021-12-16_20:55:49参数介绍
-r表示子目录子文件全部压缩为 zip。这部比较重要,不然的话只有 something 这个文件夹被压缩,里面的没有被压缩进去-e表示你的压缩文件需要加密,终端会提示你输入密码。还有种加密方法,这种是直接在命令行里做的,比如 zip -r -P Password01! modudu.zip SomeDir, 就直接用 Password01!来加密 modudu.zip 了。-o表示设置所有被压缩文件的最后修改时间为当前压缩时间
参考资料
CC BY-NC-SA 4.0 2018–PRESENT © Wuxh