Backup

備份 Xen 域

  • May 16, 2012

我目前正在開發 Xen 備份系統,但是我遇到了以下問題:

我有兩種備份方法:

  • dd從 LVM 快照做,然後tar響起來,然後遠端同步它
  • 掛載 LVM 快照並將所有內容同步到遠端位置

現在第二個選項允許我使用, rdiff-backup所以我可以保存增量備份並節省大量空間,而第一個選項確實很重。

現在,我有兩個問題:

  • 有沒有辦法在使用時沒有“空白” dd?假設我有一個 50GB 的 LVM 卷並且只使用了 3GB,使用dd它時會創建一個 50GB 的映像(因此浪費了 47GB)。tar可以解決這個問題,但需要很多額外的時間(我基本上沒有)
  • 這些img文件可以通過dd某種方式增量保存嗎?

壓縮空格

讓我們從您的快照中回歸基礎。首先,我要請你看看你為什麼要壓縮一個文件。停下來想想 tar 做了什麼以及為什麼要這樣做。

$ dd if=/dev/zero of=zero bs=$((1024*1024)) count=2048
2048+0 records in
2048+0 records out
2147483648 bytes transferred in 46.748718 secs (45936739 bytes/sec)
$ time gzip zero

real    1m0.333s
user    0m37.838s
sys     0m1.778s
$ ls -l zero.gz
-rw-r--r--  1 user  group  2084110 Mar 11 16:18 zero.gz

鑑於此,我們可以看到壓縮在其他空白空間上為我們提供了大約 1000:1 的優勢。無論系統對稀疏文件的支持如何,壓縮都有效。還有其他算法會更加收緊它,但對於原始的整體性能,gzip獲勝。

Unix 實用程序和稀疏文件

給定一個支持稀疏文件的系統,dd有時可以選擇節省空間。奇怪的是,我的 mac 包含一個帶有標誌的版本ddconv=sparse但 HFS+ 文件系統不支持它。相反,我用於測試的全新 Debian 安裝支持 ext4 中的稀疏文件,但該安裝dd沒有標誌。去搞清楚。

因此,另一個練習:

我將 /dev/zero 複製到與上面相同的文件中。它在文件系統上佔用了 2G 空間,如dudfls. 然後我使用cp它,發現自己有 2 個文件使用 4GB 空間。所以,是時候嘗試另一個標誌了:

`cp --sparse=always sparse sparse2`

使用它會強制 cp 在看到一長串零時採用正常文件並使用稀疏分配。現在我有 2 個文件根據 和 報告佔用 4GB ls,但根據du和僅佔用 2GB df

現在我有一個稀疏文件,cp 會表現嗎?是的。cp sparse2 sparse結果ls顯示每個文件消耗了 2GB 的空間,但du顯示它們在文件系統上佔用了零塊。結論:一些實用程序會尊重已經稀疏的文件,但大多數會寫回整個文件。除非你強迫它的手嘗試,否則甚至cp不知道將寫入的文件變回稀疏。

接下來,我創建了一個 1MB 的文件並將其設為稀疏條目,然後嘗試在vim. 儘管只輸入了幾個字元,我們又回到了使用整個東西。快速搜尋發現類似的展示:https ://unix.stackexchange.com/questions/17572/what-is-the-interaction-of-the-rsync-size-only-and-sparse-options

稀疏的結論

所以我的想法給出了這一切:

  • 使用 LVM 的快照
  • 對快照執行zerofree
  • 用於rsync -S複製產生的稀疏文件
  • 如果您不能使用 rsync,如果您正在通過網路傳輸,請 gzip 快照,然後cp --sparse=always針對未擴展的圖像執行以創建稀疏副本。

差異備份

塊設備上差異備份的問題是,事情可能會稍微移動並產生大而笨拙的差異。關於 StackOverflow 的一些討論:https ://stackoverflow.com/questions/4731035/binary-diff-and-patch-utility-for-a-virtual-machine-image 得出的結論是最好的使用是 xdelta。如果您要這樣做,請再次嘗試先將您的空白空間歸零。

引用自:https://serverfault.com/questions/368578