我想使用以下结构进行备份
/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
是初始备份、s1
snapshot1、s2
snapshot2以及ch
snapshot2对应的更改。第一列是索引节点号,第三列是硬链接计数。它表明已更改的文件c
硬链接到ch
,新文件c2
硬链接到ch
,未更改的文件硬链接到s1
和i
。