解決 qcow2 image : Could not read snapshots. File too large

在 KVM VM running 的中,執行了 qemu-img snapshot -c ....,可能是沒有算好 image 的剩餘空間,也可能是某種 bug,總之,當 VM 關機後,就再也開不起來了。

qemu-img info 會產生錯誤:

Host1 # qemu-img info portal.img
qemu-img: Could not open 'portal.img': Could not read snapshots: File too large

Solution

先將 image 傳送到其他機器上,就可以用 qemu-img info 查看 image 的資料:

Host2 # qemu-img info portal.img
image: portal.img
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 53G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
                                   -1 2106-02-07 14:28:155124095:34:33.709
                                    0 1970-01-01 08:00:00   00:00:00.000

可以看到 snapshot 的資訊還殘存,但是不完整,因此也不能刪除 snapshot。

接下來,利用 qemu-img convert 去產生新的 image:

Host2 # qemu-img convert -O raw portal.img portal.raw
Host2 # qemu-img info portal.raw
image: portal.raw
file format: raw
virtual size: 50G (53687091200 bytes)
disk size: 45G

可以看到新的 image 就沒有 snapshot 了,這時候再把新的 image 傳回去原本的 server 就可以使用囉。

Reference