rsync:将更新的/新的文件复制到不同的目录

rsync:将更新的/新的文件复制到不同的目录

我想使用以下结构进行备份

/source # the source directory which should be backed up

/backup/initial/... # the first initial copy/backup of the source
/backup/snapshots/YYYYmmDDHHmmss/... # (1)
/backup/changed/YYYYmmDDHHmmss/... # (2)

我猜 (1) 是 rsync 的“默认”行为。使用返回初始备份的硬链接创建快照。我会通过以下方式做到这一点rsync -avuP --link-dest=$initial_backup $directory_to_backup $destination

rsync -riv --ignore-existing "$directory_to_backup"/ "$last_backup"/ (2) 我通过以下方式 获得 rsync 输出 rsync -riv --existing "$directory_to_backup"/ "$last_backup"/

但现在我想将这两个脚本的输出硬链接到changed目录中。

我的目标是拥有我想要备份的目录的完整快照,以及changed仅包含新文件和修改文件的目录。一切都带有硬链接,以避免占用太多空间。

答案1

如果我理解正确的话,你只需要稍微改变一下顺序。您可以使用--compare-dest创建新文件和更改文件的目录,然后使用两个--link-dest参数链接回此更改的目录和上一个快照。这是一个测试脚本示例:

cd /tmp/
rm -fr src backup
mkdir -p src/a/b backup
date >src/a/b/unchanged
date >src/a/b/c
rsync -a src/ backup/i
rsync -a --link-dest=../i/ src/ backup/s1
sleep 1
date >src/a/b/c
date >src/a/b/c2
rsync -av --compare-dest=../s1 src/ backup/ch
rsync -av --link-dest=../s1 --link-dest=../ch src/ backup/s2
ls -li backup/*/*/*/*

这给了我这个输出:

919 -rw-r--r-- 2  backup/i/a/b/c
920 -rw-r--r-- 3  backup/i/a/b/unchanged
919 -rw-r--r-- 2  backup/s1/a/b/c
920 -rw-r--r-- 3  backup/s1/a/b/unchanged
472 -rw-r--r-- 2  backup/ch/a/b/c
473 -rw-r--r-- 2  backup/ch/a/b/c2
472 -rw-r--r-- 2  backup/s2/a/b/c
473 -rw-r--r-- 2  backup/s2/a/b/c2
920 -rw-r--r-- 3  backup/s2/a/b/unchanged

这里,目录i是初始备份、s1snapshot1、s2snapshot2以及chsnapshot2对应的更改。第一列是索引节点号,第三列是硬链接计数。它表明已更改的文件c硬链接到ch,新文件c2硬链接到ch,未更改的文件硬链接到s1i

相关内容