在CentOS宿主机上安装虚拟机,最推荐KVM加libvirt组合,这种方案完全免费、性能损耗极小,是多数服务器场景下的首选,下面从零开始拆解完整步骤和排障思路。
CentOS安装虚拟机详细步骤:从硬件检查到系统创建
确认宿主机CPU支持虚拟化
KVM依赖CPU的虚拟化指令集,不支持的话后面全白搭,先跑一条命令确认:
grep -E '(vmx|svm)' /proc/cpuinfo
- 输出里有
vmx,说明是Intel CPU且虚拟化已开启 - 输出里有
svm,说明是AMD CPU且虚拟化已开启 - 没输出,需要进BIOS把Intel VT-x或AMD-V打开
如果用的是云服务器,VPS本身不一定开放嵌套虚拟化,直接装KVM大概率报错,这时候可以改用VirtualBox,对嵌套虚拟化的兼容性更好,代价是性能差一些。
安装KVM和虚拟化管理工具
CentOS 7和CentOS 8、Stream系列的包名略有差别,按以下命令走不会出错:
yum install -y qemu-kvm libvirt virt-install virt-manager bridge-utils
CentOS 8及以上用dnf替代yum,效果一样,装完启动libvirtd服务并设开机自启:
systemctl start libvirtd
systemctl enable libvirtd
用systemctl status libvirtd确认状态是active (running),这一步卡住的话大概率是内核模块没加载,跑modprobe kvm_intel或modprobe kvm_amd手动加载,再不行重启服务器。
用virt-install命令行创建虚拟机
命令行方式最稳定,也不依赖图形界面,创建一台CentOS客户机的典型命令:
virt-install
--name centos7-test
--memory 2048
--vcpus 2
--disk path=/var/lib/libvirt/images/centos7-test.qcow2,size=20,format=qcow2
--os-variant centos7.0
--network network=default
--cdrom /tmp/CentOS-7-x86_64-Minimal.iso
--name是虚拟机名称,别用中文和空格--memory单位是MB,给多少按宿主机内存裕量来--disk size=20代表20GB,不是预分配,用多少占多少--cdrom路径改成你自己镜像的实际位置
执行后会自动进入VNC安装界面,按正常装机流程走就行,装完系统,用virsh list --all能看到虚拟机列表,virsh start 虚拟机名开机,virsh shutdown 虚拟机名
关机。
用virt-manager图形界面创建虚拟机
如果宿主机装了图形环境,virt-manager更直观,打开界面后点“新建虚拟机”,选镜像路径,分配CPU和内存,创建磁盘,一步步点完就是,这个方式本质上和命令行创建没有区别,适合不习惯敲命令的人。
CentOS虚拟化方案怎么选:KVM、VirtualBox和VMware的取舍
性能和资源占用对比
| 方案 | 性能损耗 | 虚拟化类型 | 适用场景 |
|---|---|---|---|
| KVM | 很小,接近原生 | 全虚拟化 | 生产环境、长期运行 |
| VirtualBox | 中等 | 全虚拟化 | 桌面环境、折腾测试 |
| VMware Workstation | 中等偏下 | 全虚拟化 | 桌面环境、跨平台需求 |
行业共识认为,KVM在Linux宿主机上的稳定性和性能表现优于其他方案,这是因为它直接利用内核的虚拟化模块,不经过额外的用户态翻译层,VirtualBox和VMware是用户态应用,跑起来要多一层调度开销,高负载时差距更明显。
使用场景和上手难度
- 生产服务器:直接KVM,没有图形界面也能管理,运维生态成熟
- Windows桌面宿主机的替代迁移:如果以前用Windows装VMware,现在切到CentOS,KVM配好VNC照样能用
- 快速测试新系统:VirtualBox更省心,尤其是不想碰桥接网络配置的时候
就日常体验来说,VirtualBox的图形管理界面做得很友好,很多新手从它入手,但熟练之后会明显感觉到KVM的命令行管理更高效,批量创建、克隆、快照都比VirtualBox方便得多。
CentOS虚拟机性能不如物理机怎么解决
检查CPU和内存配置
多数情况下,虚拟机慢不是因为虚拟化本身,而是资源分配不合理,先看宿主机整体资源占用:
top
free -h
如果宿主机内存已经占了八成以上,虚拟机还在跑大型应用,卡是必然的,给虚拟机分配资源和物理机一样的原则:内存宁多勿少,CPU按需分配。
CPU方面不要在客户机里绑定太多核数,创建时给4个vcpu,但客户机负载是单线程的,性能反而可能下降,因为内核要处理多CPU调度的开销,按实际负载定vcpu数比较合理。
磁盘I/O是最大瓶颈
机械硬盘跑虚拟机,I/O等待时间明显偏高,如果条件允许,把虚拟机镜像放到SSD上,性能提升是肉眼可见的,KVM默认用qcow2格式,这种格式支持快照和精简分配,但性能比raw格式稍差,追求极致性能就直接用raw:
qemu-img create -f raw /var/lib/libvirt/images/test.raw 30G
创建后再挂到虚拟机上,不要中途改磁盘格式,另一条优化路径是给虚拟机配置virtio驱动,半虚拟化的磁盘和网卡性能远好于模拟的IDE设备,创建虚拟机时加上:
--disk bus=virtio
--network model=virtio
Windows客户机需要额外装virtio驱动,CentOS客户机本身自带,装完驱动再启用这个模式,否则会开机蓝屏。
网络性能优化
KVM默认走NAT模式,虚拟机上网没问题,但宿主机和虚拟机之间互访要配置端口转发,外部机房的服务器跑在这种模式下,外面完全访问不到虚拟机的服务,正确的做法是配置桥接网络,让虚拟机直接拿内网IP:
nmcli connection add type bridge ifname br0 con-name br0
nmcli con add type bridge-slave ifname eth0 master br0
nmcli con up br0
桥接配完后,创建虚拟机时把--network network=default换成--network bridge=br0,这样虚拟机就从你机房的DHCP拿内网地址了,和物理机一个待遇,该通的端口都通,行业共识认为,桥接是虚拟化网络配置中稳定性最可靠的一种方式,就是配置时容易出错,多留点耐心。
虚拟化支持没开启、权限不足等常见问题排查
“KVM不可用”或“虚拟化模块加载失败”
先查看日志确认具体报错:
dmesg | grep kvm
如果显示kvm: disabled by bios,是BIOS里虚拟化没开,重启进BIOS设置,找到Intel Virtualization Technology或SVM Mode,改成Enabled。
云服务器没开嵌套虚拟化的话,日志通常提示kvm: no hardware support,这种没办法通过软件解决,要么换支持嵌套虚拟化的云服务商,要么改用VirtualBox。
权限问题导致无法连接libvirt
普通用户跑virsh list报“权限不够”,把当前用户加入libvirt组:
usermod -aG libvirt 用户名
改完重新登录生效,有些系统里libvirt用户组不叫libvirt,可以用grep libvirt /etc/group
确认实际组名。
虚拟机创建成功但启动黑屏
通常是VNC配置问题,检查创建时是不是没有指定VNC端口,默认端口被占用或防火墙拦截导致连不上,查看虚拟机当前的VNC端口:
virsh vncdisplay 虚拟机名
输出类似0.0.1:0,意思是端口5900被占用,自动跳到5901了,手动指定端口避免冲突:
virsh edit 虚拟机名
找到<graphics type='vnc' port='-1',把-1改成具体端口号如5902,保存后重启虚拟机。
镜像下载速度慢,虚拟机安装卡死
从国外官方源拉ISO镜像经常又慢又容易断,国内镜像站如清华源、阿里源的CentOS镜像路径和官方完全一致,下载速度快几个量级,建议先把镜像wget到本地再挂载安装。
CentOS宿主机虚拟机迁移和备份
用libvirt管理虚拟机的好处是迁移和备份很方便,备份一个虚拟机的完整配置加上磁盘镜像:
virsh dumpxml 虚拟机名 > vm.xml
cp /var/lib/libvirt/images/虚拟机名.qcow2 /backup/
恢复的时候:
virsh define vm.xml
磁盘镜像放回原路径,virsh start 虚拟机名就能启动,这套操作完全可以做成cron定时任务,每天自动备份配置文件和磁盘快照。
相关问题
CentOS装虚拟机用KVM还是VirtualBox?
生产环境优先KVM,性能和稳定性都更占优;个人学习或测试场景,VirtualBox的上手门槛更低,安装更简单,自带图形管理界面,从学习投入产出比来说,KVM更值得深入研究,因为它是Linux虚拟化的事实标准。
虚拟机磁盘满了,宿主机怎么扩容?
先停止虚拟机,用qemu-img resize命令扩容磁盘镜像:
qemu-img resize 虚拟机名.qcow2 50G
然后启动虚拟机,在客户机里通过fdisk扩展分区和文件系统,需要注意,qcow2镜像只能扩容不能缩容,操作前确认好自己需要的磁盘大小。
宿主机重启后虚拟机不会自动启动怎么办?
默认情况下虚拟机不会跟随宿主机开机自启,需要手动执行一条命令:
virsh autostart 虚拟机名
取消自启用virsh autostart --disable 虚拟机名,这个配置在企业生产环境中很重要,服务器意外重启后虚拟机自动拉起,不用人工干预。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/674339.html




