说实话,刚入手 Fedora Silverblue 的时候,我其实挺忐忑的。大家伙儿都说这系统是“未来”——immutable(不可变)架构、Atomic 更新、Rollback 特性听着都很高级。但用了一段时间后,偶尔还是会遇到那种“系统好像比传统 Fedora Workstation 慢半拍”的感觉,尤其是在切换应用或者刚开机的时候。
别慌,这不代表 Silverblue 不好,而是因为它“保护”得太好了。为了稳定性,它默认开启了一些抑制系统资源狂飙的特性。既然你追求流畅,那咱们就得动点“小手术”,在不破坏不可变系统核心的前提下,把这些隐形的减速带给拆了。这篇文章不整那些虚头巴脑的理论,咱们直接聊怎么让这台机器跑得像飞一样。
先把底子打好:为什么 Silverblue 会感觉“顿”?
在动刀之前,咱们得先搞清楚对手是谁。Silverblue 的卡顿通常来自三个地方:
- Snap 应用的预读机制:这是头号嫌疑犯。GNOME Software 默认安装了几个 Snap 应用,比如 Firefox、GIMP 等。Snap 启动时的 I/O 等待非常高,而且每次冷启动都要解压和加载,这种延迟感会扩散到整个桌面体验。
- zram 内存压缩的竞争:Silverblue 默认启用 zram,这很好,但在内存压力大时,CPU 要花费大量时间去压缩/解压数据,导致桌面卡顿。
- 默认的 I/O 调度器:对于 NVMe 固态盘,默认的设置可能不是最激进的。
咱们一个一个来解决,从最简单的开始。
第一步:解决“万恶之源”——处理 Snap 应用
如果你没怎么用过 Firefox 的 Snap 版本,那它是你系统里最“重”的包袱。它不仅启动慢,还会在后台偷偷进行 I/O 操作。
移除默认的 Snap Firefox
我们不需要彻底删掉 snapd(因为系统依赖它),而是要把那个占资源的 Firefox 换掉。
# 1. 先移除默认的 Snap Firefox
rpm-ostree uninstall firefox
# 2. 启用 RPM Fusion 仓库,这是获取高性能原生应用的关键
# 如果你还没启用 RPM Fusion,运行:
rpm-ostree install rpmfusion-free-release rpmfusion-nonfree-release
# 3. 重新注册并升级(这一步很重要,它会重新组合根文件系统)
rpm-ostree rebase rpm:// --refresh
等等,上面这段代码有个小问题。rpm-ostree install 后面应该紧跟包名,而启用仓库通常需要直接安装 rpm 包。让我修正一下,确保命令准确无误:
# 正确的步骤:安装 RPM Fusion 仓库配置包
rpm-ostree install rpmfusion-free-release rpmfusion-nonfree-release
# 清理旧的元数据并重新同步
rpm-ostree cleanup --rebase
# 现在安装原生的 Firefox(基于 Mozilla 官方 RPM)
rpm-ostree install firefox
# 最后,应用更改并重启,以便新的文件系统生效
reboot
重启后,你会发现 Firefox 的启动速度快了一倍不止。这就是原生包和 Snap 之间的鸿沟。
其他 Snap 应用的迁移
同样的逻辑适用于 GIMP 或 LibreOffice。如果这些应用让你感觉拖沓,直接用 rpm-ostree install 安装它们的原生版本,然后 uninstall Snap 版本。
第二步:微调内核参数,释放 NVMe 潜能
Silverblue 默认的内核参数偏向稳定和低功耗,但对于日常流畅度,我们可以稍微激进一点。
我们需要修改 sysctl 配置。注意,在 Silverblue 上,直接修改 /etc/sysctl.conf 是不推荐的,因为变更会在重启后被重置。我们应该使用 ostree 来管理这些配置,或者创建一个覆盖文件。但最简单的临时测试方法是:
# 查看当前的磁盘 I/O 调度器
cat /sys/block/nvme0n1/queue/scheduler
# 如果输出显示 [mq-deadline] kyber,说明还没用到最佳状态
# 让我们创建一个自定义的 sysctl 配置
sudo touch /etc/sysctl.d/99-silverblue-performance.conf
打开这个文件,写入以下优化内容:
# 1. 调整 VM 行为,减少不必要的磁盘 I/O
vm.swappiness=10
vm.vfs_cache_pressure=50
vm.dirty_ratio=10
vm.dirty_background_ratio=5
# 2. 优化网络性能(如果你经常用浏览器)
net.core.somaxconn=1024
net.ipv4.tcp_fastopen=3
写入后,让配置立即生效:
sudo sysctl --system
解释一下为什么要改这些:
vm.swappiness=10:默认是 60,这意味着系统很倾向于把内存数据换出到磁盘。调低到 10,让系统更愿意保留数据在 RAM 里,这对于多任务切换的流畅度提升巨大。vfs_cache_pressure=50:默认 100 意味着系统急于回收目录和索引节点缓存。调低到 50,让系统更“大方”地保留这些高频访问的元数据,减少重复 I/O。
第三步:GPU 驱动与渲染优化
Silverblue 对 Wayland 的支持是一流的,但有时候渲染引擎会有点“慵懒”。
启用 Hardware Composition(硬件合成)
对于 Nvidia 用户或者较新的 Intel/AMD 显卡,可以尝试启用某些实验性特性。但更稳妥的方法是检查并更新显卡驱动。
# 检查当前显卡驱动状态
dmesg | grep -i firmware
lsmod | grep -i nvidia # 如果是 Nvidia 用户
如果你使用的是开源驱动(Nouveau 或 Intel/AMD),确保系统是最新的:
rpm-ostree upgrade
调整 GNOME Tweaks 中的渲染设置
有时候,卡顿来自 GNOME Shell 的动画效果。我们可以用 gnome-tweaks 来微调,但我不建议你完全关闭动画(那样体验很割裂),而是优化它。
安装 Tweaks:
rpm-ostree install gnome-tweaks
安装后打开 Tweaks,在“Appearance”里,你可以将“Animations”从“Always”改为“Always”(这看起来没变,但其实是确保一致性)。更重要的是,在“Extensions”里,如果你安装了 Blur my Shell,记得调整它的性能模式,避免它过度消耗 GPU 资源。
第四步:管理后台服务与 Startup Applications
Silverblue 的 Flatpak 应用有时会偷偷在后台启动一些服务。比如,你装了 Spotify,它可能会启动一个自动更新检查进程。
使用 systemd --user 进行精细控制
查看哪些用户级服务在拖慢启动速度:
systemctl --user list-units --type=service --state=running | grep -v "^\s"
你会看到很多像 flatpak-systemd-user-*.service 的东西。这些通常无害,但如果你发现某个特定的 Flatpak 应用(比如 Steam 或 Discord)导致系统响应变慢,可以考虑禁用它的自动启动:
# 禁用特定 Flatpak 应用的自启动(以 Discord 为例,假设其 app id 是 com.discordapp.Discord)
# 先找到它的桌面文件位置
find /var/lib/flatpak/exports/share/applications -name "*Discord*"
# 然后在 ~/.config/autostart 创建一个覆盖文件,或者直接在 GNOME 设置里禁用
更简单的方法是使用 GNOME 自带的“启动应用程序”设置,或者安装 gnome-starter-projects 相关的工具来管理。
清理未使用的 Flatpak 运行时
Flatpak 很强大,但它会积累很多旧的运行时库,占用磁盘空间并可能引发依赖冲突。
# 列出已安装的 Flatpak 运行时
flatpak list --app --columns=application,runtime,version
# 移除不再使用的运行时
flatpak uninstall --delete-data --unused
# 定期清理缓存
flatpak uninstall --gc
这一步虽然不直接提升 CPU 性能,但能减少磁盘 I/O 压力,让系统在处理其他任务时更从容。
第五步:监控与诊断——找到真正的瓶颈
有时候,你觉得卡顿,其实是某个特定应用的问题,而不是系统本身。装一个专业的监控工具吧。
rpm-ostree install glances btop
- btop:一个颜值爆表的终端系统监控工具,比
top直观得多。它能让你一眼看出是 CPU、内存还是磁盘 I/O 在瓶颈。 - Glances:如果需要更详细的网络和网络连接信息,Glances 是神器。
当你感觉到卡顿发生时,立刻打开 btop,看看哪个进程占据了最多的资源。如果是一个 Firefox 标签页占用了 20% 的 CPU,那问题就不在系统优化,而在浏览器本身(可能是某个网页的脚本有问题)。
第六步:针对开发者的特殊优化
如果你是开发者,Silverblue 的优势就在于此。但容器化开发环境(Toolbox/Chroot)可能会带来额外的开销。
优化 Toolbox 容器的性能
Toolbox 是基于 Podman 的,它很快,但有时候挂载点会拖慢文件操作。
# 创建一个 Toolbox 容器时,考虑挂载一个 tmpfs 用于频繁读写
toolbox create --distro fedora --release 40
toolbox enter
# 在容器内,确保 package 是最新的
dnf update -y
如果你经常在 Toolbox 里编译代码,确保你的项目目录不在宿主机和容器共享的默认位置(/home),或者使用更高效的文件系统挂载选项。
# 在宿主机上,检查挂载选项
mount | grep home
如果看到 nodev 或 noatime,那是好事。如果没有 noatime,可以考虑在 /etc/fstab 中为 /home 分区添加该选项(但这需要重新挂载,有风险,建议谨慎操作)。
第七步:保持系统新鲜,但不要盲目追求新
Silverblue 的核心优势是 Atomic 更新。但有时候,新的内核版本可能会引入新的 bug 或性能回归。
如何回滚?
如果你刚更新完系统,发现变卡了,别慌,Silverblue 的设计初衷就是让你能一键回滚。
# 查看之前可用的部署
rpm-ostree status --booted
# 如果当前版本有问题,你可以重启并选择“Previous Deployment”进入旧版本
# 进入旧版本后,删除有问题的新版本:
rpm-ostree uninstall <package-name>
rpm-ostree rebase rpm://
结语:流畅是一种习惯
优化 Silverblue 不是一劳永逸的。它是一个持续的过程:定期清理 Flatpak,关注系统更新中的性能变化,监控资源使用。
但我必须承认,经过上述步骤后,大多数用户会感受到明显的提升。Firefox 启动快了,桌面切换更丝滑了,系统空闲时的资源占用也更低了。
最后,送你一句话:不要害怕探索。 Silverblue 的强大在于它的可定制性,而不在于它的“黑盒”属性。当你遇到卡顿,把它当作一个解谜游戏,用 btop 和 journalctl 去找到根源,然后精准打击。
祝你使用愉快,告别卡顿!
