virsh

snap

[lnks@kp920 ~]$ virsh list --all
 Id   Name                      State
------------------------------------------
 1    kylin-v10                 running
 -    chenlianghong             shut off

[lnks@kp920 ~]$ virsh dumpxml chenlianghong | grep "source file"
      <source file='/var/lib/libvirt/filesystems/chenglianghong.qcow2'/>
      <source file='/tmp/alpine-virt-3.22.2-aarch64.iso'/>
[lnks@kp920 ~]$ ls -lah /var/lib/libvirt/filesystems/chenglianghong.qcow2
-rw-r--r-- 1 root root 157M Jan 14 10:56 /var/lib/libvirt/filesystems/chenglianghong.qcow2
[lnks@kp920 ~]$ sudo qemu-img snapshot -c "afterInstall" /var/lib/libvirt/filesystems/chenglianghong.qcow2
[sudo] password for lnks: 
[lnks@kp920 ~]$ qemu-img snapshot -l /var/lib/libvirt/filesystems/chenglianghong.qcow2
Snapshot list:
ID        TAG               VM SIZE                DATE     VM CLOCK     ICOUNT
1         afterInstall          0 B 2026-01-14 11:04:57 00:00:00.000          0

Use snap

# 以后想回滚(危险!会覆盖当前状态)
qemu-img snapshot -a "afterInstall" /var/lib/libvirt/filesystems/chenglianghong.qcow2
# 回滚后重新启动虚拟机即可
# 优点:快照速度极快,空间效率高,不会损坏 UEFI 变量
# 缺点:必须关机 + 手动管理(建议自己建个小脚本或别名)

# 连快照一起备份
qemu-img convert -O qcow2 -c chenglianghong.qcow2 chenlianghong-back-compressed.qcow2
# 验证备份文件的快照是否正常
qemu-img snapshot -l chenlianghong-back-compressed.qcow2
# 查看备份文件的快照详细信息
qemu-img info --output=json backup.qcow2 | grep -A 10 snapshots

Backup virsh machine

# virsh dumpxml --inactive chenlianghong > ~/vm-backups/chenlianghong.virsh-$(date +%Y%m%d).xml
[lnks@kp920 virsh]$ virsh dumpxml --inactive chenlianghong > chenlianghong.virsh-$(date +%Y%m%d%H).xml
[lnks@kp920 virsh]$ virsh domblklist chenlianghong
 Target   Source
-------------------------------------------------------------
 sda      /var/lib/libvirt/filesystems/chenglianghong.qcow2
 sdb      /tmp/alpine-virt-3.22.2-aarch64.iso

[lnks@kp920 virsh]$ cp --sparse=always /var/lib/libvirt/filesystems/chenglianghong.qcow2 chenlianghong.virsh-$(date +%Y%m%d%H).qcow2
[lnks@kp920 virsh]$ ls -lah
total 139M
drwxr-xr-x  2 lnks lnks 4.0K Jan 14 11:21 .
drwxr-xr-x. 8 lnks lnks 4.0K Jan 14 11:17 ..
-rw-r--r--  1 lnks lnks 157M Jan 14 11:21 chenlianghong.virsh-20260114.qcow2
-rw-r--r--  1 lnks lnks 4.8K Jan 14 11:18 chenlianghong.virsh-20260114.xml
[lnks@kp920 virsh]$ 

ReStore virsh machine

[lnks@kp920 sda]$ sudo mv chenlianghong.virsh-20260114.qcow2 /var/lib/libvirt/filesystems/chenlianghong.qcow2
[lnks@kp920 sda]$ sudo ls -lah /var/lib/libvirt/filesystems/
total 230G
drwx--x--x. 2 root root 4.0K Jan 14 13:04 .
drwxr-xr-x. 9 root root 4.0K Dec  9 19:36 ..
-rw-r--r--  1 root root  66G Jan 14 13:02 chenglianghong.qcow2
-rw-r--r--  1 root root 157M Jan 14 13:02 chenlianghong.qcow2
[lnks@kp920 sda]$ virsh edit chenlianghong
Domain chenlianghong XML configuration edited.

