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分别用于测试虚拟机性能的,我感觉不是很需要,就没写,需要的时候再看这两个工具就好。