朋友,你手里那台跑着 Fedora Silverblue 的电脑,是不是有时候明明配置不差,但切换窗口、打开文件夹或者等待应用启动时,心里总会嘀咕一句:“这玩意儿是不是有点卡?”
别急着觉得是自己硬件不行,也别急着回退到传统的 Fedora Workstation。Silverblue 这种基于 Immutable(不可变)设计的系统,底层逻辑跟传统发行版完全不一样。很多“卡顿”其实不是性能瓶颈,而是使用习惯没跟上,或者是几个关键的配置点没调好。
今天咱们不聊虚的,直接上手。我会带着你从磁盘 I/O 机制聊到 systemd 服务优化,再深入到 flatpak 和容器化的特性,给你 5 个真正能摸得着、看得见的优化技巧。这些都是基于真实场景的实测总结,保准你看完能对 Silverblue 的爱恨情仇有个 clearer 的认识。
1. 理解“卡顿”的真相:为什么 Silverblue 感觉不一样?
在动手优化之前,咱们得先搞清楚,Silverblue 的“根”在哪。
传统的 Fedora Workstation 是可变文件系统,你可以随便 apt-get install 或者 dnf install 一个全局库,然后整个系统的行为可能就变了。但 Silverblue 不一样,它采用 OSTree 技术。你的根文件系统是只读的,所有系统级的软件更新都是通过原子操作替换整个镜像,而不是修改单个文件。
这意味着什么?意味着你的系统状态始终是一致的。但也带来了一个副作用:你对“安装软件”的直觉可能过时了。
当你觉得“卡”的时候,首先要排查的不是 CPU 占用,而是 I/O 等待(iowait) 和 Swap 抖动。因为 Silverblue 重度依赖 Flatpak 应用,而 Flatpak 应用在初次启动或更新时,会产生大量的元数据读取和文件解压,这在机械硬盘(HDD)或者低速 NVMe SSD 上,表现尤为明显。
所以,优化 Silverblue 的核心思路是:减少不必要的 I/O 压力 + 优化不可变系统的管理开销。
2. 技巧一:磁盘 I/O 优化——让 Btrfs 和 ZRAM 各就各位
Silverblue 默认使用 Btrfs 文件系统,并且通常启用 ZRAM(将内存的一部分压缩后当作 Swap 使用)。这是好事,但如果你发现系统在高负载下冻结感明显,可能是 I/O 调度器或者 Btrfs 的自动平衡机制在捣乱。
检查当前 I/O 调度器
在 Linux 中,不同的磁盘类型需要不同的调度器。对于 NVMe SSD,none 或 mq-deadline 通常是最佳选择;对于 HDD,bfq 更合适。
打开终端,运行以下命令查看你磁盘的调度器:
cat /sys/block/sda/queue/scheduler
假设你的磁盘是 /dev/nvme0n1,命令就是:
cat /sys/block/nvme0n1/queue/scheduler
如果输出里当前调度器不是推荐的那个(比如 NVMe 显示 none [mq-deadline] kyber),你可以临时修改测试效果:
echo mq-deadline | sudo tee /sys/block/nvme0n1/queue/scheduler
启用 Btrfs 的自动压缩(针对 NVMe SSD)
Btrfs 支持透明压缩,这在一定程度上可以减少写入量,提升寿命和速度。但默认可能没开,或者压缩算法不是最优。
Silverblue 通常默认启用 zstd 压缩。你可以检查并优化:
# 查看当前挂载的 Btrfs 选项
findmnt -no OPTIONS /
# 如果看到 compression=zstd:1 或 zstd:3,那已经很好了
# zstd:1 速度最快,压缩率稍低;zstd:3 平衡;zstd:17 压缩率最高但费 CPU
如果你想调整,需要编辑 /etc/fstab 中的挂载选项,添加 compression=zstd:1。注意:修改 fstab 后需要重新挂载或重启。对于普通用户,保持默认的 zstd 通常就够了,不要盲目追求最高压缩率,否则 CPU 占用会升高,反而感觉卡。
优化 ZRAM 大小
Silverblue 默认 ZRAM 大小通常是内存的 50%。如果你的内存是 16GB,ZRAM 就是 8GB。当内存压力大时,系统会将不常用的数据压缩存到 ZRAM。
如果你经常运行大型 Flatpak 应用(如 VS Code, Chrome),可能会觉得切换应用时有短暂的 I/O 停顿。这时候可以适当增加 ZRAM 大小,或者确保你的物理内存足够大(建议 16GB 起步,32GB 更佳)。
实测建议:使用 htop 观察 wa(iowait)列。如果 wa 经常高于 10-20%,说明 I/O 是瓶颈,此时优化磁盘调度器和检查是否有后台索引服务(如 tracker-miner)在疯狂读写是关键。
3. 技巧二:Flatpak 应用优化——告别“首次启动慢”
Silverblue 的灵魂是 Flatpak。但很多用户抱怨:“怎么这个应用第一次打开要等半天?” 这其实是 Flatpak 的正常行为,但你可以通过一些设置让它飞起来。
禁用不必要的 Flatpak 元数据刷新
Flatpak 会定期检查更新和刷新元数据。如果你网络连接不稳定,或者不想让后台频繁联网,可以调整刷新策略。
# 查看当前刷新配置
flatpak config --get remote-refresh-count
# 设置为每天刷新一次(默认可能是每次开机或更频繁)
flatpak config --set remote-refresh-count 1
使用 Flatpak 的 --user 安装避免权限问题
某些情况下,系统级的 Flatpak 应用可能会因为权限检查而变慢。对于个人用户,安装在 ~/.local/share/flatpak 下通常更快,因为不需要每次通过 PolicyKit 进行身份验证。
# 安装应用时默认使用 --user
flatpak install --user flathub com.spotify.Client
清理无用的 Flatpak 运行时和版本
随着时间的推移,旧的运行时(Runtime)会堆积,占用大量磁盘空间,并可能增加包管理的负担。
# 查看已安装的 Flatpak 运行时
flatpak list --app
# 删除旧的运行时(谨慎操作,确保你有其他应用依赖它)
flatpak uninstall --delete-data --unused
# 清理垃圾文件
flatpak repair
重要:flatpak repair 会检查所有已安装应用的依赖完整性,修复可能的损坏。定期运行(比如每月一次)可以让 Flatpak 库保持轻量高效。
4. 技巧三:服务管理——精简 systemd 目标
虽然 Silverblue 是 immutable 的,但 systemd 服务仍然是用户级的。你可以自由地启用、禁用、调整用户级服务(User Services),这些不会破坏系统镜像。
禁用不必要的用户服务
很多预装的服务你根本用不到。比如,如果你不用蓝牙,就不用跑蓝牙服务;如果你不用打印,就禁用 CUPS。
查看当前运行的用户服务:
systemctl --user list-units --type=service --state=running
禁用蓝牙服务(如果你不需要):
systemctl --user disable --now bluetooh.service
禁用打印服务:
systemctl --disable --now cups.service
注意:禁用系统级服务(如 NetworkManager)需要 sudo,但在 Silverblue 上,系统级服务是只读的,你无法直接禁用核心服务。你只能通过创建用户级覆盖来间接影响行为,或者接受这些服务的存在。
调整 systemd 的启动并行度
系统启动慢?试试调整 systemd 的并行启动参数。
编辑用户级的 systemd 配置:
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user.conf
添加或修改:
[Manager]
DefaultTimeoutStartSec=10s
DefaultTimeoutStopSec=10s
更激进一点,你可以启用并行启动的更多细节,但这需要编辑系统级的 /etc/systemd/system.conf(在 Silverblue 上,这通常在 /usr/lib/systemd/system.conf.d/ 下创建覆盖文件,但需谨慎操作,因为系统分区是只读的,你需要通过 rpm-ostree 来注入配置)。
更安全的做法:使用 systemd-analyze blame 找出启动最慢的服务,然后针对性地禁用或优化它们。
systemd-analyze blame
5. 技巧四:内核与硬件调优——释放 NVMe 和 CPU 潜力
Silverblue 默认使用最新的 Linux 内核(通常是最新的主线内核)。但有些硬件特定的优化需要手动开启。
优化 NVMe 电源管理
如果你的笔记本用 NVMe SSD,默认的电源管理可能过于保守,导致唤醒延迟。
检查当前 NVMe 电源策略:
cat /sys/class/nvme/nvme0/power/control
如果显示 auto,可以尝试改为 performance:
echo performance | sudo tee /sys/class/nvme/nvme0/power/control
或者,在 grubby 内核参数中添加 nvme_core.default_ps_max_latency_us=0,这告诉 NVMe 驱动不要进入深度睡眠状态,从而减少延迟。
如何在 Silverblue 中添加内核参数?
Silverblue 使用 rpm-ostree 来管理内核参数。不要直接编辑 /etc/default/grub,而是:
rpm-ostree kargs --append-if-missing=nvme_core.default_ps_max_latency_us=0
然后重启系统。这条命令会安全地将参数添加到内核启动命令行中,且是可逆的。
CPU 调度器优化
对于桌面使用,schedutil 调度器通常是最佳选择,它能快速响应负载变化。
检查当前调度器:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
如果不是 schedutil,可以临时切换:
echo schedutil | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
要永久生效,可以创建一个 systemd 用户服务或在启动脚本中设置,但更简单的方式是使用 TLP 或 powertop 等工具,它们会根据你的使用情况智能调整。
# 安装 powertop
rpm-ostree install powertop
# 启动并自动调优
sudo systemctl enable powertop
sudo systemctl start powertop
6. 技巧五:应用程序层面的“瘦身”——少即是多
最后,也是最容易被忽视的一点:你安装的应用本身。
Silverblue 用户倾向于安装大量 Flatpak 应用。但 Flatpak 应用通常比原生应用占用更多内存,因为每个应用都携带了自己的运行时库(尽管有共享,但初次加载开销大)。
评估应用必要性
每隔几个月,问自己一个问题:“这个应用我还常用吗?”
使用 flatpak list 查看所有已安装应用,然后卸载那些积灰的:
flatpak uninstall --delete-data <app-id>
优先使用 Web 应用
很多轻量级功能(如邮件、即时通讯、文档编辑)完全可以通过浏览器完成。Firefox 在 Silverblue 上是预装的,而且优化得非常好。用 Web 替代一个臃肿的 Flatpak 应用,能显著减少内存占用和启动时间。
监控内存和 Swap 使用
使用 gnome-system-monitor 或 htop 定期观察你的内存使用情况。如果 Swap 使用频繁,考虑增加物理内存,或者将 /tmp 挂载到 tmpfs(内存中),以减少磁盘 I/O。
# 检查 /tmp 是否已在 tmpfs
mount | grep /tmp
# 如果不在,可以在 /etc/fstab 中添加(需要 reboot)
tmpfs /tmp tmpfs defaults,size=4G 0 0
注意:设置 size=4G 是限制 tmpfs 最大占用内存为 4GB,防止内存耗尽。
结语:优化是一个持续的过程
Fedora Silverblue 的“卡”,很多时候是认知偏差和配置不当共同作用的结果。它不是一个“装好就用”的即插即用系统,尤其是对于从传统 Linux 发行版转过来的用户。
通过这 5 个技巧:
- 优化磁盘 I/O(Btrfs 压缩、调度器)
- 精简 Flatpak 管理(清理运行时、调整刷新策略)
- 调整 systemd 服务(禁用无用服务)
- 内核与硬件调优(NVMe 电源管理、CPU 调度)
- 应用程序瘦身(卸载闲置、使用 Web 应用)
你可以让 Silverblue 从一个“看似高大上但有点笨重”的系统,变成一个“流畅、稳定、高效”的生产力工具。
记住,不要害怕命令行。在 Silverblue 中,rpm-ostree 和 flatpak 是你最好的朋友。多探索,多测试,找到最适合你硬件和使用习惯的配置。
如果你按照上述步骤操作后,依然觉得卡顿,那可能是硬件本身的瓶颈(尤其是机械硬盘或内存不足)。在这种情况下,升级到更快的 SSD 或增加内存,比任何软件优化都更有效。
希望这篇指南能帮你重拾对 Silverblue 的信心!如果有具体问题,欢迎在评论区交流,咱们一起折腾。
