KVM
参考文章:
朱双印的博客
检查是否支持KVM
# ubuntu检查
apt install cpu-checker -y
kvm-ok
lscpu | grep -E 'vmx|svm'VMware的嵌套虚拟化在 处理器 -> 虚拟化引擎 -> 虚拟化Intel VT-x/EPT 或 AMD-V/RVI中开启
但是VMware的虚拟化似乎不能和dockerWSL共存
KVM使用
示例管理
虚拟机创建
创建新的虚拟机
完全虚拟化
# 全虚拟化, 纯软件模拟硬件设备
virt-install \
--name=kvm2_centos7 \ # 虚拟机名称
--vcpus=2 \ # 分配cpu核心数
--memory=2048 \ # 设置虚拟机内存
--location=/data/iso/CentOS-7-x86_64-Everything-2009.iso \ # 镜像文件位置 貌似cdrom才是指定镜像位置的命令?
--disk path=/var/lib/libvirt/images/kvm2_centos7.qcow2 \ # 虚拟机磁盘镜像
--network network=default \ # 指定kvm网络
--graphics none \ # 是否需要图形化安装界面
--extra-args='console=ttyS0'# 创建虚拟机指定内核启动参数, 此处为分配一个x终端半虚拟化
- 是否支持半虚拟化
# 半虚拟化, 虚拟机系统需支持virtio驱动
## 貌似是centos独有的?
lsmod | grep virtio
## 若CONFIG_VIRTIO_BLK和CONFIG_VIRTIO_NET的值均为m才可
grep -i virtio /boot/config-$(uname -r)- virtio创建
## 指定使用virtio
virt-install \
--name=kvm2_centos7 \ # 虚拟机名称
--vcpus=2 \ # 分配cpu核心数
--memory=2048 \ # 设置虚拟机内存
--location=/data/iso/CentOS-7-x86_64-Everything-2009.iso \ # 镜像文件位置
--disk path=/var/lib/libvirt/images/kvm2_centos7.qcow2,bus=virtio \ # 虚拟机磁盘镜像, 硬盘驱动使用virtio
--network network=default,model=virtio \ # 指定kvm网络, 网卡驱动virtio
--graphics none \ # 是否需要图形化安装界面
--extra-args='console=ttyS0'# 创建虚拟机指定内核启动参数, 此处为分配一个x终端镜像导入虚拟机
# 导入镜像
virt-install --import \
--name kvm2import \ # 虚拟机名称
--vcpus=4 \ # 分配cpu核心数
--ram 4096 \ # 导入内存
--cpu host-model \ # 尚不明确
--disk path=/var/lib/libvirt/images/kvm2_centos7.qcow2,bus=virtio \ # 虚拟机磁盘镜像
--network network=default,model=virtio \
--nographics # 已向内核传入参数, 采用非图形化的console连入虚拟机
--noautoconsole # 不会自动连入控制台配置导入虚拟机
virsh define xml_path克隆生成虚拟机
virt-clone --auto-clone \
-o kvm1 \ # 克隆kvm1
-n kvm2 # 生成kvm2创建WIN10LTS虚拟机
理论操作(网上抄的)
virt-install \
--name WIN10LTS \ # 虚拟机命名
--memory 8192 \ # 虚拟机内存大小设置
--vcpus=4 \ # 虚拟机核心数分配
--cdrom=/kvm/ios/Windows.iso \ # 虚拟机安装镜像位置指定
--os-type=windows \ # 尚不明确作用
--os-variant=auto \ # 尚不明确作用
--disk /kvm/kvm-img/win10-01.qcow2,size=30,format=qcow2 \ # 指定硬盘位置
--disk /kvm/kvm-img/virtio-win-0.1.173_amd64.vfd,device=floppy \ # 指定windows驱动文件位置
--network bridge=br0,model=virtio \ # 创建网卡br0
--graphics vnc,listen=0.0.0.0 \ # 开启vnc, 可连接localhost:5900连接
--hvm \ # 尚不明确作用
--autostart \ # 自动重启
--virt-type kvm \ # 尚不明确作用
--noautoconsole \ # 尚不明确作用
--features kvm_hidden=on,hyperv_relaxed=on,hyperv_vapic=on,hyperv_spinlocks=on,hyperv_spinlocks_retries=8191 # 尚不明确作用实际操作(自己试了)
virt-install \
--name=WIN10LTS \
--vcpus=16 \
--memory=8192 \
--cdrom=/opt/KVM_file/ISO/win10LTS_x64_dvd.iso \
--disk path=/opt/KVM_file/disk/win10LTSdisk.qcow2 \
--network network=default \
--graphics vnc, listen=0.0.0.0,port=2500 \
--autostartKVM多核心问题
未遇到, 先保存
安装win10指定8核 实际只有2核
优化:
关闭虚拟机
修改/etc/libvirt/qemu下虚拟机配置文件xml,添加一个socket多个core
在<cpu>下添加下面内容
<topology sockets='2' cores='2' threads='2'/>
然后修改<vcpu placement='static'>8</vcpu>中的vcpu数量为8
启动虚拟机 虚拟机状态修改
virsh list --all # 查看所有虚拟机状态
virsh domstate kvm_name # 查看某一虚拟机状态
virsh start kvm_name # 启动虚拟机
virsh shutdown kvm_name # 关闭虚拟机
virsh suspended kvm_name # 挂起虚拟机
virsh resume kvm_name # 恢复虚拟机
virsh undefine kvm_name # 删除虚拟机
virsh undefine kvm_name -remove-all-storage # 彻底删除虚拟机, 包括磁盘, 配置文件虚拟机信息查询
# 一个虚拟机称为一个domain
virsh dominfo kvm_name # 查看虚拟机信息
## 虚拟机详细信息在 /etc/libvirt/qemu
virsh dumpxml kvm_name # 输出虚拟机配置
virsh domstate kvm_name # 查看虚拟机状态
virsh domblklist kvm_name # 查看虚拟机使用磁盘信息虚拟机信息修改
virsh autostart kvm_name # 自启虚拟机
virsh autostart --disable kvm_name # 取消自启虚拟机virsh domrename kvm_old_name kvm_new_name # 虚拟机改名
virt-clone --auto-clone -o kvm_src -n kvm_des # 复
virsh edit kvm_name # 编辑虚拟机设置 直接vim无效
制虚拟机
# 虚拟机详细信息在 /etc/libvirt/qemu
# cpu动态扩容, 只能加不能减
virsh edit kvm_name
<vcpu placement='auto' current="1">4</cpu> # 但是win10试了, 貌似不成功
virsh setvcpus kvm_name 4 --config # 貌似当修改配置不行, 还得再加句这个? 该句出处是静态分配cpu
# 内存动态扩容
virsh qemu-monitor-command kvm_name --hmp --cmd info balloon # 查看虚拟机当前内存
virsh qemu-monitor-command kvm_name --hmp --cmd ballon 512 # 限制虚拟机内存为512M快照管理
创建快照
virsh snapshot-create kvm_name # 生成快照 --atomic可保证磁盘创建快照成功
virsh snapshot-create-as --domain kvm_name --name shot_name --description # 生成快照并指定名字和备注删除快照
virsh snapshot-delete kvm_name shot_name # 删除快照 --children可删除子快照 --children-only 仅删除子快照查找快照
# 快照配置位置默认为/var/lib/libvirt/qemu/snapshot/
virsh snapshot-list kvm_name # 查看快照 --tree可看到快照层级关系
virsh snapshot-parent kvm_name shot_name # 查看快照父快照
virsh snapshot-info kvm_name shot_name # 查看快照简要信息
virsh snapshot-dumpxml kvm_name shot_name # 查看快照详细信息
virsh snapshot-current kvm_name # 查看虚拟机当前属于哪个快照恢复快照
virsh snapshot-revert kvm_name --snapshotname shot_name # 恢复虚拟机至某快照
virsh snapshot-revert kvm_name --current # 恢复至最近快照磁盘管理
创建磁盘
qemu-img create -f qcow2 disk.qcow2 50G # 创建一个qcow2格式的50G大小硬盘查询磁盘
qemu-img -h | grep Supported # 所有支持的格式
qemu-img info disk_name # 查看硬盘详细信息
qemu-img snapshot -l disk_file # 查看硬盘镜像信息扩容磁盘
# 需要磁盘没有镜像!
qemu-img resize disk_file +20G扩容根分区和拓展分区
emmm, Linux基础还不熟, 下次一定
网络管理
默认情况下, KVM会创建一个virbr0的默认nat网络虚拟交换机
所有默认网络的虚拟机会连接到virbr0交换机, 做一个snat访问外部资源
还剩部分网络实验, 没有需求, 暂时放着了
剩余
查看网口
brctl show # 展示交换机?修改网口
ifconfig vnet0 down # 模拟拔下虚拟机网线?(没试)