linux看cpu是否支持和kvm是否加载 链接到标题

看cpu支不支持虚拟化 链接到标题

lscpu | grep vmx # intel 用这个 
lscpu | grep svm # amd 用这个

lsmod | grep kvm # 看kvm是否加载
modeprone kvm # 加载kvm

安装虚拟化软件 链接到标题

apt/yum/pacman qemu # 虚拟外围设备
apt/yum/pacman dnsmasq # dns服务器,虚拟网络需要
apt/yum/pacman libvirt # 虚拟化服务
systemctl start libvirtd.socket # 启动虚拟化服务

virsh 使用 看虚拟化能力 链接到标题

virsh是一个整合好的,用于启动配置虚拟化的工具包

# 检查本机的相关虚拟化能力
virsh capabilities | less # 具体参数是什么意思可以看鸟哥的网站
# 检查支持的 q35 芯片组,内部硬件仿真可以是什么样
virsh domcapabilities --machine q35 --arch x86_64 # 我是不懂为什么鸟哥书上要搞个machine,其实我感觉看一个架构x86_64就好
#结果中重要是看virtio是否可行,一般都行

推荐配置目录 链接到标题

/kvm/xml:主要放置各种 XML 规范的设置档,包括网络、虚拟机的设置等等 /kvm/iso:主要放置来自网络上的各种 ISO 映像档,例如 9.0, 9.2 的 RockyLinux 安装光盘档 /kvm/img:虚拟磁盘的放置目录,基本上,占用的文件系统容量最大!

创建虚拟磁盘 链接到标题

# 创建一个 30G 的虚拟磁盘,名为 demo1.img
mkdir /kvm/img
cd /kvm/img
qemu-img create -f qcow2 -o cluster_size=2M demo1.img 30G

#raw:预先给予固定的文件容量,如上所述,你得要创建一个 100G 的文件才行。
#qcow2:一种 qemu copy on write 的虚拟磁盘文件格式,可以指定虚拟磁盘的容量,但是该容量占用的实际磁盘空间, 则是用多少算多少。

创建具有 NAT 功能的桥接界面 链接到标题

# 创建一个名为 templan 的网络界面
[root@cloud img]# mkdir /kvm/xml
[root@cloud img]# cd /kvm/xml
[root@cloud xml]# vim templan.xml
<network>
  <name>templan</name>
  <forward mode='nat'/>
  <bridge name='templan' stp='on' delay='0'/>
  <mac address='52:54:00:00:ff:01'/>
  <ip address='192.168.10.254' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.10.1' end='192.168.10.100'/>
    </dhcp>
  </ip>
</network>
# virsh 管理网络的基本指令
[root@cloud xml]# virsh net-list
[root@cloud xml]# virsh net-create  file.xml  <==启动网络设置
[root@cloud xml]# virsh net-destroy file.xml  <==终止网络设置

# 实际创建桥接网络界面,并且观察创建后的网络参数
[root@cloud xml]# virsh net-create templan.xml
Network templan created from templan.xml

[root@cloud xml]# virsh net-list
 Name      State    Autostart   Persistent
--------------------------------------------
 templan   active   no          no

[root@cloud xml]# ip addr show

虚拟机硬件设置档 (XML 格式) 链接到标题

# 安装 virt-install
[root@cloud ~]# yum -y install virt-install

# 开始使用 virt-install 规划一个用户端硬件资源
[root@cloud ~]# cd /kvm/xml
[root@cloud xml]# virt-install \
> --name demo1 --cpu host-passthrough,cache.mode=passthrough --vcpu 4 \
> --memory 2048 --memballoon virtio --machine q35 \
> --boot uefi,loader.type=pflash,nvram=/kvm/xml/demo1.uefi.fd,loader_secure=no \
> --controller virtio-scsi \
> --disk /kvm/img/demo1.img,cache=writeback,io=threads,device=disk,bus=virtio \
> --network network=templan,model=virtio \
> --graphics vnc,port=5911,listen=0.0.0.0,password=rocky9 \
> --cdrom /kvm/iso/Rocky-9.0-x86_64-minimal.iso --video virtio \
> --dry-run --print-xml > /kvm/xml/demo1.xml
# 详细的参数请参考 man virt-install。上述指令运行完毕,产生 demo1.xml 文件!

上面全是抄的鸟哥的

我的配置:

