侧边栏壁纸
博主头像
蔚然小站博主等级

未来会有的,不要辜负了梦想

  • 累计撰写 38 篇文章
  • 累计创建 15 个标签
  • 累计收到 21 条评论

目 录CONTENT

文章目录

virsh使用记录

皮蛋熊
2023-08-26 / 0 评论 / 0 点赞 / 199 阅读 / 11019 字
温馨提示:
本文最后更新于 2023-08-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

先安装必要软件包:

apt-get install qemu qemu-system mdevctl qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager git vim 

检查virsh是否工作:

root@zx-dev:~# sudo virsh list --all
 Id   Name   State
--------------------

默认kvm的虚拟机配置文件都保存在 /etc/libvirt/qemu 目录中。

先进入 /etc/libvirt/qemu 目录中,创建硬盘qemu-img create -f qcow2 /kvm/images/c1.qcow2 200G,没有这个目录就自行创建一个。

通过virsh,来操作虚拟机:

  1. virsh define vm0.xml # 导入虚拟机配置
  2. virsh create vm0.xml # 导入虚拟机配置并启动
  3. virsh start vm0 # 开启vm0
  4. virsh list --all # 显示所有虚拟机状态
  5. virsh destroy vm0 # 销毁虚拟机
  6. virsh undefine vm0 # 删除虚拟机配置
  7. vish dumpxml vm0 # 显示虚拟机xml配置

查询支持操作系统:

sudo apt install libosinfo-bin
osinfo-query os

virsh创建网络:

sudo virsh net-list  # 查看网络
cd /etc/libvirt/qemu/networks
sudo virsh net-create default.xml # 通过default.xml创建网络
sudo virsh net-autostart default # 设置网卡自动启动

先创建磁盘大小:

qemu-img create -f qcow2 win10.qcow2 200G

创建虚拟机:

sudo virt-install \
    --connect=qemu:///system \
    --virt-type kvm \
    --name=win10 \
    --ram=4096 \
    --vcpus=2 \
    --os-type=win10 \
    --accelerate \
    --cdrom=/home/jet/iso/win10_21h2.iso \
    --disk path=/home/jet/iso/virtio-win-0.1.225.iso,device=cdrom \
    --disk path=/home/jet/iso/win10.qcow2,bus=virtio \
    --network network=default \
    --graphics vnc,listen=0.0.0.0,password=123456,port=5901 --noautoconsole \
    --force

正常vnc界面进入安装系统,点击重启后vnc连不上,执行以下命令:

virsh --connect qemu:///system start win10    

正常完成后进入关机流程后,可以通过如下命令看到虚拟机(需要以root权限执行,普通权限看不到):

❯ sudo virsh list --all                                                                                 
 Id   Name    State
------------------------
 -    win10   shut off

再次启动虚拟机:

virsh --connect qemu:///system start win10
# 或者下面这个
sudo virsh start win10

关闭虚拟机:

sudo virsh destroy win10

快照

创建快照:

 sudo virsh snapshot-create-as win10 --name "first" --description "init system"

查看快照:

❯ sudo virsh snapshot-list win10
 Name         Creation Time               State
---------------------------------------------------
 first init   2022-11-29 12:47:52 +0800   shutoff

删除快照:

sudo virsh snapshot-delete --domain win10 --snapshotname 1669697039 

覆盖快照:

sudo virsh snapshot-revert --domain win10 --snapshotname "first init"  

删除虚拟机(需要先删除那个虚拟机的所有快照):

sudo virsh undefine win10 

优化系统占用

使用DISM++进行,和关闭一些服务,可以在网上找到一些资料进行确定。

创建template

在创建好了base虚拟机的情况下,接下来就可以创建模板了。

安装:

sudo apt install libguestfs-tools

copy 一份虚拟机作为模板:

cp /home/jet/iso/win10.qcow2 /home/jet/iso/win10_21h2_tpl.qcow2

处理镜像:

virt-sysprep -a /home/jet/iso/win10_21h2_tpl.qcow2

获取配置文件:

sudo virsh dumpxml --domain win10 > /home/jet/iso/win10_21h2_tpl.xml

修改新模板配置文件:(第一部分修改source文件地址)

<disk type='file' device='disk'>
    <driver name='qemu' type='qcow2'/>
    <source file='/home/jet/iso/win10_21h2_tpl.qcow2'/>
    <target dev='vda' bus='virtio'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>

删除新模板文件中的部分配置:

<name>win10</name>
<uuid>47cdbba1-3551-407d-a03c-90d2a60bfa72</uuid>
<mac address='52:54:00:83:80:89'/>
<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-win10/org.qemu.guest_agent.0'/>

删除新模板文件中的不要的配置,比如disk等选项。

通过模板创建虚拟机:

sudo virt-clone \
  --original-xml /home/jet/iso/win10_21h2_tpl.xml \
  --name vm1 \
  --file /home/jet/iso/vm1.qcow2

如果要使用thin模式(base template,copy on write),添加 --preserve-data,同时vm2.qcow2也需要处理下。

qemu-img create -f qcow2 -b /home/jet/iso/win10_21h2_tpl.qcow2 -F qcow2 /home/jet/iso/vm2.qcow2

还可以进一步修改磁盘大小:

