
我有一個稀疏的原始 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 -h
和du -h
中報告相同的尺寸du -h --apparent-size
。但是,當您安裝映像時,它會報告正確的大小(並按預期增長)。
然後 rsync 該圖像。