Rsync

rsync:將更新的/新文件複製到不同的目錄

  • June 30, 2020

我想使用以下結構進行備份

/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

(2) 我通過 rsync -riv --ignore-existing "$directory_to_backup"/ "$last_backup"/rsync -riv --existing "$directory_to_backup"/ "$last_backup"/

但現在我想將這兩個腳本的輸出硬連結到changed目錄中。

我的目標是同時擁有要備份的目錄的完整快照,以及changed僅包含新文件和已修改文件的目錄。一切都帶有硬連結以避免佔用太多空間。

如果我對你的理解正確,你只需要稍微改變一下順序。您可以使用--compare-dest創建新文件和更改文件的目錄,然後使用兩個--link-destargs 連結回這個更改的目錄和以前的快照。這是一個範例測試腳本:

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

這裡的directoryi是初始備份,s1snapshot1,s2snapshot2 ,snapshot2ch對應的變化。第一列是 inode 編號,第三列是硬連結數。它顯示更改c的文件硬連結到ch,新文件c2硬連結到ch,未更改的文件硬連結到s1i

引用自:https://unix.stackexchange.com/questions/595817