了解 libvirt 快照的儲存方式
起初我以為它會被儲存,
/var/lib/libvirt/images/
但是當我為域創建快照時centos7
,這個目錄中沒有任何變化:drwx--x--x 2 root root 4096 Feb 29 21:28 . drwxr-xr-x 7 root root 4096 Feb 28 23:47 .. -rw------- 1 libvirt-qemu kvm 5370216574 Feb 29 22:09 centos7-1.qcow2 -rw------- 2 libvirt-qemu kvm 5931597824 Feb 29 22:12 centos7.qcow2 -rw------- 1 root root 1499267135 Feb 28 21:07 centos7-server.qcow2
接下來我檢查了
/var/lib/libvirt/qemu/snapshot/centos7
哪些顯示了這些 xml 文件:
client2.xml client.xml disks.xml
這是我給我的快照起的名字。
有人可以告訴我為什麼快照是 xml 文件而不是磁碟映像嗎?這些 xml 文件儲存的是什麼,我猜他們需要我
images
目錄中的原始 qcow2 圖像才能工作,並且不能與任何圖像一起工作 - 對嗎?
xml 文件代表快照元數據,如果您打開它,您會看到類似這樣的內容(為簡潔起見,域定義被縮短):
你的快照.xml
<!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh snapshot-edit or other application using the libvirt API. --> <domainsnapshot> <name>your-snapshot</name> <state>shutoff</state> <creationTime>1567455358</creationTime> <memory snapshot='no'/> <disks> <disk name='hda' snapshot='internal'/> </disks> <domain type='kvm'> <name>centos76-client</name> [...] </domain> <active>1</active> </domainsnapshot>
該文件記錄了快照的名稱、域創建時的狀態、創建時間、記憶體是否也是快照、磁碟以及當時的域定義。
此域定義相當於您將獲得的相同資訊
virsh dumpxml your-domain
。這是快照時您的設備、CPU、記憶體等的配置。例如,如果在快照之後您更改了某些設備、記憶體大小等,這允許您返回到拍攝快照時的確切設置。現在在該
disks
部分中,您可以看到實際快照的磁碟設備。您希望創建一個磁碟映像,但對於qcow2
文件,它的工作方式略有不同。
qcow2
實現寫時復製圖像。在像這樣的其他寫時復製文件系統上,btrfs
這意味著文件不會在原地更改,而是在修改時將它們的副本與更改一起儲存在磁碟上的其他位置。對於
qcow2
快照,圖像始終在原地修改,但如果已創建快照,則在該qcow2
文件中,每當在快照之後修改文件時,將保存應用修改之前的副本以用於快照。這意味著圖像和快照都在qcow2
文件中。qcow2
(可以在此處找到有關文件格式和快照如何工作的更深入的說明。
qemu-img
您可以使用該命令列出這些磁碟快照並與之互動(列出、恢復、創建、刪除) 。例如,您可以像這樣列出快照:# qemu-img snapshot -l /var/lib/libvirt/qemu/centos7-server.qcow2 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 your-snapshot 0 2019-09-02 22:15:58 00:00:00.000
這裡的 TAG 應該與您的快照 XML 文件的名稱和
name
XML 本身內部的條目相匹配,這就是知道它應該恢復到圖像libvirt
中的哪個快照的方式。qcow2