Ubuntu 优化启动时间优化

news/2025/3/31 20:23:33/

优化 Ubuntu 20.04 的启动时间可以从多个方面入手,以下是详细的步骤和建议:


一、分析启动耗时

首先检查系统启动各阶段的耗时:

systemd-analyze time        # 查看整体启动时间
systemd-analyze blame       # 列出各服务/进程的启动耗时
systemd-analyze critical-chain  # 查看关键路径的启动链

二、禁用不必要的服务

禁用启动时不需要的系统服务:

sudo systemctl disable <service-name>  # 禁用服务(如蓝牙、打印机等)
sudo systemctl mask <service-name>     # 彻底屏蔽服务(谨慎使用)

常见可禁用的服务

  • bluetooth.service(蓝牙)
  • cups.service(打印机)
  • ModemManager.service(调制解调器)
  • networkd-dispatcher.service(若使用NetworkManager)
  • accounts-daemon.service(用户账户管理)

三、优化文件系统检查(fsck)

  1. 减少文件系统检查频率

    • 编辑 /etc/fstab,将最后一列的数值改为 0(表示不检查):
      sudo nano /etc/fstab
      # 示例:将最后数字从 1 或 2 改为 0
      UUID=xxxx / ext4 defaults,noatime,discard 0 0
      
    • 使用 noatimerelatime 挂载选项减少磁盘写入。
  2. 禁用启动时的文件系统等待

    sudo systemctl disable systemd-fsck-root.service
    

四、调整内核参数

  1. 编辑 GRUB 配置

    sudo nano /etc/default/grub
    # 修改以下参数:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    # 添加或修改为(例如):
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noresume fsck.mode=skip"
    
    • fsck.mode=skip:跳过文件系统检查(谨慎使用)。
    • noresume:如果未使用休眠功能。
  2. 更新 GRUB:

    sudo update-grub
    

五、优化 SSD 性能(如使用 SSD)

  1. 启用 TRIM:
    sudo systemctl enable fstrim.timer
    
  2. 确认是否已启用 discard 选项(在 /etc/fstab 中添加 discard)。

六、清理启动项

  1. 管理用户级启动程序
    gnome-session-properties  # 图形界面管理启动项
    
  2. 清理旧内核
    sudo apt autoremove --purge  # 删除旧内核和依赖
    

七、排查硬件问题

  1. 检查硬盘健康状况
    sudo smartctl -a /dev/sda
    
  2. 检查日志中的硬件错误
    journalctl -b -p 3  # 查看本次启动的错误日志
    

八、使用轻量化组件

  • 替换图形界面为轻量级桌面(如 Xfce 或 LXQt)。
  • 使用更快的显示管理器(如 lightdm 替代 gdm3):
    sudo apt install lightdm
    sudo dpkg-reconfigure lightdm
    

九、其他优化

  1. 减少 GRUB 等待时间
    sudo nano /etc/default/grub
    GRUB_TIMEOUT=2  # 将默认超时时间改为2秒
    sudo update-grub
    
  2. 预加载内核模块
    • 将常用模块添加到 /etc/modules-load.d/modules.conf

十、验证优化结果

重启后再次运行:

systemd-analyze time
systemd-analyze blame

通过以上步骤,大部分情况下可以显著缩短启动时间。如果问题依旧存在,可能需要进一步排查特定服务或硬件兼容性问题。

我的结果:
  1. 最开始的时候:
