嘿,朋友。既然你点开了这篇内容,我猜你大概率是刚把 Fedora Silverblue 安装好,正对着那个熟悉的 Flatpak 图标和不可思议的”不可写”系统分区感到既兴奋又有点小迷茫。别慌,我完全理解这种心情。
Silverblue 是个好东西,immutable(不可变)的设计让系统像手机一样稳定,回滚像切蛋糕一样简单。但它的”固执”也让很多习惯了传统 RPM 包管理的用户踩了不少坑:开机好像没以前快?磁盘看着有点大?想删个东西发现 sudo rm 没反应?
我这就给你来点实在的。不用那些虚头巴脑的术语,咱们就像聊天一样,把这 5 个亲测有效的优化招数过一遍。我会先告诉你为什么要这么做(给小朋友也能听懂的逻辑),然后给出具体的操作命令,最后说说注意事项。
第一招:清理”孤儿”容器镜像,给根分区腾出大块头
咱们先来聊聊 Silverblue 的”肚子”——/usr 分区。你可能注意到了,rpm-ostree 虽然只保存几个历史版本,但 Flatpak 是个”大胃王”。每一次安装或更新应用,它都会在 /var/lib/flatpak/app 下留下旧版本的缓存。时间一长,这些”尸体”堆在一起,磁盘空间就告急了。
更关键的是,Silverblue 的 /home 分区通常不大,而系统镜像和 Flatpak 数据都压在有限的空间里。如果磁盘撑到 90% 以上,系统不仅卡顿,甚至可能无法进行系统更新。
怎么清理?
你不需要手动去翻目录找那些乱七八糟的文件,Silverblue 内置了一个非常安全的清理命令。打开终端,运行:
flatpak uninstall --unused
这条命令会扫描所有已安装应用的未使用依赖项和旧运行时(runtime),然后安全删除。你可以把它想象成整理衣柜:衣服(应用)你还在穿,但那些搭配失败、永远没出门过的旧配饰(冗余依赖),就坚决扔掉吧。
进阶技巧:定期自动清理
如果你怕忘,可以把它加到 cron 里,每周自动执行一次。但鉴于 Silverblue 的原子更新特性,我更推荐你每做一次大版本更新(比如从 40 升到 41)后,手动执行一次,效果最明显。
小心什么?
- 不要使用
flatpak repair以外的强制清理命令,除非你清楚自己在做什么。 - 清理后,你之前安装的应用不会丢失,只是删除了不再需要的共享库。但如果某个应用特别依赖某个旧运行时,它可能会报错,到时候重新安装一次应用就好了。
第二招:关闭 systemd 的随机同步服务,释放启动时的 I/O 压力
这是很多人不知道的一个隐藏优化点。Silverblue 默认启用了一些用于”健康检查”的 systemd 服务,比如 systemd-tmpfiles-clean.timer 和 fstrim.timer。这些服务会在系统空闲时定期运行,清理临时文件、优化 SSD 性能。
听起来很美好,对吧?但在启动初期,这些服务可能会抢占 I/O 带宽,导致桌面环境加载变慢,甚至出现短暂的卡顿。特别是对于机械硬盘用户,或者 I/O 敏感的轻度办公场景,关掉它们能显著减少启动时的”繁忙感”。
怎么操作?
# 禁用临时文件清理定时器
sudo systemctl disable --now systemd-tmpfiles-clean.timer
# 禁用文件系统 trim 定时器(如果你用的是 SSD,建议保留 fstrim,但如果是 HDD 可以禁用)
sudo systemctl disable --now fstrim.timer
# 禁用其他不常用的系统维护服务
sudo systemctl disable --now systemd-oomd.service
原理解释:
systemd-tmpfiles-clean.timer 负责清理 /tmp 等目录下的过期文件。日常办公中,你很少会堆积大量临时文件,所以这个服务的重要性不高。关掉它,启动时少了一个”家务活”,系统响应更快。
fstrim.timer 是 SSD 的维护服务。如果你用的是 SSD,建议保留,因为它能延长 SSD 寿命。但如果你用的是 NVMe SSD,现代驱动已经能很好地进行垃圾回收,手动 trim 的频率可以降低。你可以改为每月运行一次:
sudo fstrim -av
注意:
这些服务禁用后,系统依然可以正常运行。如果你后来发现某些问题(比如磁盘空间突然爆满),可以重新启用:
sudo systemctl enable --now systemd-tmpfiles-clean.timer
第三招:精简 GNOME 扩展,告别”内存黑洞”
GNOME 扩展是 Silverblue 的双刃剑。它让桌面高度定制,但也可能是性能杀手。有些扩展写得不好,会在后台疯狂占用 CPU 和内存,甚至导致界面冻结。
我见过太多用户装了十几个扩展,然后抱怨系统卡。其实,很多扩展的功能用原生 GNOME 就能实现,或者根本不需要。
怎么优化?
- 盘点你的扩展: 打开
Extensions应用,逐个检查每个扩展的”资源占用”。有些扩展在设置里会显示 CPU/内存使用率。 - 禁用不常用的: 比如
Dash to Dock,如果你不需要那个侧边栏,完全可以禁用,GNOME 原生的活动概览已经很好用了。 - 替换为轻量级方案: 比如你想隐藏顶部栏,用
Hide Top Bar扩展;想自定义工作区,用Workspace Grid。这些都是经过社区验证的轻量级扩展。
一个实用的技巧:
你可以通过 gnome-tweaks 工具来管理扩展,它比 Web 界面更直观。安装方式:
# 在 Silverblue 中,使用 Flatpak 安装
flatpak install flathub org.gnome.Tweaks
然后运行 gnome-tweaks,在”扩展”选项卡中管理。
小心什么?
- 不要禁用
Dash to Dock或Dash to Panel后,发现找不到应用启动器了。这种情况下,你可以按Super键打开活动概览,所有应用都在那里。 - 某些扩展依赖于特定的 GNOME 版本,升级系统后可能会失效。建议保留官方仓库的扩展,避免使用来源不明的扩展。
第四招:使用 btrfs 自动压缩,节省磁盘空间同时提升读取速度
Silverblue 默认使用 btrfs 文件系统。这个文件系统有一个强大的功能:透明压缩。开启后,系统在写入数据时自动压缩,读取时自动解压。这不仅节省空间,还能减少 I/O 操作,提升系统响应速度。
默认情况下,Silverblue 可能没有开启压缩。你可以通过 btrfs 的压缩算法(如 zstd)来优化。
怎么开启?
# 查看当前压缩状态
btrfs filesystem show
# 启用 zstd 压缩(推荐,速度快且压缩率高)
sudo btrfs property set / zstd:1
# 或者使用 lzo 压缩(速度更快,但压缩率稍低)
sudo btrfs property set / lzo:1
原理:
zstd:1 表示使用 zstd 算法,压缩级别为 1(最低压缩,最高速度)。对于日常办公,这个设置足够了。如果你更在意空间节省,可以用 zstd:15,但会稍微增加 CPU 负担。
注意:
- 压缩功能只对新写入的文件生效。已有的文件不会自动压缩。如果你想压缩现有文件,可以使用
btrfs filesystem defragment命令,但这是一个耗时操作,建议在空闲时间执行。 - 如果你使用的是 SSD,压缩反而可能增加写入放大,降低寿命。但对于 HDD 或混合存储,压缩能显著提升性能。
第五招:优化 Flatpak 应用的启动速度,使用 flatpak run --use-systemd
Flatpak 应用虽然方便,但启动时可能需要加载一些共享库和环境变量,导致启动慢。尤其是那些依赖多个运行时的大型应用(如 VS Code、LibreOffice)。
一个鲜为人知的技巧是:使用 systemd 来管理 Flatpak 应用的启动。这样可以复用系统已有的服务,减少重复加载,加速启动。
怎么操作?
# 编辑 Flatpak 应用的.desktop 文件,添加 systemd 支持
# 找到你的应用,比如 VS Code
flatpak list --columns=application | grep vscode
# 然后编辑对应的 .desktop 文件
# 通常位于 ~/.local/share/applications/ 或 /var/lib/flatpak/exports/share/applications/
在 .desktop 文件的 [Desktop Entry] 部分,添加:
StartupNotify=true
X-GNOME-Autostarted=true
然后,你可以创建一个 systemd 用户服务来管理这个应用:
mkdir -p ~/.config/systemd/user
创建服务文件:
cat > ~/.config/systemd/user/vscode.service << 'EOF'
[Unit]
Description=VS Code
After=graphical-session.target
[Service]
Type=simple
ExecStart=flatpak run --branch=stable --command=code com.visualstudio.code
Restart=on-failure
RestartSec=5
[Install]
WantedBy=graphical-session.target
EOF
然后启用服务:
systemctl --user daemon-reload
systemctl --user enable vscode.service
这样,VS Code 就会通过 systemd 管理,启动时更稳定,崩溃后自动重启,而且不会占用过多的系统资源。
原理解释:
systemd 是一个强大的服务管理器,它能更好地控制进程的优先级和资源限制。通过 systemd 启动 Flatpak 应用,可以避免多个实例同时启动时的资源竞争,提升整体系统响应速度。
小心什么?
- 这个技巧需要一定的 Linux 知识,不适合完全的新手。如果你不熟悉 systemd,建议先使用默认的 Flatpak 启动方式。
- 如果你使用多个 Flatpak 应用,为每个应用创建 systemd 服务会很繁琐。可以考虑使用
flatpak-spawn工具,它已经内置了一些优化。
总结一下
这 5 招,从清理磁盘空间、关闭不必要的系统服务、精简扩展、优化文件系统到加速应用启动,层层递进。你不需要全部做完,可以根据自己的需求选择。
核心思想:
- 少即是多: 禁用不必要的服务,清理冗余数据。
- 透明压缩: 利用 btrfs 的特性,节省空间并提升 I/O 效率。
- 精细管理: 用 systemd 管理 Flatpak 应用,避免资源浪费。
最后的小建议:
Silverblue 的魅力在于它的稳定性和可重复性。在优化系统之前,建议你先创建一个系统快照(rpm-ostree rollback),以防万一。这样,如果你发现某个优化导致了问题,可以轻松回滚到之前的状态。
希望这些技巧能帮你把 Fedora Silverblue 调教得更流畅。如果有其他问题,欢迎随时交流。毕竟,Linux 社区的魅力就在于大家一起学习,一起进步。祝你办公愉快!
