稀疏 qemu 映像的 rsync 會增加磁碟大小

稀疏 qemu 映像的 rsync 會增加磁碟大小

我有一個稀疏的原始 qemu 圖像,我想將其傳輸到另一台伺服器。qemu-img info給我:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

我用以下方式轉移它:

rsync -azhP --sparse origin:/path/to/img/sparse.img .

現在,在目標伺服器上我有:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 40G

但是,virt-sparsify在複製的圖像上再次運行後,我得到:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

兩台伺服器都在 XFS 檔案系統上運行 CentOS 7.2。所以發生了什麼事?

更新:

經過更多研究後,我發現幾篇文章表明 rsync 不能很好地處理稀疏文件,最好使用不同的工具,例如焦油,傳輸稀疏檔案。

您可以使用 來跟進tar傳輸rsync --inplace,以確保文件傳輸時沒有錯誤,如所解釋的這裡

其他解決方案建議在目標上建立一個相同大小的空稀疏文件,然後用於rsync --inplace傳輸實際資料。

我沒有將其作為解決方案來編寫,因為它並沒有真正解釋為什麼rsync --sparse會發生這種情況。

答案1

我敢打賭這是由於來源和目的地之間的 FS 差異造成的。

讓我用一個例子來詳細說明。稀疏檔案是指磁碟上未分配空區塊(即全為 0)的檔案。 FS 上的區塊大小越小,就越有可能找到這樣的區塊。因此,您的問題可能是由於目標上的區塊大小大於來源上的區塊大小。

可能還有其他我不知道的XFS參數。

也可以看看ServerFault 上的這個問題

答案2

我發現最適合我的解決方案是先運行

virt-sparsify imagename

需要一些時間。這會產生一個較小尺寸的圖像,在ls -hdu -h中報告相同的尺寸du -h --apparent-size。但是,當您安裝映像時,它會報告正確的大小(並按預期增長)。

然後 rsync 該圖像。

相關內容