> systemd-analyze time
Startup finished in 22.227s (firmware) + 9.423s (loader) + 36.324s (kernel) + 1min 51.738s (userspace) = 2min 59.713s 
graphical.target reached after 1min 51.722s in userspace
> systemd-analyze blame
20.870s plymouth-quit-wait.service                                             >4.621s NetworkManager-wait-online.service                                     >3.019s dev-sda2.device                                                        >1.329s fwupd.service                                                          >459ms docker.service                                                         >391ms snapd.service                                                          >387ms man-db.service                                                         >305ms blueman-mechanism.service                                              >299ms systemd-logind.service                                                 >278ms dev-loop0.device                                                       >267ms logrotate.service                                                      >264ms upower.service                                                         >255ms snap-core22-1722.mount                                                 >241ms snap-core20-2496.mount                                                 >239ms dev-loop2.device                                                       >235ms snap-gnome\x2d3\x2d28\x2d1804-198.mount                                >234ms containerd.service                                                     >232ms snap-gnome\x2d3\x2d38\x2d2004-143.mount                                >232ms snap-gnome\x2d42\x2d2204-176.mount                                     >229ms snap-gnome\x2d42\x2d2204-202.mount                                     >227ms snap-gtk\x2dcommon\x2dthemes-1535.mount                                >226ms dev-loop11.device                                                      >> systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.graphical.target @1min 51.722s
└─multi-user.target @1min 51.722s└─kerneloops.service @1min 35.442s +13ms└─nss-lookup.target @1min 35.440s└─todeskd.service @1min 35.439s└─network-online.target @1min 35.436s└─NetworkManager-wait-online.service @1min 30.814s +4.621s└─NetworkManager.service @1min 30.736s +71ms└─dbus.service @1min 30.733s└─basic.target @1min 30.712s└─sockets.target @1min 30.712s└─uuidd.socket @1min 30.710s└─sysinit.target @1min 30.699s└─systemd-timesyncd.service @3.507s +97ms└─systemd-tmpfiles-setup.service @3.486s +16ms└─systemd-journal-flush.service @562ms +106ms└─systemd-journald.service @458ms +103ms└─systemd-journald.socket @451ms└─system.slice @445ms└─-.slice @445ms
  1. 优化了一下启动项的图像加载,禁用了plymouth图像加载
 5263  sudo systemctl mask plymouth-quit-wait.service5264  sudo apt remove plymouth5265  sudo nano /etc/default/grub5266  sudo update-grub
> systemd-analyze time
Startup finished in 20.682s (firmware) + 5.135s (loader) + 4.417s (kernel) + 1min 37.067s (userspace) = 2min 7.302s 
graphical.target reached after 1min 37.059s in userspace
> systemd-analyze blame
4.897s NetworkManager-wait-online.service                                      >
1.456s fwupd.service                                                           >
1.328s docker.service                                                          >711ms dev-sda2.device                                                         >681ms snapd.seeded.service                                                    >620ms man-db.service                                                          >594ms snapd.service                                                           >504ms networkd-dispatcher.service                                             >419ms blueman-mechanism.service                                               >322ms dev-loop0.device                                                        >298ms dev-loop1.device                                                        >298ms apport-autoreport.service                                               >293ms containerd.service                                                      >292ms dev-loop2.device                                                        >287ms upower.service                                                          >279ms logrotate.service                                                       >270ms systemd-logind.service                                                  >269ms dev-loop4.device                                                        >256ms dev-loop8.device                                                        >252ms dev-loop10.device                                                       >249ms dev-loop5.device                                                        >247ms dev-loop6.device                                                        >242ms accounts-daemon.service                                                 >241ms dev-loop3.device                                                        >236ms snap-core18-2846.mount                                                  >232ms fstrim.service                                                          >221ms udisks2.service                                                         >218ms snap-gnome\x2d42\x2d2204-176.mount                                      >217ms snap-gnome\x2d42\x2d2204-202.mount                                      >213ms dev-loop9.device                                                        >213ms dev-loop11.device                                                       >208ms snap-snap\x2dstore-1113.mount                                           >205ms snap-snapd-23545.mount                                                  >204ms dev-loop17.device                                                       >204ms dev-loop18.device                                                       >204ms snap-snapd-23771.mount                                                  >197ms dev-loop16.device                                                       >197ms dev-loop7.device                                                        >188ms dev-loop15.device                                                       >186ms systemd-resolved.service                                                >185ms smartmontools.service                                                   >182ms snap-core20-2496.mount                                                  >180ms snap-core22-1722.mount                                                  >179ms snap-core22-1748.mount                                                  >175ms snap-gnome\x2d3\x2d38\x2d2004-119.mount                                 >172ms dev-loop13.device                                                       >172ms snap-snap\x2dstore-1216.mount                                           >168ms systemd-timesyncd.service                                               >165ms snap-notion\x2dsnap\x2dreborn-49.mount                                  >164ms dev-loop14.device                                                       >161ms dev-loop12.device                                                       >150ms lm-sensors.service                                                      >146ms apparmor.service                                                        >136ms systemd-udev-trigger.service                                            >136ms gpu-manager.service                                                     >135ms ModemManager.service                                                    >134ms snap-core18-2855.mount                                                  >120ms avahi-daemon.service                                                    >116ms bluetooth.service                                                       >116ms systemd-journal-flush.service                                           >114ms snap-gtk\x2dcommon\x2dthemes-1535.mount                                 >111ms NetworkManager.service                                                  >110ms snap-notion\x2dsnap\x2dreborn-50.mount                                  >109ms systemd-journald.service                                                >103ms polkit.service                                                          >> systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.graphical.target @1min 37.059s
└─multi-user.target @1min 37.059s└─docker.service @1min 35.730s +1.328s└─nss-lookup.target @1min 35.729s└─todeskd.service @1min 35.729s└─network-online.target @1min 35.726s└─NetworkManager-wait-online.service @1min 30.829s +4.897s└─NetworkManager.service @1min 30.714s +111ms└─dbus.service @1min 30.708s└─basic.target @1min 30.688s└─sockets.target @1min 30.688s└─snapd.socket @1min 30.686s +1ms└─sysinit.target @1min 30.671s└─systemd-timesyncd.service @1.249s +168ms└─systemd-tmpfiles-setup.service @1.207s +37ms└─systemd-journal-flush.service @584ms +116ms└─systemd-journald.service @473ms +109ms└─systemd-journald.socket @466ms└─system.slice @461ms└─-.slice @461ms

