我有一個虛擬機,一開始有 5 個快照 1、2、3、4、5。
我用了qemu-img刪除快照 1、2、3。快照 4 和 5 仍然需要且未被刪除。
如何釋放快照1、2、3使用的空間並保留快照4和5?
我花了很多時間尋找解決方案,我找到的解決方案符合以下兩種模式之一:
使用 qemu-img 轉換(刪除了需要的快照)
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2
這會減少 Linux.qcow2 使用的空間,但會刪除快照 4 和 5。
複製虛擬機器並使用 virt-sparsify(不恢復任何空間)
cp Linux.qcow2 TEST.qcow2
sudo virt-sparsify --in-place TEST.qcow2
它會保留兩個未刪除的快照,但不會恢復快照 1、2、3 原來佔用的空間。
如何在刪除快照後恢復 qcow2 檔案中的空間,同時保留剩餘快照?
答案1
qcow2 檔案是稀疏檔案。在支援稀疏檔案的檔案系統上,它們在磁碟上佔用的空間比檔案的大小少得多。
如果刪除快照,報告的大小ls -l
不會改變,但報告的磁碟上的可用空間量df
會改變。
幾乎所有檔案系統都支援稀疏檔案。 FAT 和 NFSv3 可能是唯一不支援此功能的常見檔案系統。
答案2
當您刪除快照1、2、3時,檔案被刪除,但不表示空間已釋放,因為這不是真正的刪除。文件只是被標記,以便快速完成刪除。
如果你想釋放已刪除快照的空間,可以轉換qcow2文件,但之前必須透過dd指令將qcow2文件補為0:
$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk': No space left on device
$rm junk
然後轉換qcow2文件
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2