Kvm-Virtualization

刪除“孤兒”libvirt 快照

  • March 20, 2017

我正在嘗試按照此過程使用 KVM 進行實時快照。

我一定是在某個時候搞砸了,因為我處於我不理解的狀態。

我的虛擬機被稱為prod. 它是在文件中創建的/srv/vm/prod.qcow2

顯然,沒有執行快照:我正在處理基本文件。我可以猜測是因為文件的修改日期/srv/vm/prod.qcow2每分鐘左右都會更改一次。此外,此命令確認它:

# virsh domblklist prod
Target     Source
------------------------------------------------
vda        /srv/vm/prod.qcow2

並且沒有什麼可以阻止送出:

# virsh blockcommit prod vda --active --pivot
error: invalid argument: top '/srv/vm/prod.qcow2' in chain for 'vda' has no backing file

但是,libvirt 會跟踪舊快照:

# virsh snapshot-list prod
Name                 Creation Time             State
------------------------------------------------------------
snap                 2015-06-09 12:11:33 +0200 disk-snapshot

它的描述符文件是/var/lib/libvirt/qemu/snapshot/prod/snap.xml

<domainsnapshot>
 <name>snap</name>
 <state>disk-snapshot</state>
 <creationTime>1433844693</creationTime>
 <memory snapshot='no'/>
 <disks>
   <disk name='vda' snapshot='external' type='file'>
     <driver type='qcow2'/>
     <source file='/srv/vm/snap.qcow2'/>
   </disk>
 </disks>
[...]

源文件/srv/vm/snap.qcow2被刪除。

考慮到我試圖實現的方法,這個快照很可能是使用以下命令創建的:

virsh snapshot-create-as --domain prod snap --diskspec vda,file=/srv/vm/snap.qcow2 --disk-only --atomic

我無法刪除它:

# virsh snapshot-delete prod snap
error: Failed to delete snapshot snap
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet

所以我處於創建快照的狀態,顯然不再使用並且無法刪除。

有什麼我可以做的嗎?

我應該關心還是可以忽略它?

編輯

我剛剛刪除了快照文件描述符。

# systemctl stop libvirt
# mv /var/lib/libvirt/qemu/snapshot/prod/snap.xml /home/jerome
# systemctl start libvirt

我的虛擬機再次啟動,我不再看到對快照的任何引用。

# virsh snapshot-list prod
Name                 Creation Time             State
------------------------------------------------------------

virt-manager 中也沒有任何內容。

我還好還是還有一些家務要做?

編輯 2

顯然,傳遞-–no-metadatavirsh snapshot-create-as將通過不創建 .xml 文件來避免此問題,從而不保留快照的痕跡。

正確的方法是

virsh snapshot-delete prod --metadata snap

(這個命令可以在 wiki上找到。我在這裡問之前嘗試過,但由於錯字已被更正,它失敗了。)

我不知道在 libvirtd 關閉時刪除 .xml 文件沒有涵蓋的功能。也許唯一的區別是不需要停止 libvirtd。即便如此,也許這可能會在未來發展。無論如何,建議使用 libvirt 的 API 而不是直接玩文件。

如果快照是使用參數創建的,則確實不需要此呼叫--no-metadata

我在libvirt-users mailing-list的這個執行緒中獲得了這個澄清。

任何願意通過實時快照進行備份的人都應該閱讀上述 wiki 頁面,並且可能對回答我的菜鳥問題的論壇主題感興趣,並指向Eric Blake 的幻燈片,以及此部落格文章和以下評論。

引用自:https://serverfault.com/questions/721216