KVM架构:
| KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度; |
| 虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。 |
| 但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。 |
| 目前这个应用程序是 QEMU。 |
KVM的功能列表
| KVM 所支持的功能包括: |
| 支持CPU 和 memory 超分(Overcommit) |
| 支持半虚拟化I/O (virtio) |
| 支持热插拔 (cpu,块设备、网络设备等) |
| 支持对称多处理(Symmetric Multi-Processing,缩写为 SMP ) |
| 支持实时迁移(Live Migration) |
| 支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV) |
| 支持 内核同页合并 (KSM ) |
| 支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 ) |
KVM工具集合
| libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor |
| Virsh:基于 libvirt 的 命令行工具 (CLI) |
| Virt-Manager:基于 libvirt 的 GUI 工具 |
| virt-v2v:虚机格式迁移工具 |
| virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等 |
| sVirt:安全工具 |
该实验是用的VMware 12 pro
每行前面带 # 号的都是一条命令,没带 # 号的都是执行带 # 号的命令后出来的结果
开始安装
| 在VMware 12 pro 中装一个centos 7 |
| 在 “编辑虚拟机设置” --->"处理器"--->勾选"虚拟化 Intel VT-x/EPT 或 AMD-V/RVI" 和 "虚拟化CPU性能计数器" |
| --->开启虚拟机---> 执行 cat /proc/cpuinfo |egrep "vmx|svm" |
| |
| # yum -y install vim lrzsz |
| # cat /etc/centos-release |
| CentOS Linux release 7.4.1708 (Core) |
| # uname -a |
| Linux bogon 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux |
| |
| # mount /dev/sr0 /mnt/usb1 |
| # yum -y install qemu-kvm virt-manager python-virtinst qemu-kvm-tools libvirt virt-install libvirt-python |
| # lsmod |grep kvm |
| # reboot |
| # systemctl enable libvirtd |
| # systemctl start libvirtd |
| # systemctl status libvirtd |
| |
| # virsh -c qemu:///system list (或者virsh list) |
| |
| Id 名称 状态 |
| |
网卡配置
| # cd /etc/sysconfig/network-scripts |
| # cp ifcfg-ens33 ifcfg-br0 |
| # vim ifcfg-ens33 |
| DEVICE=ens33 |
| BRIDGE=br0 |
| ONBOOT=yes |
| |
| # vim ifcfg-br0 |
| TYPE=Bridge |
| BOOTPROTO=static |
| DEVICE=br0 |
| ONBOOT=yes |
| IPADDR=192.168.0.223 |
| NETMASK=255.255.255.0 |
| GATEWAY=192.168.0.2 |
| DNS1=219.xxx.xxx.xx |
| DNS2=219.xxx.xxx.xx # 我这里是用的centos做的网关服务器上的网,所以我这里写的是外网的dns |
开启转发功能并修改ulimit参数
| # echo 1 > /proc/sys/net/ipv4/ip_forward |
| # /bin/echo "* soft nproc 65500" >>/etc/security/limits.conf |
| # /bin/echo "* hard nproc 65500" >>/etc/security/limits.conf |
| # /bin/echo "* soft nofile 65500" >>/etc/security/limits.conf |
| # /bin/echo "* hard nofile 65500" >>/etc/security/limits.conf |
拷贝win10镜像
| # dd if=/dev/sr0 of=/mnt/usb2/win10.iso |
| 注:如果是centos系统,则把centos镜像挂载上去(sr0里面就是centos的系统),然后 of 时指定位置和名字即可 |
创建虚拟机硬盘
| # mkdir /kvmdir |
| # qemu-img create -f qcow2 /kvmdir/opop.img 500G |
| 输出:Formatting '/kvmdir/opop.img', fmt=qcow2 size=53687091200 encryption=off cluster_size=65536 lazy_refcounts=off |
| # ls -al /kvmdir/ |
| -rw-r--r-- 1 root root 197632 5月 2 09:39 opop.img |
创建虚拟机
| virt-install --virt-type kvm \ |
| --name win10_64 \ # 指定虚拟机的名称 |
| --memory 4096 \ # 指定虚拟机的内存用量 |
| --cdrom=/mnt/usb2/win10.iso \ # 指定cdroom的位置 |
| --boot cdrom \ # 引导时从cdroom启动 |
| --disk path=/kvmdir/opop.img,bus='ide' \ # 硬盘的位置和硬盘接口的类型 |
| --cpu host-model-only \ # cpu的模式,man virt-install 可查到该项 |
| --network=default,model='e1000' \ # 网卡的定义和速率 |
| --graphics vnc,listen=0.0.0.0 \ # 指定图形界面和指定连接工具(vnc)并监听所有端口 |
| --vnc --vncport=5900 # 指定VNC的端口 |
| --vcpus 5 \ # 指定虚拟机的虚拟 CPU (Virtual CPU,VCPU) 数量 |
| --noautoconsole \ # 无控制台 |
| --os-type=windows \ # 指定系统的类型(这里指定为windows) |
| 开始安装提示信息: |
| 开始安装...... |
| 域安装仍在进行。您可以重新连接 # 出现这个后才能用VNC进行连接 |
| 到控制台以便完成安装进程。 |
| |
创建虚拟机时的提示错误和解决办法
| ERROR internal error: process exited while connecting to monitor: Cannot set up guest memory 'pc.ram': Cannot allocate memory |
| 解决办法: |
| # vim /etc/libvirt/qemu.conf |
| user = “root” # 该项去星号 |
| group = "root" # 该项去星号 |
| # 这个问题是你的虚拟机的内存有点小,虚拟机的内存小的同时还来带一台机器,所以会报错。 |
| 刚开始我设置的内存是24G(出错),后来设置成16G(出错),后来设置成10G(也出错了),后来设置成2G能起来了 |
| 后来我把VMware的内存调到32G后就能正常的创建4G内存的虚机了 |
然后用VNC连接就会看到win10的安装画面
| VNC地址: |
| https://pan.baidu.com/s/15Mtu-il20XxWHkJEYOHaKQ 密码:l94k |
| 打开VNC客户端,输入本机ip:5900(第一个安装的系统默认就是5900,第二个是5901,以此类推)可连接到所通过vmvare创建的kvm虚拟机上 |
| --------------------------------------------------------------- |
| 注:上面的 virsh -c qemu:///system list 命令解释: |
| -c是--connect的意思 |
| 官方: |
| qemu:///system |
| For creating KVM and QEMU guests to be run by thesystem libvirtd instance. |
| This is the default modehat virt-manager uses, and what most KVM users want. |
| 翻译: |
| QEMU:///系统 |
| 用于创建由KVM和QEMU运行的客人系统libvirtd实例。 |
| 这是默认模式该virt-manager使用,以及大多数KVM用户想要的。 |
| ----------------------------------------------------------------- |
| 在VMware 12 pro上常见操作命令: |
| yum -y install numactl |
| numactl --hardware # 查看主机上的CPU物理情况 |
| |
客户机系统三种模式
| Guest 模式: 负责将执行客户机系统非 I/O 代码,并在需要的时候驱动 CPU 退出该模式 |
| Kernel 模式: 负责将 CPU 切换到 Guest mode 执行 Guest OS 代码,并在 CPU 退出 Guest mode 时回到 Kenerl 模式 |
| User 模式: 代表客户机系统执行 I/O 操作 |
杂项
| kvm文件默认路径: |
| cd /etc/libvirt/qemu |
| 磁盘文件默认路径: |
| cd /var/lib/libvirt/images/ |
| kvm虚拟机开机自启动目录: |
| /etc/libvirt/qemu/autostart |
| virsh autostart win10_64 # 这个是命令 |
| 默认情况下virsh工具不能对linux虚拟机进行关机操作,linux操作系统需要开启与启动acpid服务: |
| chkconfig acpid on |
| service acpid restart |
| 关机: |
| virsh shutdown win10_64 # win10_64是虚拟机的名字 |
| 强制关闭电源 |
| virsh destroy win10_64 |
| 导出KVM虚拟机配置文件 |
| virsh dumpxml win10_64 > /etc/libvirt/qemu/wintest02.xml # 可以通过这种方式进行备份 |
| 删除kvm虚拟机 |
| virsh undefine win10_64 |
| 编辑KVM虚拟机配置文件: |
| vim /etc/libvirt/qemu/win10_64.xml 或者 virsh edit win10_64 |
| 挂起虚拟机: |
| virsh suspend win10_64 |
| 恢复服务器 |
| virsh resume win10_64 |




欢迎加入QQ群一起讨论Linux、开源等技术

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」