使用timeshift恢复滚挂的Archlinux

Coast23

前言

我的 Surface Pro5 安装了 Archlinux, 在昨天使用 sudo pacman -Syu 后, 变成砖了.

  • 症状: 能进系统, 开机后能进入用户登录界面, 但无法使用 触屏, 蓝牙鼠标, 有线键盘, 按下电源键, 本应息屏, 结果它直接关机了.

给我整傻了.

一开始以为是下载安装包的时候出了问题 (比如中途睡眠了), 但 pacman -Qk | grep -v ' 0 missing files' 发现包好像没有损坏, 非常迷.

不懂怎么修, 还好之前有用 timeshift 备份过系统, 于是最后决定用 timeshift 恢复系统.

以下是我摸索出来的恢复步骤:

恢复 Archlinux

首先进入 Surface 的 UEFI, 勾选从 USB 启动 选项.

然后插上我的装有 Kali Live 的 SD卡 (得用读卡器连接, 不能从SD卡直接启动是真难受), 开机进入 Kali 系统.

(也可以用 U盘 安装 Arch Live 来启动, 这样的话就不需要后面那么多麻烦的操作了, 网上资料一堆.)

挂载系统

┌──(kali㉿kali)-[~]
└─$ lsblk -f
.
.
.
nvme0n1

├─nvme0n1p1
│ vfat FAT32 BD86-2BBD
└─nvme0n1p2
btrfs d7866fb2-65b6-4f13-b79b-9af65740c58d

可知引导分区为 nvme0n1p1, 系统分区为 nvme0n1p2.

因为引导没坏 (能进系统), 所以只挂载系统分区即可.

┌──(kali㉿kali)-[~]
└─$ sudo mount -t btrfs -o subvol=@ /dev/nvme0n1p2 /mnt
# 挂载 Btrfs 子卷 @ (即根目录) 到 /mnt .

┌──(kali㉿kali)-[~]
└─$ sudo mount -t btrfs -o subvol=@home /dev/nvme0n1p2 /mnt/home
# 挂载 Btrfs 子卷 @home (即 home 目录) 到 /mnt/home .

┌──(kali㉿kali)-[~]
└─$ sudo mkdir -p /mnt{proc,dev,sys,run}
# 先创建这些目录, 直接挂载可能报错: Mount point does not exist.

┌──(kali㉿kali)-[~]
└─$ sudo mount -t proc /proc /mnt/proc
# proc 是虚拟文件系统, 而非磁盘内容, 所以指定为 proc 类型进行挂载.

┌──(kali㉿kali)-[~]
└─$ sudo mount --rbind /dev /mnt/dev
# 把 Kali 的 /dev 目录挂载到 /mnt/dev, 供 Archlinux 使用.

┌──(kali㉿kali)-[~]
└─$ sudo mount --rbind /sys /mnt/sys
# 同上.

┌──(kali㉿kali)-[~]
└─$ sudo mount --rbind /run /mnt/run
# 同上.

挂载完成后, 就可以切换到 Archlinux 的环境进行恢复了.


恢复系统

┌──(kali㉿kali)-[~]
└─$ sudo chroot /mnt /bin/zsh
# 切换到 Archlinux 系统.

kali# su <username>
# 切换为 Archlinux 上的用户.
# 输入密码后, 就能看到 zsh 界面了. 如果没安装zsh, 上面的 chroot 改成 /bin/bash 即可.

> sudo timeshift --list
[sudo] password for surface:

Mounted '/dev/nvme0n1p2' at '/run/timeshift/4661/backup'
btrfs: Quotas are not enabled
Live Session detected, backup is disabled.
Device : /dev/nvme0n1p2
UUID : d7866fb2-65b6-4f13-b79b-9af65740c58d
Path : /run/timeshift/4661/backup
Mode : BTRFS
Status : OK
5 snapshots, 85.5 GB free

Num Name Tags Description
------------------------------------------------------------------------------
0 > 2025-01-09_20-23-13 O
1 > 2025-01-13_20-39-41 O
2 > 2025-01-24_23-09-43 O
3 > 2025-02-27_13-00-10 O
4 > 2025-03-13_11-11-58 O

> sudo timeshift --restore --snapshot "2025-03-13_11-11-58" --skip-grub
# 引导没坏, 不需要动 Grub, 所以加上 --skip-grub 选项.

# 输出一大串, 省略了

完事, 重启即可.


后记

恢复好系统, 直接再 sudo pacman -Syu.

然后系统又挂了… 只好把上面的步骤重复了一遍.

有空再排查原因.

  • 标题: 使用timeshift恢复滚挂的Archlinux
  • 作者: Coast23
  • 创建于 : 2025-04-07 17:01:21
  • 更新于 : 2025-05-01 23:05:01
  • 链接: https://coast23.github.io/2025/04/07/使用timeshift恢复滚挂的Archlinux/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
使用timeshift恢复滚挂的Archlinux