如何将损坏的 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".

我很无奈。 我只有一台可以上网的平板电脑。 在 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 系统的方式。

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

此博客上其他有用的 Arch Linux 教程:

  • 在 Arch Linux 的 Pacman 中启用并行下载
  • 在 Arch Linux 中使用 Reflector 检索最新的镜像列表
  • 在 Arch Linux 中清理包缓存的推荐方法
  • 如何在 Arch Linux 中忽略正在升级的软件包
  • 如何修复 Arch Linux 中的“pacman: error while loading shared libraries”错误

相关阅读:

  • 如何在不重新安装的情况下修复损坏的 Ubuntu 操作系统

Arch LinuxEndeavourOSLinuxLinux 故障排除Manjaro LinuxPacman 恢复损坏的 Arch Linux