sudo cp --sparse=always /sda/lianghong/virsh/chenlianghong.virsh-20260114.qcow2 /var/lib/libvirt/filesystems/
# 如果磁盘路径变了,先编辑 XML 文件,把 <source file='...'> 改成新路径
# virsh define ~/vm-backups/某个备份.xml
# 把指定的 XML 文件注册/定义到 libvirt 系统中,成为一个新的(或覆盖现有的)持久化虚拟机
virsh define /sda/lianghong/virsh/chenlianghong.virsh-20260114.xml
virsh start myvm
# 最可靠的做法
# virsh dumpxml --inactive 你的虚拟机名 > ~/vm-backups/你的虚拟机名-$(date +%Y%m%d).xml
virsh dumpxml --inactive chenlianghong > /sda/lianghong/virsh/chenlianghong.virsh-20260114.xml

Other

[lnks@kp920 sda]$ virsh shutdown chenlianghong
Domain chenlianghong is being shutdown

[lnks@kp920 sda]$ virsh list --all --persistent
 Id   Name                      State
------------------------------------------
 1    kylin-v10                 running
 -    chenlianghong             shut off
[lnks@kp920 sda]$ sudo ls -lah /etc/libvirt/qemu/
[sudo] password for lnks: 
total 152K
drwx------. 4 root root 4.0K Jan 14 10:45 .
drwx------. 6 root root 4.0K Jan  7 17:37 ..
drwxr-xr-x. 2 root root 4.0K Jul 25 22:53 autostart
-rw-------  1 root root 5.0K Jan 14 10:45 chenlianghong.xml
-rw-------  1 root root 4.1K Jan 13 20:46 kylin-v10.xml
[lnks@kp920 sda]$ virsh edit chenlianghong
Domain chenlianghong XML configuration edited.
[lnks@kp920 sda]$ virsh start chenlianghong
Domain chenlianghong started

[lnks@kp920 sda]$ virsh list --all --persistent
 Id   Name                      State
------------------------------------------
 1    kylin-v10                 running
 42   chenlianghong             running

[lnks@kp920 sda]$ virsh shutdown chenlianghong
Domain chenlianghong is being shutdown

[lnks@kp920 lianghong]$ sudo qemu-img snapshot -l /var/lib/libvirt/filesystems/chenlianghong.qcow2
Snapshot list:
ID        TAG               VM SIZE                DATE     VM CLOCK     ICOUNT
1         afterInstall          0 B 2026-01-14 11:04:57 00:00:00.000          0
[lnks@kp920 lianghong]$ sudo qemu-img snapshot -c "add-user-docker" /var/lib/libvirt/filesystems/chenlianghong.qcow2
[lnks@kp920 lianghong]$ sudo qemu-img snapshot -l /var/lib/libvirt/filesystems/chenlianghong.qcow2
Snapshot list:
ID        TAG               VM SIZE                DATE     VM CLOCK     ICOUNT
1         afterInstall          0 B 2026-01-14 11:04:57 00:00:00.000          0
2         add-user-docker       0 B 2026-01-14 13:22:30 00:00:00.000          0
[lnks@kp920 lianghong]$ virsh domblklist chenlianghong
 Target   Source
------------------------------------------------------------
 sda      /var/lib/libvirt/filesystems/chenlianghong.qcow2
 sdb      -

[lnks@kp920 lianghong]$ virsh dumpxml --inactive chenlianghong > chenlianghong.virsh-$(date +%Y%m%d%H).xml
[lnks@kp920 lianghong]$ cp --sparse=always /var/lib/libvirt/filesystems/chenlianghong.qcow2 chenlianghong.virsh-$(date +%Y%m%d%H).qcow2
[lnks@kp920 lianghong]$ ls -lah
total 386M
drwxr-xr-x  2 lnks lnks 4.0K Jan 14 13:24 .
drwxr-xr-x 13 lnks lnks 4.0K Jan 14 13:17 ..
-rw-r--r--  1 lnks lnks 419M Jan 14 13:24 chenlianghong.virsh-2026011413.qcow2
-rw-r--r--  1 lnks lnks 4.7K Jan 14 13:24 chenlianghong.virsh-2026011413.xml

Just Quick

virsh shutdown chenlianghong
virsh list --all --persistent
sudo qemu-img snapshot -l /var/lib/libvirt/filesystems/chenlianghong.qcow2
# 创建快照
sudo qemu-img snapshot -c "deploy sync customer" /var/lib/libvirt/filesystems/chenlianghong.qcow2
# 使用ID恢复快照(例如恢复ID为1的快照)
sudo qemu-img snapshot -a 1 /var/lib/libvirt/filesystems/chenlianghong.qcow2
# 使用快照名称恢复(例如恢复"afterInstall"快照)
sudo qemu-img snapshot -a afterInstall /var/lib/libvirt/filesystems/chenlianghong.qcow2
virsh start chenlianghong