怎样通过dmesg优化启动速度
要说排查Linux系统启动慢的问题,dmesg绝对是第一把交椅。它的输出里藏着硬件初始化、驱动加载、文件系统挂载、内核模块初始化等所有关键阶段的细节,堪称优化启动速度的“问题探测器”。想动手优化启动时间?先学会用它定位瓶颈。 具体怎么用?下面几个抓重点的方法值得先收下: 过滤错误与警告——跑一条dm
要说排查Linux系统启动慢的问题,dmesg绝对是第一把交椅。它的输出里藏着硬件初始化、驱动加载、文件系统挂载、内核模块初始化等所有关键阶段的细节,堪称优化启动速度的“问题探测器”。想动手优化启动时间?先学会用它定位瓶颈。

具体怎么用?下面几个抓重点的方法值得先收下:
- 过滤错误与警告——跑一条
dmesg | grep -i "error|failed|warning",就能把硬件检测失败(比如磁盘坏道)、驱动加载异常(比如显卡驱动不兼容)这些阻塞启动流程的元凶筛出来。 - 分析硬件初始化耗时——找找CPU、内存、硬盘、网卡的初始化日志(像
[1.234567] sd 0:0:0:0: [sda] Attached SCSI disk这样的),如果某个硬件初始化时间过长(机械硬盘寻道慢尤其典型),那换块SSD或优化硬件配置就是优先选项。 - 跟踪内核模块加载——用
dmesg | grep -i "module"查看模块加载日志,那些不必要的模块(比如虚拟化模块、未使用的硬件驱动)如果也在启动时排队加载,内核初始化时间就这么被拖长的。 - 查看文件系统挂载延迟——检查
/dev/sda1 / ext4 rw这类日志,挂载时间超过1秒就需要警惕了,可能是磁盘I/O性能太差或者文件系统有错误(试试用fsck修复)。 - 关注内核消息时间戳——如果内核开启了
CONFIG_PRINTK_TIME,dmesg输出里就有精确的时间戳(比如从[0.000000] Linux version 5.15.0到[2.345678] EXT4-fs (sda1): mounted filesystem的时间差),哪个阶段耗时最长一目了然。
一、基于dmesg结果的优化措施
1. 精简内核模块加载
- 禁用不必要的内核模块——先跑
lsmod看当前加载了哪些模块,再对照dmesg里的模块加载日志,把蓝牙、无线网卡驱动这类用不上的直接从内核配置里移除(编译时设CONFIG_MODULE_UNLOAD=y,方便以后动态加载)。 - 非必需模块改成动态加载——比如打印机驱动这种不常用但偶尔有用的,先用
modprobe -r卸载,然后通过/etc/modprobe.d/blacklist.conf加入黑名单,真正需要时手动sudo modprobe加载就行。启动时的模块初始化负担一下子就减轻了。
2. 优化内核启动参数
- 调整root文件系统等待时间——如果dmesg里看到
Waiting for root device /dev/sda1...这种提示,说明系统在傻等root设备就绪。在GRUB配置里改rootwait=5(从默认30秒缩短到5秒),只要设备能在5秒内准备好,启动就能快不少。 - 开启quiet模式——在GRUB内核启动参数里加上
quiet(比如linux /boot/vmlinuz-5.15.0 root=/dev/sda1 quiet),内核启动时的日志输出(尤其是调试信息)会大幅减少,省下的日志写入时间虽然不多,但聊胜于无。 - 优化内核压缩算法——如果dmesg显示内核解压时间偏长(比如
Uncompressing Linux... done, booting the kernel这行前后时间差大),可以试试换个压缩算法。测试表明,lz4的解压速度比gzip快约30%,配合SSD效果更明显(当然需要重新编译内核)。
3. 缩短硬件检测时间
- 禁用不必要的硬件探测——dmesg里可能包含USB设备、串口等未使用硬件的探测记录。包括BIOS里关掉“Legacy USB Support”这类选项,或者在内核配置里禁用相关驱动(比如
CONFIG_USB_LEGACY=y改成n),硬件探测时间就能省下来。 - 优化磁盘I/O性能——如果磁盘初始化慢(比如看到
sd 0:0:0:0: [sda] Assuming drive cache: write through),可以试试把磁盘缓存模式改成write back(用hdparm -W1 /dev/sda设置,前提是磁盘支持)。要是机械硬盘,升级到SSD是最立竿见影的办法——随机读写速度能提升5-10倍。
4. 延迟非关键服务启动
- 区分关键与非关键服务——先跑
systemctl list-unit-files --state=enabled看看哪些服务是开机自启的,再结合dmesg里的服务启动日志(比如[3.456789] systemd: Starting Network Manager...),把蓝牙、打印服务这类非关键的设成延迟启动(systemctl enable --now)或者手动启动,避免它们阻塞SSH、数据库等核心服务。--no-block - 并行启动服务——现代Linux默认用systemd,它的并行启动策略已经很成熟了。跑一下
systemd-analyze plot > boot.svg生成启动时间线图,能直观看到各服务是否并行执行——如果发现有串行阻塞的点,调整依赖关系就能进一步提速。
二、进阶优化技巧:生成启动时间线图
如果觉得上面的方法还不够直观,可以祭出initcall_debug内核参数,生成一张启动时间线图:
- 开启initcall_debug——在GRUB配置里加上
initcall_debug(比如linux /boot/vmlinuz-5.15.0 root=/dev/sda1 initcall_debug),重启系统。 - 收集dmesg日志——用
dmesg > boot.log把带各初始化函数耗时的日志保存下来。 - 生成启动图——把
boot.log复制到Linux源码目录,执行scripts/bootgraph.pl boot.log > boot.svg,然后用Inkscape等工具打开生成的SVG文件。图上每个初始化阶段(比如“early console init”“filesystem setup”)的耗时一目了然——优先优化那些占用5秒以上的大头就行。
照着这些步骤走,dmesg就成了你手里的精准定位仪,启动速度优化也就有了明确的方向。实际操作中,往往改几个参数、去掉几个模块就能看到明显改善。不妨从今天开始试一试。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















