AI大模型学习二十四、实践QEMU-KVM 虚拟化:ubuntu server 25.04 下云镜像创建Ubuntu 虚拟机
一、说明
虽然说大部分的场合,docker都能解决问题,但是有些大型的软件安装时如果修改配置会很麻烦,比方说前面遇到的code-server和dify 默认都是80和443端口要使用,安装在一起就会端口冲突,通过该端口来解决问题,理论上都行,但是实际我在应用当中发现出现了一些意想不到的问题,也许别人没有遇到过,但是我确实遇到了,没办法,只能把两个安装在各自独立的系统中,这样就完全隔离。都可以使用原版的软件,另外保持服务器宿主机本身的完全干净,毕竟我们平时安装的东西太多,服务器又没必要也不适合使用图形界面,所以命令行安装就有必要了,这里只是做个记录,网上教程很多
在 Ubuntu Server 25.04 命令行中安装 Ubuntu 虚拟机,可以使用 KVM/QEMU 虚拟化工具
二、 安装
1、确认系统支持虚拟化
egrep -c '(vmx|svm)' /proc/cpuinfo# 输出值应大于 0。如果为 0,需在 BIOS 中启用虚拟化支持。
2、安装 KVM/QEMU 及相关工具
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst
3、 云镜像下载以及安装目录和权限确定
# 目录和权限设置后面用的到
mkdir -p ~/vm-data
sudo chown -R $USER:libvirt-qemu ~/vm-data
sudo chmod 775 ~/vm-data
sudo chown -R $USER:libvirt-qemu /home/mucuna
sudo chmod 775 /home/mucuna# 下载云镜像
wget -O /home/mucuna/vm-data/ubuntu-25.04-server-cloudimg-amd64.img https://cloud-images.ubuntu.com/releases/plucky/release/ubuntu-25.04-server-cloudimg-amd64.img
4、将用户加入 libvirt 组
sudo usermod -aG libvirt $USER
newgrp libvirt # 立即生效或重新登录sudo systemctl enable --now libvirtd
5、检测KVM情况
在 Ubuntu Server 中遇到 "WARNING KVM acceleration not available, using 'qemu'" 表示虚拟机无法使用硬件加速(KVM),将退回到纯软件模拟(QEMU),导致性能显著下降
1、检查 CPU 是否支持 Intel VT-x 或 AMD-V 技术:
egrep -c '(vmx|svm)' /proc/cpuinfo
输出大于 0:CPU 支持虚拟化,但可能未启用。
输出为 0:CPU 不支持或 BIOS 中禁用虚拟化
2、检查 KVM 内核模块是否加载
lsmod | grep kvm
正常输出:应显示
kvm_intel
或kvm_amd
。3、验证
/dev/kvm
权限ls -l /dev/kvm
权限问题:若输出显示组为
kvm
,将用户加入kvm
组:sudo usermod -aG kvm $USER
newgrp kvm # 立即生效或重新登录
mucuna@x58:~/vm-data$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
6、确保 osinfo-db
支持 Ubuntu 25.04
sudo apt install libosinfo-bin# 查看支持的 Ubuntu 版本
osinfo-query os | grep ubuntu# 更新数据库(Ubuntu 中通常通过 apt)
sudo apt update
sudo apt install osinfo-db
7、编辑元数据信息
#配置用户与SSH,并设置主机名。
cat > user-data << EOF
#cloud-config
user: root
password: 123456
chpasswd: { expire: False }
ssh_pwauth: True
package_update: true
packages:- qemu-guest-agent
EOFcat > meta-data << EOF
instance-id: dify-vm
local-hostname: dify
EOF
8、生成cloud-init ISO
sudo apt install genisoimagesudo genisoimage -output /home/mucuna/vm-data/ubuntu-cloud-vm.iso -volid cidata -joliet -rock user-data meta-data
9、配置网络为桥接模式
network:version: 2ethernets:enp2s0:dhcp4: nodhcp6: nobridges:br0:interfaces: [enp2s0]dhcp4: nodhcp4: noaddresses:- "192.168.1.111/24"nameservers:addresses:- 8.8.8.8- 8.8.4.4search: []routes:- to: "default"via: "192.168.1.1"
应用配置,立马生效
sudo netplan apply
sudo netplan generate
sudo netplan --debug apply
查看命令
#不是最小安装已经安装过了
sudo apt install bridge-utils -ybrctl show
9、创建虚拟机
利用 virt-install 命令的 --import 选项,您可以直接从现有的云镜像文件创建虚拟机,而无需进行操作系统安装过程
sudo virt-install \
--name dify-vm \
--vcpus 4 \
--memory 8192 \
--disk path=/home/mucuna/vm-data/ubuntu-25.04-server-cloudimg-amd64.img \
--disk path=/home/mucuna/vm-data/ubuntu-cloud-vm.iso \
--import \
--os-variant ubuntu25.04 \
--network bridge=br0,model=virtio \
--graphics none \
--console pty,target_type=serial
参数说明:
--nographics
: 禁用图形输出,强制使用控制台。
--extra-args
: 向安装内核传递串口控制台参数。
--location
: 指定ISO路径,自动检测内核和initrd
--name
: 虚拟机的名称--ram
: 分配给虚拟机的内存,单位是MB,这里是2048MB(2GB)--vcpus
: 分配的虚拟CPU数量--disk
: 指定虚拟机的磁盘路径和大小 ,path=/var/lib/libvirt/images/myvm.img
是磁盘文件的路径,size=20
是磁盘大小(GB)--os-variant
: 操作系统的版本,用于 优化虚拟机配置--network
: 指定使用libvirt
的默认NAT网络(network=default
)115200n8
: (也可以不写) 串行端口的波特率设置,115200 是波特率,n
表示无奇偶校验位,8
表示每个数据字节有 8 位console=ttyS0
: 将控制台输出重定向到第一个串行端口(ttyS0
)
安装完后直接按回车,进入虚拟机登录界面 ,就是在宿主机的命令行界面
我们在元数据信息中设置用户为root 密码为123456用这个登录,直接就进去了
这个时候已经进了虚拟机界面了 ,ping一下百度,可以连接外网
直接用shutdown now命令就可以关闭了
然后在用 virsh start dify-vm 就可以启动虚拟机
用virsh console dify-vm可以进入上面的界面登录
10、配置静态ip
network:version: 2ethernets:enp1s0:dhcp4: nodhcp6: noaddresses:- "192.168.1.111/24"nameservers:addresses:- 8.8.8.8- 8.8.4.4search: []routes:- to: "default"via: "192.168.1.1"
11、管理虚拟机命令
virsh list --all # 查看所有虚拟机
virsh start dify-vm # 启动虚拟机
virsh shutdown dify-vm # 正常关闭
virsh destroy dify-vm # 强制停止
virsh edit dify-vm # 编辑虚拟机配置
virsh undefine dify-vm # 删除虚拟机(需先destroy)
virsh console dify-vm # 进入命令行
三、远程ssh登录
登录时出现错误,修改配置
nano /etc/ssh/sshd_config
找到 #Authentication
,将 PermitRootLogin
参数修改为 yes
找到 #Authentication
,将 PasswordAuthentication
参数修改为 yes
由于这个是安装的云镜像,
/etc/ssh/sshd_config.d目录下的50-cloud-init.conf , 60-cloudimg-settings.conf两个文件中也有PasswordAuthentication
参数,也要改
修改后 sudo systemctl restart sshd
登录成功
四、设置虚拟机开机自启动
我们有需求,就是在宿主机启动时,同步启动虚拟机,很简单
直接执行
sudo virsh autostart dify-vm
宿主机开机后,发现虚拟机已经运行了,说明自启动成功
五、硬盘不够,咋办
靠,这云镜像怎么搞的,这么点?
sudo virsh domblklist dify-vm
通过执行虚拟磁盘来检索有关虚拟磁盘的更多详细信息,例如其当前大小。qemu-img info
命令以 VM 磁盘的完整路径为下:
#vda /home/mucuna/vm-data/ubuntu-25.04-server-cloudimg-amd64.img
#vdb /home/mucuna/vm-data/ubuntu-cloud-vm.iso
sudo qemu-img info /home/mucuna/vm-data/ubuntu-25.04-server-cloudimg-amd64.img
才3.5g啊
检查快照,有快照不能调节大小,下面显示没有
sudo virsh snapshot-list dify-vm
调整KVM虚拟磁盘的大小
调整为增加80g
sudo qemu-img resize /home/mucuna/vm-data/ubuntu-25.04-server-cloudimg-amd64.img +80G
sudo qemu-img info /home/mucuna/vm-data/ubuntu-25.04-server-cloudimg-amd64.img