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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓中0dp和match_parent区别

安卓中的 0dp 和 match_parent 的区别&#xff1f; 第一章 前言 有段时间&#xff0c;看到同事在编写代码的时候&#xff0c;写到的是 0dp 有时候自己写代码的时候&#xff0c;编写的是 match_parent 发现有时候效果很类似。 后来通过一个需求案例&#xff0c;才发现两者有着…

二十、案例特训专题3【系统设计篇】web架构设计

一、前言 二、内容提要 三、单机到应用与数据分离 四、集群与负载均衡 五、集群与有状态无状态服务 六、ORM 七、数据库读写分离 八、数据库缓存Memcache与Redis 九、Redis数据分片 哈希分片如果新增分片会很麻烦&#xff0c;需要把之前数据取出来再哈希除模 一致性哈希分片是…

基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(一)

前置说明 开发语言&#xff1a;Rust Web框架&#xff1a;Rocket 数据库&#xff1a;PostgreSQL 开发步骤 新建项目&#xff1a; cargo new projectname 在Cargo.toml文件里配置如下依赖&#xff1a; [dependencies] rocket {version"0.5.0",features["json&qu…

中国城市间交通驾车距离矩阵(2024)

中国城市间交通驾车距离矩阵(2024) 1852 数据简介 中国城市中心的交通驾车距离&#xff0c;该数据为通过审图号GS(2024)0650的中国城市地图得其城市中心距离&#xff0c;再通过高德地图api计算得出其交通驾车最短距离矩阵&#xff0c;单位为KM&#xff0c;方便大家研究使用。…

MySQL替换瀚高数据库报错: TO_DAYS()不存在(APP)

文章目录 环境症状问题原因解决方案报错编码 环境 系统平台&#xff1a;中标麒麟&#xff08;海光&#xff09;7,中标麒麟&#xff08;飞腾&#xff09;7 版本&#xff1a;4.5 症状 MySQL替换为瀚高数据库进行应用系统适配报错&#xff1a;TO_DAYS&#xff08;&#xff09;不…

驱动-Linux定时-timer_list

了解内核定时相关基础知识 文章目录 简要介绍timer_list 特点API 函数实验测试程序 - timer_mod.c编译文件-Makefile实验验证 注意事项总结 简要介绍 硬件为内核提供了一个系统定时器来计算流逝的时间&#xff08;即基于未来时间点的计时方式&#xff0c; 以当前时刻为计时开始…

计算机网络概要

⽹络相关基础知识 协议 两设备之间使⽤光电信号传输信息数据 要想传递不同信息 那么⼆者ᳵ就需要约定好的数据格式 层 封装 继承 多态是计算机的性质 它们⽀持了软硬件分层的实现 同层协议可以ᳵ接通信 同层协议ᳵ不直接通信 是各⾃调⽤下层提供的结构能⼒完成通信 分层…

QT 使用QPdfWriter和QPainter绘制PDF文件

QT如何生产pdf文件&#xff0c;网上有许多文章介绍&#xff0c;我也是看了网上的文章&#xff0c;看他们的代码&#xff0c;自己琢磨琢磨&#xff0c;才有了本编博客&#xff1b; 其他什么就不详细说了&#xff0c;本篇博客介绍的QPdfWriter和QPainter绘制PDF文件&#xff1b;…

企业标准信息公共服务平台已开放标准通编辑器访问入口

标准通 数字化标准编辑器 专业、高效、便捷 企业标准信息公共服务平台 近日&#xff0c;企业标准信息公共服务平台已开放标准通编辑器访问入口&#xff0c;可进入官网指定版块使用&#xff01; 核心功能亮点 解决企业痛点 传统标准编制&#xff0c;需反复核对格式、逐条…

【Hadoop】--HA高可用搭建--3.2.2

