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
(2) 我通過
rsync -riv --ignore-existing "$directory_to_backup"/ "$last_backup"/
和rsync -riv --existing "$directory_to_backup"/ "$last_backup"/
但現在我想將這兩個腳本的輸出硬連結到
changed
目錄中。我的目標是同時擁有要備份的目錄的完整快照,以及
changed
僅包含新文件和已修改文件的目錄。一切都帶有硬連結以避免佔用太多空間。
如果我對你的理解正確,你只需要稍微改變一下順序。您可以使用
--compare-dest
創建新文件和更改文件的目錄,然後使用兩個--link-dest
args 連結回這個更改的目錄和以前的快照。這是一個範例測試腳本: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
這裡的directory
i
是初始備份,s1
snapshot1,s2
snapshot2 ,snapshot2ch
對應的變化。第一列是 inode 編號,第三列是硬連結數。它顯示更改c
的文件硬連結到ch
,新文件c2
硬連結到ch
,未更改的文件硬連結到s1
和i
。