Fedora Silverblue电脑卡顿速度慢怎么办磁盘空间不足开机慢应用程序加载慢从系统设置到优化技巧一步步教你提升运行效率让老电脑也流畅
Fedora Silverblue 是个很特别的系统,它用了 OSTree 和容器化的思路,这让系统更稳定,但也带来了一些”传统 Linux”没有的问题——比如不知道东西装哪儿了、磁盘空间说没就没、某些优化手段不能用。别慌,咱们一步步来。
先搞清楚:你的电脑到底卡在哪儿了
在动手之前,先像个医生一样”听诊”。盲目装清理软件不如先看清问题在哪。
打开终端,跑这几个命令,看看系统真实的状态:
# 看看磁盘用了多少
df -h
# 看看根分区和/home分区哪个压力大
du -sh /var /tmp /home
# 看看系统资源占用
top -o %MEM
# 或者更友好的 htop(没装的话:sudo dnf install htop)
# 看看启动时哪些服务拖慢了速度
systemd-analyze blame
# 看看开机总耗时
systemd-analyze
我见过最多的情况是:/var 文件夹膨胀到几十G,里面塞满了旧的容器镜像和 OSTree 缓存。Silverblue 的 /usr 是只读的,所有的缓存和临时文件都堆在 /var 里,时间一长,磁盘空间直接告急。
磁盘空间怎么就没了?
1. 清理旧的容器镜像(这是大头)
Silverblue 用 Podman 运行容器应用,每次更新软件或者你手动拉取镜像,旧的镜像不会被自动删掉。
# 查看当前所有镜像占了多少空间
podman images --all --digests
# 清理悬空的镜像(dangling images)
podman image prune
# 清理所有未被使用的镜像(慎用,会删掉你本地拉的所有镜像)
podman image prune -a
# 更激进:彻底清理所有容器、镜像、卷
podman system prune -a --volumes
清理前后对比一下磁盘空间:
df -h /var
2. 清理 OSTree 的旧系统版本
每次 Silverblue 大版本更新,旧的 OS 部署会留在磁盘上,以防你回滚。时间一长,这些旧版本能吃掉好几个G。
# 查看当前所有的 OSTree 部署
ostree deployments
# 你会看到类似这样的输出:
# ● default:fedora/x86_64/silverblue/40 ... running
# default:fedora/x86_64/silverblue/39 ...
# 删除旧的部署(保留当前和最近一个)
sudo ostree cleanup --deployments-to-keep=1
# 或者手动删除指定部署(先记下 deployment 编号)
sudo ostree cleanup --delete=<编号>
3. 清理用户缓存
# 清理用户级别的缓存
rm -rf ~/.cache/pip
rm -rf ~/.cache/thumbnails/*
rm -rf ~/.cache/gstreamer-1.0/*
# 清理 Flatpak 缓存(Flatpak 应用用多了这里很大)
flatpak uninstall --unused
4. 看看谁是磁盘空间的”杀手”
如果清理完还是不够用,用这个脚本找大文件:
# 扫描 /home 目录下超过 100M 的文件
sudo find /home -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{ print $NF ": " $5 }' | sort -k2 -h
# 或者用 ncdu 这个交互式工具(强烈推荐)
sudo dnf install ncdu
ncdu /
ncdu 是个神器,它会以交互式的界面显示每个目录占了多少空间,你可以一层层点进去看,比看命令行输出直观多了。
开机慢?让 systemd 跑得快一点
1. 找出拖慢启动的元凶
# 查看每个服务启动耗时(按时间排序)
systemd-analyze blame | head -30
# 查看启动过程中哪个环节最耗时
systemd-analyze critical-chain
看到某个服务花了十几秒甚至几十秒?那就是它了。
2. 禁用不需要的服务
# 先看看有哪些服务可以禁用
systemctl list-unit-files --type=service --state=enabled | grep -v "resolvconf\|network\|ssh\|dbus"
# 常见可以禁用的服务(根据你的情况选择)
sudo systemctl disable bluetooth.service
sudo systemctl disable cups.service # 打印机服务,不用打印机可以关
sudo systemctl disable ModemManager.service # 调制解调器服务,台式机一般不用
sudo systemctl disable thermald.service # 温度管理,老电脑散热没问题可以关
sudo systemctl disableaccounts-daemon.service # 账户服务,有些情况下可以关
3. 调整启动优先级
有些服务不需要在开机时就启动,可以延迟到用户登录后再启动:
# 创建一个 timer 来延迟启动某个服务
# 比如把 cups(打印机)延迟到 30 秒后启动
sudo mkdir -p /etc/systemd/system/cups.service.d/
sudo tee /etc/systemd/system/cups.service.d/delay.conf <<EOF
[Service]
ExecStartPost=/bin/sleep 30
EOF
sudo systemctl daemon-reload
应用程序加载慢?优化应用本身
1. Flatpak 应用的优化
Silverblue 的应用大多是 Flatpak 格式,Flatpak 应用在首次启动时会做 JIT 编译,所以第一次慢是正常的。但之后应该很快。如果一直慢:
# 查看 Flatpak 应用列表
flatpak list
# 清理 Flatpak 的运行时缓存
flatpak uninstall --unused
# 为特定应用启用优化
# 比如 Chrome/Chromium:
flatpak override --fs=/tmp chromium
# 检查 Flatpak 是否有更新(新版本通常更快)
flatpak update
2. 浏览器是个吞资源大户
如果你用 Firefox 或 Chrome,它们本身就能吃掉好几个G的内存。在 Silverblue 上,通常用 Flatpak 版本:
# Firefox 内存优化:打开 about:config,调整以下设置
# 内存低的电脑建议:
# dom.ipc.processCount = 4(减少进程数)
# browser.cache.memory.capacity = -1(自动,但可以设成 512000 约 500MB)
3. 检查内存是否真的够用
# 查看内存使用情况
free -h
# 查看交换分区使用(如果 Swap 使用很高,说明内存不够)
cat /proc/swaps
swapon --show
# 查看 ZRAM(Silverblue 默认用 ZRAM 作为交换)
zramctl
如果内存只有 4G 或更少,建议至少加到 8G。这是最直接的硬件升级。
系统设置层面的优化
1. 调整 Swappiness(交换偏好)
Linux 默认倾向于使用 Swap,但 SSD 的 Swap 会加速磨损,而且 Swap 比内存慢得多。适当调低 swappiness 可以减少不必要的交换:
# 查看当前 swappiness 值
cat /proc/sys/vm/swappiness
# 临时修改(重启后失效)
sudo sysctl vm.swappiness=10
# 永久修改:编辑 /etc/sysctl.conf
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
# 如果是 ZRAM,也可以调整压缩比
echo 80 | sudo tee /sys/block/zram0/compr_data_blocks_percent
2. 调整 I/O 调度器
SSD 和 HDD 的 I/O 调度策略不同:
# 查看当前磁盘和调度器
lsblk
cat /sys/block/sda/queue/scheduler
# 对于 SSD,通常用 "none" 或 "mq-deadline"
# 对于 HDD,通常用 "bfq" 或 "mq-deadline"
# 临时修改
echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler
# 永久修改:创建 udev 规则
sudo tee /etc/udev/rules.d/60-iosched.rules <<EOF
ACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="mq-deadline"
EOF
3. 调整透明大页(THP)
透明大页在某些情况下可以减少内存管理开销,但在桌面使用场景下可能适得其反:
# 查看当前 THP 设置
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
# 禁用 THP(对桌面使用通常更好)
sudo tee /etc/udev/rules.d/99-thp.rules <<EOF
# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
# 或者创建服务来在启动时执行
sudo tee /etc/systemd/system/disable-thp.service <<EOF
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable disable-thp.service
sudo systemctl start disable-thp.service
4. 调整 CPU 性能模式
# 查看当前性能模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 安装 tlp(电源管理工具)
sudo dnf install tlp
sudo tlp start
# 或者直接设置为性能模式
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 永久设置:编辑 /etc/default/tlp
sudo sed -i 's/CPUPPOWer=^/CPUPPOWer=performance/' /etc/default/tlp
sudo tlp start
检查硬件是否真的到了极限
有时候软件优化到头了,问题还是出在硬件上。
# 查看 CPU 信息
lscpu | grep -E "Model name|CPU\(s\)|Thread|Core|Socket|CPU MHz"
# 查看内存型号和时间
sudo dmidecode -t memory | grep -E "Speed|Size|Type|Locator"
# 查看硬盘型号和转速
lsblk -d -o NAME,SIZE,TYPE,ROTA,MODEL,STATE
# ROTA=0 是 SSD,ROTA=1 是 HDD
# 查看硬盘温度(如果支持)
sudo apt install smartmontools # 或者 dnf install smartmontools
sudo smartctl -a /dev/sda | grep -E "Temperature|Usage"
# 查看显卡信息
lspci | grep -i vga
如果你的硬盘还是机械硬盘(ROTA=1),那换 SSD 是最立竿见影的升级。如果是老 CPU 只有 2 核 2 线程,那加内存条或者换块好点的硬盘才是正解。
一些”旁门左道”但有用的技巧
1. 减少系统日志的磁盘占用
# 查看 journal 日志用了多少空间
journalctl --disk-usage
# 限制日志大小,只保留最近 3 天
sudo journalctl --vacuum-time=3d
# 或者限制日志大小不超过 100M
sudo journalctl --vacuum-size=100M
2. 关闭不需要的鼠标加速
鼠标加速会让操作感觉”不跟手”,尤其是在老电脑上:
# 查看当前鼠标设置
xinput list
xinput list-props <设备ID>
# 关闭鼠标加速
xinput set-prop <设备ID> "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1
3. 减少动画效果
# GNOME 桌面:禁用动画
gsettings set org.gnome.desktop.interface enable-animations false
# 或者用 GNOME Tweaks 来精细调整
sudo dnf install gnome-tweaks
4. 清理旧的内核模块缓存
# 查看 initramfs 大小
ls -lh /boot/initramfs-*.img
# 清理旧的内核模块缓存
sudo dnf autoremove
实时监控:养成长期维护的习惯
优化不是一劳永逸的事,建议你养成定期查看系统状态的习惯:
# 每周跑一次的检查脚本,可以保存为 ~/check-system.sh
#!/bin/bash
echo "=== 磁盘使用 ==="
df -h /
echo -e "\n=== 内存使用 ==="
free -h
echo -e "\n=== 启动最慢的服务 Top 10 ==="
systemd-analyze blame | head -10
echo -e "\n=== 占用空间最大的目录 ==="
du -sh /var/* /home/* 2>/dev/null | sort -h | tail -10
echo -e "\n=== 内存占用 Top 10 进程 ==="
ps aux --sort=-%mem | head -11
echo -e "\n=== CPU 温度 ==="
sensors 2>/dev/null || echo "sensors not installed"
给脚本加上执行权限,以后每周跑一次:
chmod +x ~/check-system.sh
~/check-system.sh
总结:优先做这几件事
- 清理 Podman 和 Flatpak 的无用镜像 —— 这步通常能释放好几G空间
- 删除旧的 OSTree 部署 —— 保留当前和一个回滚版本就够了
- 禁用不需要的开机服务 —— 用
systemd-analyze blame找出元凶 - 调整 swappiness 和 I/O 调度器 —— 小改动,大不同
- 减少 GNOME 动画效果 —— 老电脑的眼睛更舒服
- 升级硬件 —— 如果内存小于 8G 或者还是机械硬盘,这是最根本的解决方案
老电脑焕发新生,关键不在于某一个”神奇命令”,而在于持续地观察、清理和调整。系统用久了总是会积累一些”垃圾”,定期维护比一次性大扫除更有效。希望这些方法能帮你的 Silverblue 重新跑起来。