修改环境配置文件 hadoop-env.sh # 在文件末尾添加以下内容&#xff1a; # java_home记得修改 export JAVA_HOME/usr/java/jdk1.8.0xxxx export HDFS_NAMENODE_USERroot export HDFS_DATANODE_USERroot export HDFS_ZKFC_USERroot export HDFS_JOURNALNODE_USERroot export YA…

【skywalking】index“:“skywalking_metrics-all“},“status“:404}

skywalking 启动报错 java.lang.RuntimeException: {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [skywalking_metrics-all]","resource.t ype":"inde…

【Android】从垂直同步到屏幕刷新机制(一)

【Android】从垂直同步到屏幕刷新机制 本文参考以及部分图片来源&#xff1a; 垂直同步_小科普&#xff1a;“垂直同步”究竟是什么&#xff1f;-CSDN博客 “终于懂了” 系列&#xff1a;Android屏幕刷新机制—VSync、Choreographer 全面理解&#xff01;-腾讯云开发者社区-腾讯…

ACL完全解析:从权限管理到网络安全的核心防线

访问控制列表&#xff08;ACL&#xff09;是一种用于管理资源访问权限的核心安全机制&#xff0c;广泛应用于操作系统和网络设备中。以下是对ACL的详细解析&#xff1a; 1. 基本概念 定义&#xff1a;ACL是由多个访问控制条目&#xff08;ACE&#xff09;组成的列表&#xff0…

代码审计-php框架开发,实战tp项目,打击微交易,源码获取,扩大战果

实战&#xff0c;不安全写法引发的注入 这个bc靶场源码没有&#xff0c;看老师演示 打开很明显的tp框架源码 拿到tp框架之后第一步&#xff0c;搜索版本信息5.0.5 两个思路 1.代码的不安全写法 2.版本自身存在的漏洞 全局搜索where看看也没有不安全的 哎&#xff1f;&…

大模型的实践应用43-基于Qwen3(32B)+LangChain框架+MCP+RAG+传统算法的旅游行程规划系统

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用43-基于Qwen3(32B)+LangChain框架+MCP+RAG+传统算法的旅游行程规划系统。本报告将阐述基于大模型Qwen3(32B)、LangChain框架、MCP协议、RAG技术以及传统算法构建的智能旅游行程规划系统。该系统通过整合多种技术优势,实…

Jsoup库和Apache HttpClient库有什么区别?

Jsoup 和 Apache HttpClient 是两个功能不同的库&#xff0c;它们在 Java 开发中被广泛使用&#xff0c;但用途和功能有明显的区别&#xff1a; Jsoup 用途&#xff1a;Jsoup 是一个用于解析 HTML 文档的库。它提供了非常方便的方法来抓取和解析网页内容&#xff0c;提取和操作…

腾讯云存储原理

我们来详细展开你提到的两个核心结构概念&#xff1a; 一、“基于分布式文件系统 对象存储技术” 是什么&#xff1f; 1. 分布式文件系统&#xff08;DFS&#xff09;基础 分布式文件系统是一种支持将数据分布在多个存储节点上、并对上层用户透明的文件系统。腾讯云COS虽然是…

python fastapi + react, 写一个图片 app

1. 起因&#xff0c; 目的: 上厕所的时候&#xff0c;想用手机查看电脑上的图片&#xff0c;但是又不想点击下载。此app 应运而生。 2. 先看效果 单击图片&#xff0c;能放大图片 3. 过程: 过程很枯燥。有时候&#xff0c; 有一堆新的想法。 但是做起来太麻烦&#xff0c;…

Kubernetes控制平面组件:Kubelet详解(五):切换docker运行时为containerd

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

QT6 源(111):阅读与注释菜单栏 QMenuBar,进行属性与成员函数测试,信号与槽函数测试,并给出源码

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; &#xff08;4&#xff09; &#xff08;5&#xff09; &#xff08;6&#xff09; &#xff08;7&#xff09;以下源代码来自于头文件 qmenubar . h &#xff1a; #ifndef QMENUBAR_H #defi…