GitHub
logo SHORiNのARCH
Arch Linux Guide > Arch Linux > 故障排查总纲

故障排查总纲

系统故障排查总纲

本章汇总新手最常遇到的"系统坏了"场景与自救方法。核心原则:永远先冷静,不要急着重装。大部分故障 30 分钟内可修复。具体案例可对照 /wiki/archlinux/issues.html 的实战档案,本章提供方法论速查。

一、系统升级自救(pacman -Syu 翻车)

1.1 升级后进不去系统 / 卡在黑屏

先在 GRUB 界面按 e 编辑启动项,找到 linux 行,在行尾追加:

systemd.unit=multi-user.target

按 Ctrl+X 启动进入纯命令行模式(不加载桌面环境),再继续排查。

如果怀疑是显卡驱动问题,追加 nomodeset 或 nvidia-drm.modeset=1。

1.2 PGP 签名失效(最常见的升级报错)

error: failed to commit transaction (invalid or corrupted package (PGP signature))

原因:archlinux-keyring 包过期,无法验证新密钥。修复:

sudo pacman -Sy archlinux-keyring
sudo pacman-key --refresh-keys

如果 -Sy archlinux-keyring 也报签名错误,使用:

sudo pacman-key --init
sudo pacman-key --populate archlinux

1.3 partial upgrade 警告(部分升级)

:: Partially upgrading the system is not recommended. Make sure all of the packages in
:: your system are up to date.

含义:你之前用 pacman -Sy 装了新包(只同步了数据库没升级全系统),现在系统处于"部分升级"状态。正确做法:

sudo pacman -Syu

把系统完全升级。永远不要忽略这个警告强制安装。

1.4 依赖冲突 / 文件冲突

error: failed to prepare transaction (could not satisfy dependencies)

先完整同步:

sudo pacman -Syu

仍冲突时查看被什么包占用:

sudo pacman -Syu --overwrite /path/to/file

--overwrite 只在你清楚自己在做什么时使用。不确定时把完整报错发到交流群或 Arch Wiki 搜索。

二、chroot 救援总纲(进不去系统的万能钥匙)

只要硬盘没坏、文件还在,chroot 基本都能救。

2.1 进入 live 环境

用安装 U 盘启动(与安装时同一操作),然后:

# 查看磁盘布局
lsblk

# 挂载根分区(以 /dev/nvme0n1p2 为例,替换成你自己的)
# 本教程使用 btrfs 的 @ / @home 子卷布局,必须挂载 @ 子卷而不是顶层卷(顶层卷是空目录,chroot 进去会是空系统)
mount -o subvol=/@ /dev/nvme0n1p2 /mnt

# 挂载 @home 子卷(如安装时按本教程建了 @home 则执行,没有则跳过)
mount -o subvol=/@home /dev/nvme0n1p2 /mnt/home

# 挂载 EFI 分区(以 /dev/nvme0n1p1 为例)
mount --mkdir /dev/nvme0n1p1 /mnt/efi

# 如果使用 snapper 快照布局(快照在 @/.snapshots),救援时不需要单独挂载;进入系统后由 snapper 读取
# (仅当你是"快照单独子卷"的旧式布局时才需要:mount -o subvol=@snapshots /dev/nvme0n1p2 /mnt/.snapshots)

# 绑定系统目录
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /run /mnt/run

# 进入系统
chroot /mnt /bin/bash

提示:btrfs 子卷布局的挂载顺序很关键(先根后子卷)。用 snapper 的布局可参考快照和系统维护章节,逐条确认 lsblk 显示的挂载点;本教程布局下根分区必须带 subvol=/@ 挂载。

2.2 chroot 内常用救援操作

# 重新生成引导
grub-mkconfig -o /boot/grub/grub.cfg

# 重新安装 GRUB 到 EFI(以 /dev/nvme0n1p1 为例)
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB

# 修复 pacman 数据库损坏
pacman-key --init
pacman-key --populate archlinux

# 修复内核(以 linux 包为例)
pacman -S linux linux-headers

# 修复显卡驱动(N 卡)
pacman -S nvidia nvidia-utils

# 查看引导日志
journalctl -xb | tail -50

修复完执行 exit 退出 chroot,reboot 重启。

三、双系统引导救援

3.1 Windows 更新把 GRUB 吃掉了

现象:开机直接进 Windows,看不到 Linux 引导菜单。

用 live U 盘启动,chroot 后(见上文):

grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

重启即可恢复。

3.2 手动添加 Windows 启动项(efibootmgr)

Linux 引导里没有 Windows 时,先确认 Windows 的 EFI 分区位置:

lsblk -o NAME,SIZE,LABEL,PARTTYPE

Windows 的 EFI 分区通常是 FAT32 格式(LABEL 为 ESP 或 SYSTEM)。然后:

# 查看现有启动项
efibootmgr

# 添加 Windows 启动项(/dev/nvme0n1p1 换成你的 ESP 分区)
sudo efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Windows Boot Manager" \
  --loader '\EFI\Microsoft\Boot\bootmgfw.efi'

3.3 删除 Windows 后的引导修复

删除 Windows 分区后,GRUB 可能仍显示 Windows 条目但无法启动。更新引导菜单:

sudo grub-mkconfig -o /boot/grub/grub.cfg

如果 OS-prober 还检测到残留,检查 /etc/default/grub 中 GRUB_DISABLE_OS_PROBER 是否被设为 false(正常情况 Windows 已删除可保持 true)。

四、常见启动故障速查

现象 排查方向
卡在 "A start job is running for..." 磁盘挂载失败,systemctl status 查看具体单元,常见是 fstab 写错,chroot 修复 fstab
黑屏只有光标闪烁 显卡驱动问题,GRUB 加 nomodeset 试试;N 卡用 nvidia-drm.modeset=1
启动到一半重启 内核问题,chroot 后重新安装 linux 包
initramfs 报错 pacman -S linux 重新生成 initramfs(mkinitcpio)
时间显示错误 双系统时区冲突,Linux 用 UTC、Windows 用本地时间,看安装ArchLinux章节的时间设置

五、日志排查入门

journalctl 与 systemctl 的详细用法见systemd与日志排查,这里只记最常用的:

journalctl -xb              # 本次启动的全部日志
journalctl -p 3 -xb         # 只看错误
journalctl -xb | tail -50   # 看最后部分

实在救不回来时:进 live 环境把 /home、/etc 等关键数据备份出来再重装,你的数据永远比系统重要。