http://www.ppmy.cn/news/1583916.html

相关文章

React 18 核心技术深度解析:从并发渲染到异步数据流优化

文章目录 一、并发渲染架构升级二、Suspense 异步数据流管理三、自动批处理机制增强四、状态管理新范式五、服务端渲染优化六、构建与兼容性优化 一、并发渲染架构升级 React 18 通过引入并发模式&#xff08;Concurrent Mode&#xff09;重构了渲染机制&#xff0c;将单次渲染…

SQL 案例1 按秒分组取每天最新记录

要按时间分组并精确到秒&#xff0c;同时过滤出每天最新的1条记录&#xff0c;可以使用SQL中的ROW_NUMBER()窗口函数来实现。假设你的表名为your_table&#xff0c;时间字段为timestamp&#xff0c;以下是一个示例查询&#xff1a; WITH ranked_records AS (SELECT*,ROW_NUMBE…

Nginx RTMP 处理模块 (ngx_rtmp_handler.c) 详细分析

ngx_rtmp_handler 是 Nginx RTMP 模块中的核心处理部分&#xff0c;主要负责处理 RTMP 流会话中的数据接收、发送、ping 操作以及分块大小的设置等。 1. 全局变量 ngx_rtmp_naccepted: 记录接受的 RTMP 连接数。 ngx_rtmp_bw_out 和 ngx_rtmp_bw_in: 分别表示输出带宽和输入带…

K8S学习之基础四十八:通过kibana查看fluentd收集存放在es中的日志

通过kibana查看fluentd收集存放在es中的日志 接下来就可以过滤有效字段查看日志了

RabbitMQ 核心组件及功能详解

RabbitMQ 是一个开源的消息代理和队列服务器,其核心架构由以下关键组件构成: 一、核心组件架构 #mermaid-svg-mIHqbpvVt25Kpyl0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mIHqbpvVt25Kpyl0 .error-icon{fil…

可视化图解算法:删除有序(排序)链表中重复的元素-II

1. 题目 描述 给出一个升序排序的链表&#xff0c;删除链表中的所有重复出现的元素&#xff0c;只保留原链表中只出现一次的元素。 例如&#xff1a; 给出的链表为1→2→3→3→4→4→5, 返回1→2→5. 给出的链表为1→1→1→2→3 返回2→3. 数据范围&#xff1a;链表长度 0≤…

Git 提示 “LF will be replaced by CRLF“ 的原因及解决方案

遇到的问题: warning: in the working copy of build/build.js, LF will be replaced by CRLF the next time Git touches it warning: in the working copy of build/check-versions.js, LF will be replaced by CRLF the next time Git touches it warning: in the worki…

使用HTTP提交git时,每次都要输入用户名和密码的解决方案

通过https提交的git项目&#xff0c;每次提交都需要输入用户名和密码 解决方案如下: 打开项目目录&#xff0c;通过终端输入&#xff1a; git config --global credential.helper store验证方式: 重启 scode修改or添加文件后使用git上传, 本次需要帐号密码再次修改or添加文件…