
我正在使用 KVM 將虛擬機器從一台主機即時遷移到另一台主機。我已經編寫了一個網頁使用者介面來做到這一點。現在我想實現一個進度條。
我的想法是在遷移時比較來源和目標上的磁碟檔案大小。
伺服器1:
ls -ls /data/file.raw
858963 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
伺服器2:
ls -ls /data/file.raw
698543 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
現在,我獲取分配的值並以百分比計算。
100 / 858963 * 698543 = 81%
美好的。但有一個問題:
磁碟並不稀疏。文件的總大小為1717926 blocks
.事實上,只有858963 blocks
分配。所以即時遷移仍在複製文件的空白部分,而我的進度條已經達到 100%
我已經嘗試過使用du
和stat
。
如何只取得磁碟傳輸檔案的大小?
答案1
按照已經建議的方式使用 virsh migrate,或利用 rsync 的稀疏檔案支持,來自man rsync
:
-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination.
如果您想查看進度和速度,請嘗試rsync -ahHS
新增-P