如何将损坏的 Arch Linux 恢复到以前的工作状态

这个简短的教程描述了如何将损坏的 Arch Linux 及其变体如 EndeavourOS、Manjaro Linux 恢复到以前的工作状态。

前几天,我使用命令进行了完整的系统升级 "sudo pacman -Syu",并以损坏的 Arch Linux 系统告终。

我的 Arch Linux 拒绝启动到图形模式,并一直显示错误消息: "dependency failed multi-user system""dependency failed for graphical interface".

我唯一的选择是登录到单用户模式并尝试将更新的包回滚到以前的版本。

在单用户模式下,我尝试了以下操作:

  • 我试图从官方存储库安装软件包,但我不能。 因为我的网卡在单用户模式下无法识别,所以无法上网。
  • “降级” 命令不起作用。 我不知道为什么。 因此,我无法将任何软件包降级到以前的版本。 它只是显示一条错误消息 "sudo pacman command is not found".
  • 所以,再次尝试 将所有软件包降级到特定日期. 它也没有帮助。 我得到了和上面一样的错误,即 "sudo pacman command is not found".

我很无奈。 我所拥有的只是一台具有 Internet 连接的 Tablet PC。 在 Arch Linux wiki 和论坛上广泛搜索后,我想最后一次尝试。

我决定将之前更新的所有软件包一一降级。 因为, "pacman -Syu" 命令更新了许多软件包,因此我无法确切确认是哪个软件包导致了问题。

如果您处于类似情况,本指南可能会帮助您将损坏的 Arch Linux 恢复到以前的工作状态。

将损坏的 Arch Linux 恢复到以前的工作状态

1. 首先,以单用户模式登录。 为此,请输入 "e" 当您看到 Grub 菜单时。

Arch Linux 中的 Grub 菜单

2. 然后,找到以 word 开头的行 linux

linux          /boot/vmlinuz-linux  root-UUID=d474f2-e6a2-4cc3-9899-aa98af13  rw  quiet

在上述行的末尾,键入以下行:

init=/bin/bash

请参阅以下屏幕截图以供参考。

编辑 Grub 启动菜单条目

3. 然后,按 F10 或者 CTRL+X 接着说。 几秒钟后,您将进入单用户模式。

4. 键入以下命令以安装您的 root (/) 文件系统处于读/写模式。

mount -n -o remount,rw /

5. 现在,您需要查找进行完整系统升级的时间。 您可以通过查看您的 pacman.log 文件。 这个文件保存了你过去所做的所有 pacman 条目。

tail -n 200 /var/log/pacman.log | less

这里, -n 200 将显示最后一个 200 你的行 pacman.log 文件。 因为我的 pacman.log 文件有很多条目。

您可能知道,tail 命令将仅显示最后 10 个条目。 所以,更换 200 用自己的号码通过 pacman.log 文件。 我通过管道输出 "tail" 命令 "less" 命令逐页显示结果。

6. 通过pacman.log文件,我找到了完整系统升级的确切时间。 检查以下屏幕截图中的时间戳(对不起,低质量的图像)。

我跑过 "sudo pacman -Syu" 命令在 下午 12:06.

Arch Linux 中的 Pacman 日志文件Arch Linux 中的 Pacman 日志文件

如你看到的, "pacman -Syu" 命令已更新 40+ 包。

7. 因为,我不能使用 "downgrade" 命令并将所有软件包降级到任何特定日期,我别无选择,只能使用一个一个降级所有更新的软件包 "pacman -U" 来自缓存的命令。 正如你已经知道的, pacman 将所有下载的包保存在 /var/cache/pacman/pkgs/ 文件夹。

8. 我从屏幕截图中记下了所有更新的软件包,并从缓存中将它们一一降级为早期版本,如下所示。

pacman -U /var/cache/pacman/pkg/qt5-base-5.9.1-3-x86_64.pkg.tar.xz

上面的命令将安装 qt5-base 从缓存文件夹中打包。 我花了将近半个小时来降级所有软件包。

9. 如果您已经清除了缓存文件夹,则别无选择。 重新安装可能是唯一的选择。 所以,我建议你在缓存中至少保留两个旧版本,这样如果新包有任何问题,你可以恢复它们。

10. 降级所有软件包后,键入以下命令以应用更改并将 Arch Linux 启动到正常模式。

exec /sbin/init

11. 现在,我可以毫无问题地登录我的 Arch Linux 桌面了。 我想我应该等待几天,然后在修复后再次尝试更新。

如果您有时间和耐心,请降级一个包并运行 "exec /sbin/init" 将您的系统引导到正常模式并检查它是否解决了问题。

如果没有,请尝试另一个包。 重复此操作,直到找到有问题的包。 然后只需留下有问题的包并更新所有其他包。

你们中的一些人可能会发现这种方法不是那么有效和复杂。 但这就是我恢复损坏的 Arch Linux 系统的方式。

您可能知道除此方法之外的其他一些简单方法。 如果你知道任何这样简单的方法,请在下面的评论部分告诉我。 我将相应地检查并更新指南。