如何在刪除快照後恢復 qcow2 檔案中的空間,同時保留剩餘快照?

如何在刪除快照後恢復 qcow2 檔案中的空間,同時保留剩餘快照?

我有一個虛擬機,一開始有 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

相關內容