virsh命令简述减少幻想,减少欲望,多读书,多实践
最后更新于2026-07-23 22:46:09
最后更新于2026-07-23 22:46:09
1. 安装kvm
yum install -y qemu-kvm libvirt virt-install
2. 安装kvm虚拟机
virt-install \
--virt-type=kvm \
--name=ifcos1 \
--vcpus=2 \
--memory=8192 \
--cdrom=/home/iso/IFCOS3.1.1-x86_64-20180104162508.iso \
--disk path=/home/vms/ifcos1.qcow2,size=80,format=qcow2 \
--os-type=linux \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
#--extra-args='console=ttyS0'
3. 配置网桥连接模式
# 添加br0虚拟机网桥
brctl addbr br0
# 增加配置文件:/etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NA_CONTROLLED=no
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.211.50
NETMASK=255.255.255.0
GATEWAY=192.168.211.254
DNS1=218.30.19.40
DNS2=61.134.1.4
# 修改物理网卡配置:/etc/sysconfig/network-scripts/ifcfg-p4p1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NM_CONTROLLED=no
NAME=p4p1
UUID=eb99acab-4332-4848-b031-3dcab72d3231
DEVICE=p4p1
ONBOOT=yes
BRIDGE=br0
# 在 /etc/libvirt/qemu/ifcos.xml修改网络配置
<interface type='bridge'>
<mac address='52:54:00:e4:ec:55'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
# 应用配置
virsh define /etc/libvirt/qemu/ifcos.xml
4. 配置内存
virsh shutdown debian
virsh setmaxmem debian 15728640
virsh start debian
virsh setmem debian 10000000
virsh dominfo debian
5. 配置CPU
virsh setvcpus debian --maximum 4 --config
virsh vcpucount debian
virsh setvcpus debian --count 4 --config
6. 修改虚拟机名称
cd /etc/libvirt/qemu
virsh dumpxml ifcos58 > ifcos.xml
virsh snapshot-dumpxml ifcos58 ifcos_211.58 > ifcos_211.58.xml
virsh snapshot-dumpxml ifcos58 sicap_3.2.8base_40424 > sicap_3.2.8base_40424.xml
virsh snapshot-dumpxml ifcos58 sicap_3.3.1_200709 > sicap_3.3.1_200709.xml
mv /home/vms/ifcos58.qcow2 /home/vms/ifcos.qcow2
sed -i 's/ifcos58/ifcos/g' /etc/libvirt/qemu/ifcos.xml /etc/libvirt/qemu/sicap_3.2.8base_40424.xml /etc/libvirt/qemu/sicap_3.3.1_200709.xml
virsh snapshot-delete ifcos58 sicap_3.3.1_200709
virsh undefine ifcos58
virsh define /etc/libvirt/qemu/ifcos.xml
virsh snapshot-create --redefine ifcos ifcos_211.58.xml
virsh snapshot-create --redefine ifcos sicap_3.2.8base_40424.xml
virsh snapshot-create --redefine ifcos sicap_3.3.1_200709.xml
7. 添加网卡
virsh domiflist ifcos
virsh attach-interface ifcos --type bridge --source br0
virsh dumpxml ifcos >/etc/libvirt/qemu/ifcos.xml
virsh define /etc/libvirt/qemu/ifcos.xml
8. 删除virbr0虚拟网卡
#查看是否有连接相关虚拟设备
virsh net-list
virsh net-destroy default
virsh net-undefine default
#备份kvm虚拟机
qemu-img convert -c -O qcow2 centos7.qcow2 test.qcow2
#虚拟机添加磁盘
qemu-img create -f qcow2 kylin_sicap.qcow2 100G
virsh destroy kylin
virsh edit kylin
#修改磁盘配置,增加以下内容
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/vms/kylin_sicap.qcow2'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
</disk>
virsh start kylin
#显示快照的继承关系
virsh snapshot-list ifcos --tree
9. 常用命令
# 查看虚拟机状态
virsh list --all
# 启动虚拟机
virsh start debian
# 关闭虚拟机
virsh shutdown debian
# 强制停止虚拟机(断电)
virsh destroy debian
# 删除虚拟机
virsh undefine debian
# 控制台连接虚拟机
virsh console debian
# 实时监控
virsh dominfo debian
# 动态扩容
virsh setvcpus debian 2 --live
# 内存热插拔
virsh setmem debian 2G --live
# 灾难恢复
virsh restore saved_state.file
# 性能分析
virsh domstats --cpu-total debian
# 创建内部快照
virsh snapshot-create-as debian debian_snap
# 删除内部快照
virsh snapshot-delete debian debian_snap
# 恢复内部快照
virsh snapshot-revert debian debian_snap
# 查看快照
virsh snapshot-list debian
# 查找上级快照
virsh snapshot-parent debian debian_snap
10. 创建外部快照
外部快照必须加上 --disk-only,只能保存磁盘状态
virsh snapshot-create-as --domain 虚拟机名 --name 快照名称 --disk-only --external
参数说明: --disk-only:只做磁盘快照,不保存内存 --external:外部快照,生成独立差分 qcow2,原盘变为 backing 底层 --name snap_A:自定义快照名
指定快照文件存放路径(常用)
virsh snapshot-create-as \
--domain test-vm \
--name snap_A \
--disk-only \
--diskspec vda,snapshot=external,file=/var/lib/libvirt/images/test-vm-snapA.qcow2
virsh snapshot-create-as uos-server sicap260617 "安徽邮政升级包" --disk-only --atomic --diskspec vda,snapshot=external,file=/home/vms/uos-server.sicap260617
vda:虚拟机磁盘设备名 file=xxx:自定义快照差分文件路径
11. 创建差分盘
查看快照详细XML,拿到快照A磁盘文件路径
virsh snapshot-dumpxml 虚拟机名 --snapshotname 快照A名称
找到这一行,复制file=后的完整路径:
<source file="/xxx/xxx-snapA.qcow2"/>
以快照 A 为后端,新建空白差分盘
qemu-img create -f qcow2 -b /路径/快照A.qcow2 /路径/new-test.qcow2
然后将生成的差分盘路径写到source file中,如果不用了,删除这个差分盘。
12. 外部快照完整删除方案
# 关闭虚拟机
virsh destroy 虚拟机名
# 查看当前正在读写的 overlay 增量文件
virsh domblklist 虚拟机名
# 输出 vda /xxx/vm-active.qcow2 这个就是存放你操作改动的文件
# 删除当前增量(所有操作全部丢弃)
rm -f /xxx/vm-active.qcow2
# 以快照 A 为底层,新建空白差分盘(回到纯净快照 A)
qemu-img create -f qcow2 -b /快照A完整路径 /xxx/vm-active.qcow2
# -b 父盘路径,-F 指定父盘格式(防报错)
qemu-img create -f qcow2 -b /home/vms/uos-server.uos_init_211.sicap241122 -F qcow2 /home/vms/uos-server.active
# 开机
virsh start 虚拟机名
# 配套清理 libvirt 快照列表
如果创建快照时带了--external元数据,列表里还残留 snapA 记录,只删元数据不删磁盘文件
virsh snapshot-delete 虚拟机名 --snapshotname snap_A --metadata
# 保留虚拟机所有数据,合并删除快照
13. 合并快照
如果你创建了链式快照 base ← snapA ← snapB ← active,想删掉中间snapA且保留全部数据,用blockcommit在线合并,无需关机。 示例:删除快照 A,把 A 的数据合并到底层 base
# 查看当前磁盘
virsh domblklist 虚拟机名
# 完整链查看
qemu-img info --backing-chain /当前active磁盘路径
13.1 执行在线合并(vda 为磁盘设备)
virsh blockcommit 虚拟机名 vda \
--base=/base.qcow2 \
--top=/snapA.qcow2 \
--active --verbose --pivot
参数说明:
--base:底层镜像
--top:要删除的快照文件
--active --pivot:合并完成后自动切换磁盘指向,虚拟机不停机
合并完成确认虚拟机正常运行后,删除无用快照文件
rm -f /snapA.qcow2
清理 libvirt 快照元数据
virsh snapshot-delete 虚拟机名 --snapshotname snap_A --metadata
13.2 关机离线合并(虚拟机停机更稳定)
# 关机
virsh destroy 虚拟机名
# 将snapA所有数据提交到底层base
qemu-img commit /snapA.qcow2
# 修改上层快照backing指向base,解除依赖
qemu-img rebase -u -b /base.qcow2 /snapB.qcow2
# 删除快照A文件
rm -f /snapA.qcow2
- 本文作者:畄月寒
- 本文链接:https://testpoo.github.io/virsh命令简述.html
- 版权声明:本铺所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!