开机慢卡顿 Fedora Silverblue 性能优化指南新手必知的服务精简和加速器设置方法
你是不是也遇到过这种情况:早上开机泡茶的时间,电脑还在慢吞吞地转圈圈,心里那个急啊!Fedora Silverblue 作为一款很酷的系统,默认配置确实偏保守,生怕搞坏你的容器环境。但问题是,它把自己包装得太厚,启动时拖拖拉拉的,确实让人头疼。
别担心,今天咱们就一步步来,把这层”茧”剥开,让你的 Silverblue 跑起来像闪电一样快。
先认识一下 Silverblue 这个”特殊体质”
Fedora Silverblue 和普通 Fedora Workstation 最大的不同在于它的不可变系统架构。系统分区是只读的,应用用 Flatpak 跑,这种设计虽然安全又稳定,但默认情况下会多加载一堆你可能根本用不到的服务。
想象一下,你出门只带一把钥匙,但系统却替你背了一整座保险箱,你说能不累吗?优化就是帮你把那座保险箱卸下来。
第一步:摸清家底,看看谁在拖后腿
在动手之前,咱们先看看哪些服务最占资源。打开终端,运行这个命令:
# 查看开机时占用时间最长的服务
systemd-analyze blame | head -20
这条命令会列出启动最慢的前20个服务,你就能一目了然。有时候你会发现,plymouth-quit-wait.service、accounts-daemon.service 这种平时根本用不上的东西,居然占了大几秒。
# 查看整体启动时间分布
systemd-analyze
输出大概长这样:
Startup finished in 2.1s (firmware) + 3.5s (loader) + 12.3s (kernel) + 45.2s (userspace) = 63.1s
看到那个 45.2s 的 userspace 了吗?那就是我们优化的重点目标区域。
第二步:精准手术,禁用不必要的服务
禁用蓝牙服务(如果你不用蓝牙)
# 查看蓝牙服务状态
systemctl status bluetooth.service
# 停止并禁用蓝牙服务
sudo systemctl stop bluetooth.service
sudo systemctl disable bluetooth.service
# 如果还想彻底一点,可以阻止它被其他服务唤醒
sudo systemctl mask bluetooth.service
mask 比 disable 更彻底,它会把服务 symlink 到 /dev/null,几乎不可能被意外启动。
禁用打印服务(CUPS)
# 如果你没有连接打印机
sudo systemctl stop cups.service
sudo systemctl disable cups.service
sudo systemctl mask cups.service
sudo systemctl stop cups.socket
sudo systemctl disable cups.socket
sudo systemctl mask cups.socket
禁用邮件服务
# 禁用 postfix(邮件传输代理)
sudo systemctl stop postfix.service
sudo systemctl disable postfix.service
sudo systemctl mask postfix.service
禁用系统日志的冗余转发
# 检查 rsyslog 是否在用(Silverblue 默认用 journald)
systemctl status rsyslog.service
# 如果确认在用,可以禁用
sudo systemctl stop rsyslog.service
sudo systemctl mask rsyslog.service
禁用不必要的后台服务清单
下面这几个服务,对于普通桌面用户来说,基本是可有可无的:
# 禁用 Modem 服务(没有调制解调器)
sudo systemctl mask ModemManager.service
# 禁用 Cups Browsing(打印机浏览)
sudo systemctl mask cups-browsed.service
# 禁用 Accounts 服务(影响 GNOME 的联系人/账户集成)
# 注意:禁用后 GNOME 设置里的"在线账户"可能无法正常工作
sudo systemctl mask accounts-daemon.service
# 禁用 PackageKit(Flatpak 和 dnf 已经足够,不需要 PackageKit 后台检查更新)
sudo systemctl mask packagekit.service
sudo systemctl mask packagekit-offline-update.service
# 禁用 fstrim(SSD 用户可考虑,HDD 不需要)
# 检查现有的 trim 定时器
systemctl list-timers | grep fstrim
# 如果确定用不到可以禁用
sudo systemctl disable fstrim.timer
sudo systemctl stop fstrim.timer
禁用 GNOME 的远程登录功能(如果你不需要)
# 禁用远程桌面相关服务
sudo systemctl mask org.gnome.Shell.Portal.service
# 禁用远程访问
sudo systemctl stop org.gnome.RemoteDesktop.service
sudo systemctl disable org.gnome.RemoteDesktop.service
sudo systemctl mask org.gnome.RemoteDesktop.service
第三步:优化内核参数,让硬件跑得更快
Fedora 默认的内核参数比较保守,我们可以在 GRUB 里调整几个关键参数。
# 先备份原来的 GRUB 配置
sudo cp /etc/default/grub /etc/default/grub.bak
用你喜欢的编辑器打开 GRUB 配置:
sudo nano /etc/default/grub
找到 GRUB_CMDLINE_LINUX 这一行,添加以下参数:
GRUB_CMDLINE_LINUX="... rd.systemd.show_status=false rd.udev.log_level=3"
或者,如果你想更进一步优化 I/O 调度(特别是 SSD):
GRUB_CMDLINE_LINUX="... elevator=none"
对于旋转硬盘,可以用 mq-deadline:
GRUB_CMDLINE_LINUX="... elevator=mq-deadline"
修改完成后更新 GRUB:
# 在 Silverblue 上,可能需要用 grub2-mkconfig
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 或者 EFI 系统上
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
调整系统级别的性能参数
# 创建自定义 sysctl 配置
sudo tee /etc/sysctl.d/99-performance.conf << 'EOF'
# 减少交换分区的使用倾向(0 = 尽量不用swap,100 = 积极使用swap)
vm.swappiness=10
# 提高 inode 缓存效率
vm.vfs_cache_pressure=50
# 允许更多的文件句柄
fs.file-max=2097152
# 提高网络性能
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
net.core.netdev_max_backlog=65535
EOF
# 立即生效
sudo sysctl --system
第四步:精简 GNOME 的后台负担
GNOME 默认开启了很多后台功能,咱们挑一些关掉。
关闭 GNOME 的”最近文件”追踪
# 停止并禁用 Tracker 索引服务
systemctl --user stop tracker-miner-fs.service
systemctl --user disable tracker-miner-fs.service
# 禁用另一个 tracker 服务
systemctl --user stop tracker-miner-apps.service
systemctl --user disable tracker-miner-apps.service
关闭 GNOME 的自动内存整理
# 禁用 gnome-tweaks 里的某些后台刷新
# 通过 gsettings 调整
gsettings set org.gnome.desktop.interface show-battery-percentage false
gsettings set org.gnome.settings-daemon.plugins.power idle-brightness 30
减少 GNOME Shell 的动画
# 关闭动画效果,提升响应速度
gsettings set org.gnome.desktop.interface enable-animations false
这个改动立竿见影,系统会感觉”跟手”很多。
第五步:优化 Flatpak 启动性能
Flatpak 是 Silverblue 的应用分发方式,但它的启动速度确实可以优化。
减少 Flatpak 元数据刷新
# 编辑 Flatpak 配置
sudo tee /etc/flatpak/config.d/performance.conf << 'EOF'
[flavor]
name=performance
EOF
禁用不必要的 Flathub 仓库自动刷新
# 查看当前的 flatpak 仓库
flatpak remotes
# 禁用自动刷新(手动更新时再刷新)
flatpak remote-modify --disable-autorefresh flathub
只保留常用的运行时
# 查看已安装的运行时
flatpak list-runtimes
# 卸载不用的运行时(比如 32 位运行时,如果你不运行 32 位应用)
flatpak uninstall --delete-data --noninteractive org.freedesktop.Platform.32
flatpak uninstall --delete-data --noninteractive org.freedesktop.Platform.32.24
启用 Flatpak 的并行下载
# 编辑 Flatpak 配置,增加并发数
sudo tee /etc/flatpak/config.d/download.conf << 'EOF'
[Session]
MaxParallelDownloads=8
EOF
第六步:优化 systemd 启动顺序
systemd 允许你设置服务的依赖关系,让非关键服务延迟加载。
# 为一些不重要的服务设置启动延迟
sudo tee /etc/systemd/system.conf.d/delay-start.conf << 'EOF'
[Manager]
DefaultTimeoutStartSec=30s
DefaultTimeoutStopSec=15s
EOF
为特定服务设置优先级
# 创建一个片段文件,让 cups-browsed 启动更晚
sudo mkdir -p /etc/systemd/system/cups-browsed.service.d
sudo tee /etc/systemd/system/cups-browsed.service.d/delay.conf << 'EOF'
[Unit]
StartLimitBurst=0
After=network-online.target
EOF
第七步:调整磁盘 I/O 调度器
查看当前使用的调度器
# 查看每个磁盘的调度器
cat /sys/block/sda/queue/scheduler
cat /sys/block/nvme0n1/queue/scheduler
设置优化的 I/O 调度器
# 创建持久化的 I/O 调度器配置
sudo tee /etc/udev/rules.d/60-io-scheduler.rules << 'EOF'
# SSD 和 NVMe 设备使用 none 调度器
ACTION=="add|change", KERNEL=="sd[a-z]|nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
# 机械硬盘使用 mq-deadline
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="mq-deadline"
EOF
# 重新加载 udev 规则
sudo udevadm control --reload-rules
第八步:优化网络相关服务
禁用 IPv6(如果你的网络不支持)
# 临时禁用
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
# 永久禁用,编辑 sysctl 配置
sudo tee -a /etc/sysctl.d/99-performance.conf << 'EOF'
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
EOF
优化 DNS 解析
# 使用更快的 DNS 解析器,比如 systemd-resolved
sudo systemctl enable --now systemd-resolved.service
# 配置 DNS
sudo tee /etc/systemd/resolved.conf << 'EOF'
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=1.0.0.1 8.8.4.4
Domains=~.
LLMNR=no
MulticastDNS=no
Cache=yes
EOF
sudo systemctl restart systemd-resolved
第九步:检查并清理不再需要的服务
# 查看所有已禁用但仍在运行的服务
systemctl list-units --type=service --state=running | grep -i disabled
# 查看开机自动启动的所有服务
systemctl list-unit-files --type=service | grep enabled
# 找出启动时耗时超过 1 秒的服务
systemd-analyze blame | awk '$2 > 1 {print}'
第十步:监控优化效果
优化不是一劳永逸的,建议定期监控效果。
# 对比优化前后的启动时间
systemd-analyze
systemd-analyze blame | head -30
# 生成详细的启动分析图(需要 dot 工具)
systemd-analyze critical-chain
systemd-analyze plot > boot-analysis.svg
# 查看系统资源占用情况
top -bn1 | head -20
# 或者用更友好的 htop(需要先安装)
# flatpak install flathub org.htop.Htop
flatpak run org.htop.Htop
一些额外的小技巧
禁用 GNOME 的搜索索引
# 禁用 Nautilus 的文件索引
gsettings set org.gnome.nautilus.preferences.enable-search-bar false
# 禁用 GNOME 的全局搜索
gsettings set org.gnome.desktop.search-providers disabled ['org.gnome.software']
优化文件系统
# 检查文件系统健康状态
sudo fsck -f /dev/nvme0n1p2
# 对于 Btrfs(Silverblue 默认)
# 查看压缩状态
sudo btrfs filesystem usage /
# 如果空间紧张,可以考虑启用 zstd 压缩
# (需要重新挂载或重新格式化)
禁用不必要的 GNOME 扩展
很多 GNOME 扩展会在后台跑服务。进入 设置 → 扩展,关掉不用的。或者用 GNOME Tweaks:
# 安装 GNOME Tweaks
sudo dnf install gnome-tweaks
# 然后关掉不需要的扩展
gnome-tweaks
总结一下
优化 Fedora Silverblue 就像给汽车做保养,关键是要了解它的”身体构造”,然后有针对性地清理负担。上面的方法你可以循序渐进地尝试,每改一个地方就重启测试一下启动时间,看看效果如何。
记住几个核心原则:
- 按需禁用:不要盲目禁用所有服务,先确认你真的不需要
- 保持记录:把改过的配置记录下来,方便以后恢复
- 逐步测试:一次改几个地方,方便定位问题
优化完之后,你的 Silverblue 应该能快不少。如果还有什么问题,随时来问,咱们一起折腾!
