我正在尝试使用rsync
实现自定义备份功能。为此,我修改了以下现有代码https://linuxconfig.org/how-to-create-incremental-backups-using-rsync-on-linux,如下所示:
#!/bin/zsh
#https://linuxconfig.org/how-to-create-incremental-backups-using-rsync-on-linux
# A script to perform incremental backups using rsync
set -o errexit
set -o nounset
set -o pipefail
incremental_bckp_rsync_dir(){
readonly SOURCE_DIR="/$1"
readonly BACKUP_DIR="/$2/$1"
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
"${SOURCE_DIR}/"
--link-dest "${LATEST_LINK}"
--exclude=".cache"
"${BACKUP_PATH}"
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
}
incremental_bckp_rsync_dir path/to/dir path/to/backup
它成功地备份了dir
,但是每次我运行脚本时,备份目录的大小(使用命令du -h path/to/backup
获得)似乎都会翻倍(这意味着它不是增量的,据我所知。有办法解决吗?
存在一个使用rsync并将备份文件夹组织到目录中的工具,以便将来方便使用…这个工具就是Butterfly Backup。我发现这篇文章(以及它的文档)解释了它是如何工作的:https://fedoramagazine.org/butterfly-backup/
文档:https://github.com/MatteoGuadrini/Butterfly-Backup
简单的使用:
bb backup --computer pc1 --destination /nas/mybackup --data User Config --type MacOS --mode Full
目录为:
bb list --catalog /nas/mybackup
...
BUTTERFLY BACKUP CATALOG
Backup id: f65e5afe-9734-11e8-b0bb-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-03 17:50:36
Backup id: 4f2b5f6e-9939-11e8-9ab6-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-06 07:26:46
Backup id: cc6e2744-9944-11e8-b82a-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-06 08:49:00
我从来没有尝试过这个,但你可以使用-n
|--dry-run
选项让rsync
只是列出它将传输的所有文件(因此所有更改,删除和新文件),例如:
rsync -an --delete --out-format="%f" src_path/ dst_path
并将其输出存储到一个文件中,然后启动另一个rsync
,其中--files-from
选项将此列表提供给它,以便仅将这些文件传输到不同的目的地(在其路径中带有时间戳等)。
另一种方法(我主要使用)是让rsync
创建备份(镜像),并使用-b
|--backup
选项在单独的路径中存储修改/删除文件的副本。例如
TIMESTAMP=$(date '+%Y-%m-%d_%H%M%S')
rsync -av --delete --backup --backup-dir=$DEST/DELETED/$TIMESTAMP" $SRC/ $DEST
这将保持你的备份同步,但也创建一个额外的备份旧文件在一个单独的文件夹下。/DELETED/每次运行在你的目标。通常你只想保留最近X天的备份,所以你必须创建一个删除作业来清除$DEST/DELETED/下的旧文件夹。