qemu-img resize /home/jet/iso/vm2.qcow2 +50G

创建新的虚拟机:

sudo virt-clone \
  --original-xml /home/jet/iso/win10_21h2_tpl.xml \
  --name vm2 \
  --file /home/jet/iso/vm2.qcow2 \
  --preserve-data 

修改某些配置文件: 修改vnc port:

sudo virsh edit vm1

配置文件:

<graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0'>

也可以改为如下配置:

<graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0' passwd='123456'>
	<listen type='address' address='0.0.0.0'/>
</graphics>

哈哈哈哈,没想到,vnc是可以设置密码的,里面的autoport不太好用,我都不知道映射到哪个口了,还是自己指定会合适点。

添加mdev设备(修改其中的UUID即可):

    <hostdev mode='subsystem' type='mdev' managed='yes' model='vfio-pci' display='off'>
      <source>
        <address uuid='889d09aa-b35b-4aba-bec6-ad581bc77401'/>
      </source>
      <alias name='hostdev0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </hostdev>

2.总的操作(thin method)

2.1 创建template虚拟机

先准备一个win10安装文件iso,存放在如下目录:/home/jet/iso/win10_21h2.iso 再准备一个virtio驱动iso,存放在如下目录:/home/jet/iso/virtio-win-0.1.225.iso`

创建默认网络:

sudo virsh net-list  # 查看网络
cd /etc/libvirt/qemu/networks
sudo virsh net-create default.xml # 通过default.xml创建网络
sudo virsh net-autostart default # 设置网卡自动启动
qemu-img create -f qcow2 /home/jet/kvm/win10.qcow2 200G

创建虚拟机(vnc端口密码需要自己修改)(有 --connect=qemu:///system 就不需要sudo了,这里全部加上了):

sudo virt-install \
    --connect=qemu:///system \
    --virt-type kvm \
    --name=win10 \
    --ram=4096 \
    --vcpus=2 \
    --os-type=win10 \
    --accelerate \
    --cdrom=/home/jet/kvm/win10.qcow2 \
    --disk path=/home/jet/iso/virtio-win-0.1.225.iso,device=cdrom \
    --disk path=/home/jet/iso/win10.qcow2,bus=virtio \
    --network network=default \
    --graphics vnc,listen=0.0.0.0,password=123456,port=5901 --noautoconsole \
    --force

······ 进入windows安装环节 ······

创建快照:

sudo virsh snapshot-create-as win10 --name "first" --description "init system"

2.2 基于template虚拟机

设置虚拟机自动启动:

# 开启虚拟机自动启动
virsh autostart vm1

# 关闭虚拟机自动启动
virsh autostart --disable vm1

参考文献

  1. KVM VirSH Command
  2. 虚拟化技术之kvm管理工具virsh常用基础命令(一)
  3. 利用virsh和xml文件创建虚拟
  4. Michael Abrahamsen – How to create a KVM template on Arch Linux
  5. [Linux KVM] Template & Snapshot 的運用
  6. kvm系列2:通过模板快速创建虚拟机
  7. 使用virt-install手动创建qcow2镜像并安装ISO
  8. kvm系列2:通过模板快速创建虚拟机

问题排查

  1. 机器上出现 virsh capcabilities中guest为空或者项目很少,且通过systemctl status libvirtd命令发现有相关permission denied错误输出:

该问题极有可能是selinux带来的错误问题,参考如何在Ubuntu 20.04 Linux上禁用/启用SELinux-之路教程 (onitroad.com),将selinux安装,并设置为disable。

更新:安装selinux后搞挂了,得接上显示器又没发现问题,是正常启动的。 不过发现了libvirtd启动的时候会去找 /mnt/2t/vm /mnt/2t/iso 两个目录,这两个目录挂载的优先级比较靠后,所以将system restart libvirtd命令放在这个之后。

编译qemu的时候需要带一些选项: ./configure --enable-kvm --target-list=x86_64-softmmu --enable-spice 从源码编译安装QEMU以及如何创建QEMU虚拟机_Jeremy_ku的博客-CSDN博客_编译安装qemu 但是安装spice的时候会说找不到库,可以先试试下面两句:

sudo apt install libspice-protocol-dev
sudo apt install libspice-server-dev

如果还说缺libspice-protocol的库,可以安装下面的库:

wget http://spice-space.org/download/releases/spice-protocol-0.14.0.tar.bz2
tar -xjf spice-protocol-0.14.0.tar.bz2
cd spice-protocol*
./configure
make
sudo make install
  1. qemu命令行启动程序是可以正常开启调试模式,windbg连接也正常,但是使用libvirt却无法成功,KDNet始终无法开启。 Using WinDbg Over KDNet on QEMU-KVM – OSR libvirt: QEMU/KVM/HVF hypervisor driver 需要在xml描述文件中的hyperv下添加 <vendor_id state='on' value='KVMKVMKVM'/> 。具体原因就在于上面引用链接1中描述的那样子,libvirt默认的xml下启动的虚拟机将会报告hypervisor ID为'Microsoft Hv',guest此时启用内核调试器指定KDNet会使用未记录的协议打开调试器链接,所以就导致了问题,qemu的开发者建议使用KVMKVMKVM,实际测试下来可以使用。
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区