0

0

Linux QEMU 管理与优化实践

舞夢輝影

舞夢輝影

发布时间:2026-02-24 15:49:35

|

373人浏览过

|

来源于php中文网

原创

用 qemu-system-x86_64 启动最小 linux 虚拟机需指定 -kernel 和 -initrd,加 console=ttys0 与 -nographic 才有串口输出;内存至少 -m 512;-cpu qemu64,+nx,-svm 可绕过硬件虚拟化缺失;网络选 -netdev user(开箱即用)或 -device virtio-net-pci(需客户机支持);-smp 多核需客户机内核启用 config_x86_local_apic 和 config_x86_io_apic。

linux qemu 管理与优化实践

如何用 qemu-system-x86_64 启动一个最小可用的 Linux 虚拟机

直接跑起来比调参重要。一个没加任何优化参数的 qemu-system-x86_64 命令,只要配对了内核和 initramfs,就能进 shell。

  • 必须指定 -kernel(路径要绝对或相对当前目录可访问)和 -initrd,否则报 Kernel panic - not syncing: VFS: Unable to mount root fs
  • -append "console=ttyS0" 是关键,不然串口没输出,看着像卡死;加上 -nographic 才能纯终端交互
  • 内存至少给 -m 512,低于 256M 容易在解压 initramfs 阶段 OOM
  • 不加 -cpu 时默认用 qemu64,老宿主上可能缺 svmvmx 导致启动失败,临时换成 -cpu qemu64,+nx,-svm 可绕过

-device virtio-net-pci-netdev user 的实际区别在哪

不是“要不要网络”,而是“谁管网络栈、谁暴露端口、谁决定 DNS”。-netdev user 是 QEMU 自带的用户态 NAT 网络,开箱即用但不可直连宿主机服务;virtio-net-pci 是半虚拟化网卡驱动,性能好但依赖客户机装 virtio_net 模块。

  • -netdev user,id=net0,hostfwd=tcp::2222-:22:客户机 SSH 端口映射到宿主机 2222,适合调试,但客户机 ping 不通宿主机 IP
  • -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:56 必须和上面 -netdevid 对应,否则报 Device 'virtio-net-pci' could not be initialized
  • 如果客户机没加载 virtio_netip link 看不到 eth0,dmesg 里有 virtio_net: probe of virtio0 failed with error -2
  • 生产环境别混用:user 模式下再加 virtio 设备无意义,QEMU 会忽略或报错

为什么 -smp 4 后客户机只看到 1 个 CPU

不是 QEMU 没传过去,是客户机内核启动时没识别到 APIC 或 SMP 支持被关了。尤其用自编译内核或精简发行版时常见。

成新网络商城购物系统
成新网络商城购物系统

使用模板与程序分离的方式构建,依靠专门设计的数据库操作类实现数据库存取,具有专有错误处理模块,通过 Email 实时报告数据库错误,除具有满足购物需要的全部功能外,成新商城购物系统还对购物系统体系做了丰富的扩展,全新设计的搜索功能,自定义成新商城购物系统代码功能代码已经全面优化,杜绝SQL注入漏洞前台测试用户名:admin密码:admin888后台管理员名:admin密码:admin888

下载
  • 检查客户机 dmesg | grep -i "smp\|apic",出现 APIC: disable apic facility 说明内核配置缺 CONFIG_X86_LOCAL_APICCONFIG_X86_IO_APIC
  • -smp 4,cores=2,threads=2 这种拓扑写法,某些旧版 QEMU(cores,退化成单核,建议先用 -smp 4 简写验证
  • 客户机内 cat /proc/cpuinfo | grep processor | wc -l 才是真实逻辑 CPU 数,nproc 有时受 cgroup 限制返回不准
  • 如果客户机是 Alpine 或 Buildroot,默认内核常裁剪掉 SMP 支持,换 linux-vanilla 或加 CONFIG_SMP=y 重编译

-drive if=virtio 启动慢或读写卡顿的几个硬坑

virtio-blk 性能远超 ide,但卡顿往往不是 I/O 本身,而是队列、缓存、或客户机驱动没跟上。

  • -drive file=disk.img,if=virtio,cache=none,aio=native,format=qcow2 是推荐组合:其中 cache=none 避免双重缓存,aio=native 启用 Linux io_uring(QEMU ≥ 6.0),否则 fallback 到线程池,小文件随机读写延迟翻倍
  • 客户机没装 virtio_blk 模块时,lsblk 看不到磁盘,dmesgvirtio_blk: probe of virtio0 failed with error -2,需确认内核 config 含 CONFIG_VIRTIO_BLK=y
  • qcow2 格式嵌套太多层(比如 base → snap1 → snap2)会导致 CoW 元数据查找变慢,实测 3 层以上随机写入延迟升 30%+,非必要不用快照链
  • 宿主机 ext4 文件系统挂载时用了 noatime,nodiratime 可减少元数据更新开销,对 cache=writeback 场景尤其明显

最常被跳过的其实是客户机内核的 CONFIG_VIRTIO_* 选项——QEMU 参数再全,客户机没驱动就是零。别只盯着 -smp-m 调,先 dmesg | grep virtio 看清底层有没有认设备。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

829

2023.08.22

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

866

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

452

2024.06.27

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

391

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

348

2023.10.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

422

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

595

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

719

2023.08.10

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

1

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.6万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号