Wuxh

Front-end Development

0%

使用 rsync 增量备份远端文件

记录一下使用 rsync 进行文件增量备份,把 nas 上的 docker 挂载的文件同步到本地计算机进行一个备份

创建 shell 脚本

backup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/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 参数指定增量备份的基准目录。

压缩备份文件夹

1
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 表示设置所有被压缩文件的最后修改时间为当前压缩时间

参考资料

欢迎关注我的其它发布渠道