哎,我懂那种感觉。Pop OS 本来是个挺顺手的系统,系统好看、快捷键用着爽,但有时候那个 pop OS 自带的 System76 Power 或者 Apt 更新一卡,终端直接 Killed,或者更新跑到一半 dpkg 卡死,重启又恢复,再来一次又崩。真的挺搞心态的。
别急,我不是来给你讲什么“重装系统”这种废话的。作为一个在 Linux 坑里摸爬滚打多年的“老司机”,我把这些年的维护技巧、排查思路,以及几个真正能解决“更新卡死”、“终端崩溃”、“系统变慢”的干货,掰开了揉碎了讲给你听。这篇文章不讲虚的,全是实操,保证你能跟着做,做完感觉电脑像换了一台。
先别慌,搞清楚“卡”在哪
很多人遇到问题第一步就是乱查,结果越查越懵。你得先有个清晰的思路。Pop OS 是基于 Ubuntu 的,所以它的底层逻辑是 APT 包管理。系统更新卡住,90% 的情况是以下几种:
- APT 锁死:
/var/lib/dpkg/lock-frontend或/var/lib/dpkg/lock被占用。 - 依赖断裂:之前强制终止了更新,导致包状态不一致。
- 磁盘空间不足:尤其是
/boot分区满了,内核更新失败。 - NVIDIA 驱动冲突:Pop OS 默认带 NVIDIA 版本,但驱动更新经常搞挂图形界面。
- 终端本身的问题:比如
terminator或xfce4-terminal的配置、字体缓存、或者被某些 shell 别名搞崩了。
咱们一个一个来“拆弹”。
第一阶段:急救——当更新卡死、终端崩溃时怎么办
场景一:更新跑到一半,进程卡住,终端报错 E: Could not get lock
这是最常见的。你正在 sudo apt update && sudo apt upgrade,然后去开了个浏览器,或者不小心关了终端,再回来就卡住了。
错误现象:
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1234 (apt)
或者更惨,直接 dpkg: error: could not open lock file /var/lib/dpkg/lock-frontend: Resource temporarily unavailable
解法:
别急着 kill -9 所有 apt 进程,那会搞坏包数据库。按顺序来:
先看看是谁在占着:
sudo lsof /var/lib/dpkg/lock-frontend sudo lsof /var/lib/dpkg/lock sudo lsof /var/cache/apt/archives/lock如果看到
apt、apt-get、unattended-upgrades这些进程,记下它们的 PID。优雅终止:
sudo kill -TERM <PID>等几秒,如果它还没死,再
kill -9 <PID>。但通常 TERM 就够了。如果进程真的死了,但锁文件还在: 这时候锁文件是“僵尸锁”,得手动删。
sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock sudo rm /var/cache/apt/archives/lock修复可能损坏的包数据库(这步很重要,很多人跳过,导致下次更新又挂):
sudo dpkg --configure -a sudo apt --fix-broken install sudo apt update sudo apt upgrade
小贴士: 如果你经常手动中断更新,建议养成习惯,更新前先把重要工作保存好,或者用 tmux / screen 跑更新。这样即使终端关了,进程还在后台跑,你随时可以 tmux attach 回来看进度。这招我用了十年,救过我无数次。
场景二:终端自己崩溃,或者命令执行一半消失
如果你发现不是更新卡住,而是你常用的 git、ls、甚至 pop-shell 快捷键一按,终端就闪退,或者命令跑到一半 Segmentation fault。
可能原因:
- Shell 别名冲突:你可能在
~/.bashrc或~/.zshrc里定义了一些别名,跟系统命令冲突。 - 字体缓存损坏:Pop OS 的终端默认用
Ubuntu Mono或JetBrains Mono,字体缓存坏了会导致渲染崩溃。 - GPGPU 加速问题:某些旧版 NVIDIA 驱动在特定终端渲染下有 bug。
排查步骤:
检查 shell 配置:
cat ~/.bashrc | grep alias cat ~/.zshrc | grep alias看看有没有奇怪的别名。比如
alias ls='ls --color=auto'是正常的,但如果你看到alias grep='grep --color=auto -vvv'这种,可能有问题。试着注释掉最近添加的别名,重启终端试试。重建字体缓存:
sudo fc-cache -fv这步很简单,但经常能解决莫名其妙的终端渲染问题。
换一种终端测试: Pop OS 默认是
xfce4-terminal或terminator。你可以临时装一个tilix或gnome-terminal试试:sudo apt install tilix tilix如果 Tilix 不崩,那就是原终端的问题,可以考虑换终端或者重装它:
sudo apt reinstall xfce4-terminal
第二阶段:深度清理——让系统“瘦”下来
Pop OS 用久了,特别是如果你像很多人一样,喜欢折腾各种 PPA、装一堆软件,系统会变得很臃肿。缓存、旧内核、孤立包,都是拖慢速度的元凶。
1. 清理 APT 缓存
APT 会把下载的所有 .deb 包存在 /var/cache/apt/archives/ 里。这些包装完后就没用了,但占地方,有时候也会引发问题。
操作:
# 查看缓存占用空间
du -sh /var/cache/apt/archives/
# 清理已下载的包
sudo apt clean
# 清理不再需要的依赖包
sudo apt autoremove
clean 和 autoclean 的区别:clean 删所有,autoclean 只删过期的。我推荐直接用 clean,反正网速快的话随时能下。
2. 清理旧内核(重点!)
Pop OS 基于 Ubuntu,每次内核更新,旧的内核并不会自动删掉。如果你装了五六次更新,可能 /boot 分区里躺着三四五个旧内核。这不仅占空间,还会让 GRUB 启动菜单变长,增加启动时间,甚至导致更新时因 /boot 满而失败。
查看当前内核和已安装内核:
# 当前运行的内核
uname -r
# 列出所有已安装的内核
dpkg --list 'linux-image-*' | grep ^ii
# 列出所有已安装的 header
dpkg --list 'linux-headers-*' | grep ^ii
删除旧内核:
假设你当前用的是 6.8.0-41-generic,那你至少保留这一个和最近的一个(以防回退)。把其他的删掉。
# 示例:删除旧内核 6.5.0-15 和 6.5.0-14
sudo apt remove --purge linux-image-6.5.0-15-generic linux-headers-6.5.0-15-generic
sudo apt remove --purge linux-image-6.5.0-14-generic linux-headers-6.5.0-14-generic
# 更新 GRUB
sudo update-grub
# 再次清理残留依赖
sudo apt autoremove
注意: 别手滑把当前用的内核删了!uname -r 看清楚再动手。
3. 清理用户缓存
除了系统级缓存,用户目录下的缓存也不容忽视。
# 查看用户缓存大小
du -sh ~/.cache
# 清理一些安全的缓存(比如缩略图、文档搜索索引等)
# 注意:不要乱删 ~/.cache 里的东西,有些应用靠它运行
# 推荐清理这些:
rm -rf ~/.cache/thumbnails/* # 缩略图,会重建
rm -rf ~/.cache/doc/ # 文档索引
rm -rf ~/.cache/pip/* # Python pip 缓存
rm -rf ~/.cache/yarn/* # Yarn 缓存(如果有的话)
# 更彻底的,可以用工具 bleachbit(图形化,小心选择)
sudo apt install bleachbit
bleachbit
我用 bleachbit 时会勾选“系统->apt”、“用户->browser_cache”、“开发者->pip”这些,安全又有效。
4. 清理 Snap 缓存(如果用了 Snap)
Pop OS 不太推 Snap,但如果你装了某个 Snap 应用,它的缓存也在 /var/lib/snapd/cache。
# 查看 snap 缓存
du -sh /var/lib/snapd/cache
# 清理
sudo rm -rf /var/lib/snapd/cache/*
第三阶段:启动优化——让开机更快
系统卡顿,启动慢是大头。Pop OS 默认启动项已经挺简洁了,但还是有些东西可以调。
1. 查看启动项
# 查看用户级启动项(图形界面)
ls ~/.config/autostart/
# 查看系统级启动项
ls /etc/xdg/autostart/
2. 禁用不必要的启动项
很多软件安装时会自带开机启动,比如 discord、slack、spotify、Dropbox、OneDrive、各种云同步工具。如果你不是每个都用,或者不介意手动启动,就禁用掉。
操作方法:
图形化:打开
Settings->Applications->Startup Applications,把不用的勾掉。命令行:直接删除或重命名对应的
.desktop文件。# 比如禁用 discord 自启 mv ~/.config/autostart/discord.desktop ~/.config/autostart/discord.desktop.bak
我个人的经验:
- 必留:
pop-shell(如果你用它)、NetworkManager、System76 Power(电源管理)。 - 看情况:
clipboard-manager(剪贴板管理器,如果你不用可以关)、bluetooth相关的(不用蓝牙可以关)。 - 一般关:
discord、slack、zoom、teams、spotify、dropbox、onedrive、nextcloud。
3. 优化 systemd 服务启动顺序
有些服务启动很慢,而且没必要开机就启动。比如 cups(打印)、bluetooth、ModemManager(调制解调器)。
# 查看开机启动的服务
systemctl list-unit-files | grep enabled
# 禁用不必要的服务
sudo systemctl disable cups # 不用打印机
sudo systemctl disable bluetooth # 不用蓝牙
sudo systemctl disable ModemManager # 不用 3G/4G 网卡
注意: 禁用前确认你真的不用这些功能。
4. 使用 bootchart 或 systemd-analyze 分析启动时间
想知道瓶颈在哪?
# 总启动时间
systemd-analyze
# 每个服务启动耗时
systemd-analyze blame
# 启动时间图(SVG 格式,可以用浏览器打开)
systemd-analyze plot > boot.svg
看 blame 的输出,找到耗时最长的几个服务,针对性优化。比如某服务要 5 秒,你可以查一下它是不是必须的,能不能延迟启动。
第四阶段:NVIDIA 驱动与显卡问题(Pop OS 特有痛点)
Pop OS 有两个版本:Intel/AMD 和 NVIDIA。NVIDIA 版本预装了专有驱动,但驱动更新经常出问题,比如黑屏、花屏、更新后终端崩溃。
1. 保持驱动同步
Pop OS 的 pop-os 包里有 system76-driver,它会和内核、驱动联动。建议用 Pop OS 推荐的更新方式:
sudo apt update
sudo apt upgrade
sudo apt install pop-os-desktop
别随便去 NVIDIA 官网下 .run 文件装驱动,除非你非常清楚自己在做什么。那些 PPA 也经常搞出事儿。
2. 驱动崩溃后的恢复
如果更新后黑屏,或者终端频繁崩溃,可能是驱动挂了。
尝试恢复:
- 进入 TTY:
Ctrl+Alt+F3 - 登录
- 卸载当前 NVIDIA 驱动:
sudo apt purge '~nnvidia' sudo apt install ubuntu-desktop sudo reboot - 重启后,系统会用开源的
nouveau驱动,先保证能进系统,然后再去Software & Updates->Additional Drivers重新选择稳定的驱动版本。
3. 终端崩溃与 GPU 加速
有些终端模拟器(比如 Alacritty、kitty)默认开启 GPU 加速。如果你的 NVIDIA 驱动有问题,这些终端可能会崩。
测试:
# 禁用 GPU 加速启动 alacritty
ALACRITTY_LOG=debug alacritty --embed <pid> # 或者改配置文件,把 gpu 关掉
如果关掉 GPU 就不崩了,那就是驱动问题,回去优化驱动。
第五阶段:系统监控与日常维护习惯
1. 常用监控命令
别等系统卡死了再查,平时多看看。
# 资源监控(顶部窗口)
htop
iotop # 看磁盘 IO
nmon # 综合监控
安装:sudo apt install htop iotop nmon
2. 定期健康检查脚本
我写了一个小脚本,每周跑一次,自动清理、检查、报告。你可以抄去用:
#!/bin/bash
# pop_cleanup.sh - Pop OS 日常维护脚本
echo "=== Pop OS 日常维护 $(date) ==="
# 1. 清理 APT
echo "清理 APT 缓存..."
sudo apt clean
sudo apt autoremove -y
# 2. 检查磁盘空间
echo "磁盘空间:"
df -h / /boot /home
# 3. 检查旧内核
CURRENT_KERNEL=$(uname -r)
echo "当前内核: $CURRENT_KERNEL"
echo "已安装内核:"
dpkg --list 'linux-image-*' | grep ^ii | awk '{print $2}' | grep -v "$CURRENT_KERNEL" | while read pkg; do
echo " 可考虑删除: $pkg"
done
# 4. 检查 systemd 服务
echo "检查异常服务..."
systemctl --failed | grep -v "0 failed" || echo " 无异常服务"
# 5. 清理用户缓存(安全部分)
echo "清理用户缓存..."
rm -rf ~/.cache/thumbnails/*
rm -rf ~/.cache/doc/*
rm -rf ~/.cache/pip/*
echo "=== 维护完成 ==="
echo "建议:重启一次系统以应用所有更改。"
使用方法:
chmod +x pop_cleanup.sh
./pop_cleanup.sh
3. 日志排查
当系统出现奇怪问题时,日志是最好的朋友。
# 查看系统日志(最近 100 行)
journalctl -n 100 -p err
# 查看今天内核日志
journalctl -k --since today
# 查看特定服务日志,比如 apt
journalctl -u apt -n 50
# 查看图形界面日志
journalctl -b -p warning
高级技巧: 把日志输出到文件,方便搜索。
journalctl -b -1 > /tmp/prev_boot.log # 上次启动的日志
grep -i "error\|fail\|kill" /tmp/prev_boot.log
第六阶段:Pop OS 特有的“玄学”优化
Pop OS 基于 Ubuntu,但 System76 做了一些定制。有些小 tweaks 能让体验更好。
1. 调整 Swappiness
默认 vm.swappiness=60,对于 SSD 来说,可以适当降低,减少交换频率,提升响应速度。
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时修改
sudo sysctl vm.swappiness=10
# 永久修改
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
注意: 如果你的内存很大(32G+),这个效果不明显。如果内存小(8G 以下),调低点有帮助。
2. 调整 I/O Scheduler
NVMe SSD 用 none 或 noop,SATA SSD 用 noop,机械硬盘用 bfq。
”`bash
查看当前调度器
cat /sys/block/nvme0n1/queue/scheduler
临时修改(假设是 NVMe)
echo none | sudo tee /sys/block/nvme0n1/queue/scheduler
永久修改,创建 udev 规则
echo ‘ACTION==“add|change”, ATTRS{
