说实话,拿到一块新硬盘或者重装完 Fedora Silverblue 的那一刻,兴奋劲儿过了之后,看着后台那个不知疲倦转圈的磁盘指示灯,心里总会嘀咕:这货是不是在偷偷干活?毕竟 Silverblue 的核心设计哲学是“不可变”,这意味着我们的根文件系统是只读的,所有的写操作都会被重定向或者通过 rpm-ostree 来处理。虽然这让系统极其稳定,甚至让你想回滚到昨天的状态都变得易如反掌,但不可否认,默认配置下那些为了兼容性而开启的服务,确实会挤占你宝贵的 NVMe 或 SSD 的写入寿命,并在某些场景下拖慢响应速度。
咱们今天不聊虚的,就从你第一次开机登录那个熟悉的 GNOME 桌面开始,一步步把这台机器调教得既快又健康。我会把整个过程拆解开,就像咱们坐在咖啡馆里,我拿着你的电脑给你演示一样。
第一步:别急着折腾,先看看你的“底子”
在动手删除任何服务之前,我们得先搞清楚现状。很多人一上来就 systemctl disable 一通,结果发现蓝牙没了、打印废了、甚至 Wi-Fi 都连不上了,那才是真的坑。所以,观察是第一步。
打开终端,执行这个命令,它会给你一个系统服务的全景图:
systemctl list-units --type=service --state=running
你会看到一大长串列表。别慌,我们重点关注那些名字听起来就很“重”或者你觉得这辈子都用不到的服务。比如 cups.service(打印服务),如果你家里根本没打印机,它在那里跑着就是个浪费;还有 bluetooth.service,如果你用的是有线键盘鼠标,或者压根没蓝牙设备,它也是个多余的存在。
另外,Silverblue 用户必须了解的一个关键点是 rpm-ostree 的写入特性。每次你运行 rpm-ostree install 安装软件包时,系统实际上是在根文件系统的覆盖层(overlay)中写入数据。虽然现代 NVMe 的写入寿命通常足够你用到机器报废,但尽量减少不必要的 rpm-ostree 操作,本身就是一种“保护”。
这里有个小技巧,你可以用这个命令看看最近有哪些服务频繁被唤醒:
journalctl -u <服务名> --since "24 hours ago" | grep -c "Started"
把 <服务名> 换成你怀疑的那些,比如 cups 或 bluetooth。如果一天内启动了上百次,那确实该考虑一下了。
第二步:理解 Silverblue 的独特之处——rpm-ostree 与 Flatpak
在优化之前,我得跟你强调 Silverblue 和普通 Fedora Workstation 的一个巨大区别:软件安装方式。
在普通 Fedora 上,你可能习惯 dnf install 一路装到底。但在 Silverblue 上,我们推荐使用 Flatpak 来安装大部分用户级应用(如 Spotify, Zoom, Discord 等),而只使用 rpm-ostree install 来安装系统级组件(比如特定的内核模块、驱动程序,或者一些没有 Flatpak 版本的工具)。
为什么这跟性能优化有关?因为 rpm-ostree 的每一次安装、更新或删除,都会触发一个“重搭镜像”(rebasing)的过程。这个过程涉及大量的磁盘 I/O,尤其是读取和写入你的根文件系统覆盖层。
优化策略一:用 Flatpak 替代不必要的 rpm-ostree 安装。
假设你想要 Spotify。在 Workstation 上,你可能会直接 rpm-ostree install spotify。但在 Silverblue 上,更优雅、对系统层干扰更小的方式是:
flatpak install flathub com.spotify.Client
这样做的好处是,Spotify 完全运行在沙盒里,它不会向你的不可变根文件系统写入任何东西。你的 rpm-ostree 镜像保持干净,系统升级时也不需要重新打包包含 Spotify 的镜像,大大减少了潜在的磁盘写入操作和升级时间。
当然,有些软件没有 Flatpak 版本,或者你确实需要系统级的集成(比如某些专有编码器),这时候再考虑 rpm-ostree install。每次执行这个命令前,心里问自己:我真的必须把它装进系统层吗?
第三步:精准“切除”——禁用不必要的高频服务
好了,进入正题。我们要开始禁用那些真正拖慢速度、浪费电量和磁盘寿命的服务了。记住,我们的原则是“最小化”,而不是“极端化”。
1. CUPS 打印服务
如果你确定不使用打印机,这是最容易优化的项。CUPS 服务不仅占用内存,还会在后台定期轮询打印队列,产生不必要的磁盘活动和网络扫描。
禁用方法:
sudo systemctl disable --now cups.service
sudo systemctl disable --now cups.path
sudo systemctl disable --now cups.socket
解释:--now 参数会立即停止服务,而不仅仅是禁用开机启动。cups.path 和 cups.socket 是路径和 socket 触发机制,也需要一并禁用,否则它们可能会在某个时刻悄悄把服务拉起来。
2. Bluetooth 蓝牙服务
没有蓝牙设备?那就别让它扫描周围的一切了。
sudo systemctl disable --now bluetooth.service
简单粗暴,效果立竿见影。你会发现后台网络扫描的声音(如果有的话)变小了,虽然对 NVMe 来说这个影响微乎其微,但对电池续航是有帮助的,尤其是在笔记本电脑上。
3. ModemManager 调制解调器管理
这个服务很多用户根本不知道它是干嘛的。它主要用于管理移动宽带调制解调器(比如 4G/5G 上网卡)。如果你不用这些设备,它就在后台闲着。
sudo systemctl disable --now ModemManager.service
4. PackageKit PaketKit 后台包服务
这是一个比较微妙的选项。PackageKit 是 GNOME Software 等图形化软件中心背后的服务,它负责处理包事务。禁用它会让你无法使用 GUI 软件中心安装应用,但如果你主要用 Flatpak 或者手动终端操作,它可以减少后台的自动检查频率。
注意:禁用 PackageKit 后,yum/dnf 的自动更新通知可能会失效,但不影响你手动执行更新。
sudo systemctl disable --now packagekit.service
sudo systemctl disable --now packagekit-offline-update.service
5. systemd-resolved 与 DHCP 客户端(进阶)
如果你使用静态 IP,或者你对自己的 DNS 和 DHCP 配置非常有信心,可以进一步精简网络相关服务。但这一条风险较高,建议普通用户跳过,除非你明确知道自己在做什么。对于大多数用户,保持 systemd-networkd 或 NetworkManager 的默认状态即可。
第四步:优化 systemd 的“懒”程度
有时候,服务本身没问题,问题是系统启动它们的方式太“积极”了。systemd 有一个 LazyShutdown 和 DefaultDependencies 的概念,我们可以通过调整一些参数来让系统启动更“懒”,从而减少冷启动时的磁盘压力。
编辑 /etc/systemd/system.conf:
sudo nano /etc/systemd/system.conf
找到并修改(如果注释了,去掉前面的 #):
# 默认值:true
# 设为 false 可以让系统在关机时更彻底地停止服务,有时能减少下次启动时的恢复开销
# 但通常保持默认即可
# 默认值:true
# 设为 false 可以减少一些非核心服务的依赖检查,加快启动
# 谨慎使用,可能导致某些服务启动顺序错误
# DefaultDependencies=no
更安全的做法是调整 TimeoutStartSec 和 TimeoutStopSec。如果某个服务启动特别慢,导致整个系统卡顿,你可以适当增加超时时间,避免系统因为等待它而阻塞其他服务。
sudo systemctl set-property <服务名> TimeoutStartSec=30
把 <服务名> 换成你那个卡住的服务,比如 NetworkManager-wait-online.service。这个服务经常导致开机等待很久,因为它在等待网络连接完全建立。如果你不需要严格依赖网络才能启动其他服务(比如大多数桌面场景),可以考虑禁用它:
sudo systemctl disable --now NetworkManager-wait-online.service
第五步:针对磁盘寿命的特殊优化——TRIM 与 I/O 调度器
Silverblue 用户通常使用 NVMe SSD。对于这类存储设备,性能优化的重点之一确实是延长寿命和保持速度。
1. 确保 TRIM 开启
TRIM 命令告诉 SSD 哪些数据块不再使用,可以清空了,这是保持 SSD 长期高性能的关键。Fedora 默认通常已经开启了每周一次的 TRIM,但我们可以检查并优化它。
查看 TRIM 状态:
systemctl status fstrim.timer
如果没启用,开启它:
sudo systemctl enable --now fstrim.timer
你甚至可以调高 TRIM 的频率,比如每天一次,而不是每周一次,这样可以避免 SSD 缓存填满导致的突发写入延迟。
sudo systemctl edit fstrim.timer
在弹出的编辑器中,添加:
[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true
这样,TRIM 每天都会运行一次,确保 SSD 始终处于最佳状态。
2. 调整 I/O 调度器
虽然现代 NVMe 设备通常使用 none 或 mq-deadline 调度器,但确认一下无妨。
cat /sys/block/nvme0n1/queue/scheduler
输出应该类似 [none] mq-deadline kyber bfq,方括号里的是当前使用的。如果没有 none,你可以尝试切换到 kyber,它在混合负载下表现良好,且对延迟敏感。
sudo vi /etc/default/grub
在 GRUB_CMDLINE_LINUX 中添加:
blk-mq-poll
然后更新 grub:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
注意:这需要重启。
第六步:监控与验证——优化是否真的有效?
做完所有这些后,你需要验证效果。别只凭感觉,用数据说话。
1. 启动时间对比
使用 bootchart 或简单的 systemd-analyze。
systemd-analyze blame
这个命令会列出所有启动服务及其耗时,按时间排序。你应该能看到之前禁用的服务已经消失或大幅减少。
systemd-analyze critical-chain
这个命令显示关键路径,告诉你哪个服务阻塞了其他服务。
2. 磁盘 I/O 监控
安装 iotop 和 dstat。
sudo rpm-ostree install iotop dstat
# 需要重启以应用新的 rpm-ostree 变更
重启后,运行 iotop -o 只看有 I/O 活动的进程。观察在没有用户交互时,后台是否有异常的写入行为。
3. 内存与 CPU 空闲状态
使用 top 或 htop 观察空闲时的 CPU 和内存占用。对比优化前后的数据。你应该会发现空闲时的 CPU 使用率更低,因为后台服务少了。
第七步:一个真实的案例——从“卡顿”到“丝滑”
让我给你讲一个我朋友的故事。他有一台 ThinkPad X1 Carbon,安装了 Fedora Silverblue。他抱怨开机后几分钟内电脑会发烫,风扇狂转,而且偶尔点击应用会有半秒的卡顿。
我们做了以下操作:
- 禁用了 CUPS(他没打印机)。
- 禁用了 Bluetooth(他用有线耳机)。
- 禁用了 ModemManager。
- 禁用了 PackageKit(主要用 Flatpak)。
- 将 TRIM 频率提高到每天。
- 移除了几个他从未使用过的
gnome-tour相关的默认应用。
一周后,他反馈说:
- 开机后电脑迅速进入空闲状态,不再持续发烫。
- 点击应用几乎是瞬间响应,没有延迟。
- 电池续航增加了大约 30 分钟。
这并非魔法,而是去除了不必要的负担。系统资源是有限的,每去掉一个不必要的服务,你就把更多的 CPU 周期、内存带宽和磁盘 I/O 留给真正重要的任务。
结语:优化是一个持续的过程
最后,我想提醒你,性能优化不是一劳永逸的。随着你安装新软件、使用新硬件,系统状态会变化。建议你每季度检查一次 systemctl list-units --type=service --state=running,看看有没有新增的“懒惰”服务。
另外,不要害怕尝试。Silverblue 的最大优势是它的不可变性。如果你禁用某个服务后发现系统功能缺失,只需在 GNOME Tweaks 或终端中重新启用它,然后重启即可。系统会恢复到你之前的状态,或者你可以回滚到上一个启动条目。
希望这份指南能帮你打造一台既快速又耐用的 Fedora Silverblue 系统。记住,最好的优化是让系统“隐形”——你感觉不到它的存在,但它无处不在地为你服务。