#!/bin/bash
isopath=/kvm/iso
imgpath=/kvm/img
xmlpath=/kvm/xml

read -p "host_name>:" hostname

virt-install \
 --name $hostname --cpu host-passthrough,cache.mode=passthrough --vcpu 4 \
 --memory 2048 --memballoon virtio --machine q35 \
 --boot uefi,loader.type=pflash,nvram=/kvm/xml/${hostname}.uefi.fd,loader_secure=no \
 --controller virtio-scsi \
 --disk /kvm/img/${hostname}.img,cache=writeback,io=threads,device=disk,bus=virtio \
 --network network=templan,model=virtio \
 --graphics vnc,port=5911,listen=0.0.0.0,password=rocky9 \
 --cdrom /kvm/iso/Rocky-10.1-x86_64-minimal.iso --video virtio \
 --dry-run --print-xml > /kvm/xml/${hostname}.xml

这里需要注意nvram,disk,network的配置 disk和network中,用鸟哥的很好使用
但是这里的nvram可能不太一样,应该是因为我用的arch才导致的
这个uefi.fd需要使用/usr/share/ovmf/x64/OVMF_VARS.4m.fd 用cp搞一个过来就好
后面配置中的 /usr/share/edk2/ovmf/OVMF_CODE.secboot.fd 这个改成相同目录下的就好

开始使用 链接到标题

virsh create /kvm/xml/first.xml #启动虚拟机,有意思的是好像没有start这个概念
ss -tuamp # 看看虚拟机启动的vnc端口,这个vnc某种意义上是一直需要的
virsh list
virsh dominfo first
virsh dommemstat first
virsh domblklist first
virsh change-media first /kvm/iso/Rocky-10.1-x86_64-minimal.iso --eject # 这个还满考验时机的,要在启动的时候弹出,要不然容易出问题
# 在用iso安装好系统后,可以永远删除iso了
vim /kvm/xml/first.xml
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw"/>
      <source file=""/>
      <target dev="sda" bus="sata"/>
      <readonly/>
    </disk>
virsh destroy first # 出问题时使用,你eject的时机不对会需要的

虚拟机中的初始配置 链接到标题

我没有配置,docker的iptable规则和这些好像是冲突了,导致虚拟机连接不到外网,我又不懂iptable,索性没有弄yum方面的了

先用nmap或着arp看看虚拟机的ip是多少

arp -n
nmap -sP 192.168.10.0/24 # templan里配置的子网

然后用ssh连接就好

虚拟机的性能调整 链接到标题

虚拟机的复制其实还蛮简单的,就是配置复制一份xml,img(这个是磁盘不是iso啊),然后改改xml就很好

复制img,就是虚拟磁盘 链接到标题

其实直接用cp fitst.img second.img就可以,但是教程中用了一个overlay/差分盘。

qemu-img create -f qcow2 test1.img -F qcow2 -o backing_file=/kvm/img/first.img # 注意,这个backing_file尽量要弄成只读的了,其他的差分盘都是依靠他的了,有点类似docker的层
qemu-img info second.img

xml修改 链接到标题

我这里的是杂混的不能直接用的,主要是提醒需要改

  • name
  • nvram
  • disk source
  • mac
  • grahpics
vim test1.xml
  2   <name>test1</name>
  9     <nvram>/kvm/xml/test1.uefi.fd</nvram>
 36       <source file="/kvm/img/test1.img"/>
 41       <source file=""/>
 63       <mac address="52:54:00:ed:63:aa"/>
   <graphics type="vnc" port="5911" listen="0.0.0.0" passwd="rocky9"/>
      <image compression='auto_glz' />
      <jpeg compression='auto' />
      <zlib compression='auto' />
      <playback compression='on' />
      <streaming mode='filter' />
    </graphics>

cpu线程绑定,这里具体的概念看鸟哥原书,问问ai吧,现在ai太猛了,主要就是要注意xml绑定的是线程不是核心就好

virsh capabilities | grep siblings # 用来看几核几线程以及线程和核的绑定状态
cat /proc/cpuinfo | egrep '^processor|^core id' # 同上

# 绑定配置
vim /kvm/xml/demo1.xml
  <vcpu>4</vcpu>
  <vcpu placement='static' cpuset='1-5,7-11'>4</vcpu>

其他 链接到标题

还有用iperf3和fio分别用于测试虚拟机性能的,我感觉不是很需要,就没写,需要的时候再看这两个工具就好。