Linux
“硬連結”大文件的部分,其中只有一小部分發生了變化
我使用 rsync 進行備份:
rsync -a --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP
這樣,由於使用了硬連結,我節省了空間。
當我需要備份一個不斷變化的大文件(虛擬機映像)時,就會出現問題。
是否可以硬連結不是整個圖像,而只是更改部分?有什麼工具可以解決這個問題嗎?
這裡可以做很多事情。請注意,它們實際上都沒有使用硬連結,因為它們只能指向一個完整的文件。使用
btrfs
文件系統在這裡開闢了一些非常有用的可能性。請注意,btrfs
目前(最新版本是 v3.13)仍處於試驗階段。但是,它的COW(寫時複製)能力非常適合這種事情(當然前提是可以在同一文件系統上進行備份)。考慮btrfs
安裝在 上的文件系統/mnt
,您可以使用以下命令製作整個文件系統的原子快照:btrfs subvolume snapshot /mnt /mnt/snapshot
要允許部分快照,您必須將要備份的文件放在一個
subvolume
而不是目錄中。例如:btrfs subvolume create /mnt/subvol mv stuff /mnt/subvol btrfs subvolume snapshot /mnt/subvol /mnt/subvol_snapshot
除了使用之外
btfrs
,您還可以考慮將虛擬機映像掛載在備份的一側或兩側,並rsync
在兩個掛載點之間使用。此部落格展示瞭如何
.vdi
使用qemu-utils
. 以 root 身份執行的命令(未經測試):modprobe nbd qemu-nbd -c /dev/nbd0 <vdi-file> mount /dev/nbd0p1 /mnt ... umount /mnt qemu-nbd -d /dev/nbd0
最後,可能有用的最簡單方法
--inplace
是rsync
. 從手冊頁:--inplace This option changes how rsync transfers a file when its data needs to be updated: instead of the default method of creating a new copy of the file and moving it into place when it is complete, rsync instead writes the updated data directly to the destination file. ... This option is useful for transferring large files with block-based changes or appended data, and also on systems that are disk bound, not network bound.
當然,這裡的問題是,將它與
--link-dest
(在rsync
<2.6.4 版本中,兩者完全不兼容)結合使用沒有任何好處,因為仍然必須在目的地創建文件的副本。