Chroot - 拯救滾挂的Arch Linux!

问题描述

最近刚休假结束,开始上班的时候脑子还不太清醒,加上GNOME 45的习惯性crash,用了快两年、从来没出过大问题的Arch今天撂挑子了,由于是公司电脑必须硬着头皮解决,不过好在经过一下午的折腾顺利救活了。

具体情况是这样的:

  • Pacman更新时间并没有隔太久,距离上一次 -Syyu也就半个月,不过本次更新涉及到内核等多个重要的包
  • 我是在办公途中准备重启一下电脑,看一下VSCode的ssh remote插件为啥抽风无法连接算法服务器,所以想着关机之前更新一波Pacman。当时电脑运行并不卡顿,进程不多,我就顺手 pacman -Syyu了。
  • 在进行到内核编译与initram-fs builds时,GUI突然崩了,直接导致了GNOME注销重启图形界面(GDM3我谢谢你啊),但是我不确定之前的pacman -Syyu跑完了没,毕竟桌面是桌面,arch是arch,系统本身没有重启。
  • 我当时很放心地等了三五分钟,而且没有进行其他pacman操作来二次验证(毕竟平时var/lib/pacman/db.lck还会给你把把关),就把电脑关机吃午饭去了。结果回来一开机,initram-linux.img丢了,一个黑屏直接无限循环了,这肯定就是内核更新出问题了,bootloader检测不到对应的引导文件。

无限黑屏卡在这里

# 内核更新失败,initramfs丢失的合影留念
EFI stub: ERROR: Failed to open file: initramfs-linux.img
EFI stub: ERROR: Failed to load initrd: 0×800000000000000e
EFI stub: ERROR: efi_main() failed!
Failed to execute Arch Linux (linux) (vmlinuz-linux): Not Found

但是作为Arch用户,遇到这样的问题首先要稳住心态不能慌。BBS玩家社区肯定有不少解决方案,慢慢自己搜索,加上和同事们的讨论,一步一步来还是很好差不多可以解决的。

思路分析

其实解决方法上来看还是那几个经典步骤:

  • Live iso boot (从U盘启动一个临时的安装系统)
  • Mount (把硬盘和对应分区挂在在临时系统下,这一部分相对麻烦,因为有些人会涉及到硬盘加密,LVM组,不同的bootloader的挂载点不同等问题,我下面会说)
  • 进入chroot
  • 具体问题具体分析,比如 sudo mkinicpio -P或者sudo pacman -S linux
  • 手动更新bootloader (有的情况不一定需要)

成功案例

这里先贴几个网上找到的救滾挂我觉得不错的帖子,进入chroot之前的情况没有我的这么复杂:

此处再加上一些其他外网的一些资源:

动手解决

在动手之前,你需要确定几个东西,不能盲目按照之前提到过的大致思路开始:

  • 你的linux系统是怎么分区,怎么挂载的?只有一个/?还是root, home, boot分得很清楚?
  • 你的bootloader是什么?grub还是systemd-boot,还是别的?不同的bootloader在/mnt/root下的挂载点不同,一定要看清楚
  • 你用的是原Arch,还是魔改Manjaro,还是类原生的EndeavourOS?

确定了以上这些问题之后,就可以按照我下面的步骤开始了 😃

Live USB Boot

利用U盘进入临时系统这部分就不多赘述了,大致推荐一下做系统盘的软件:

自己在BIOS中设置一下UEFI顺序,进入live iso系统,和初次装机时候步骤一样,等到root@archiso ~ #就可以了
在这里插入图片描述
到了这里我有个建议,很多人可能要开始折腾WIFI联网了,我觉得直接找个连着WIFI的手机,用USB线连接电脑,在手机上打开数据Ethernet(就是让手机提供网线),让电脑直接通过手机数据线联网,能剩下很多麻烦的步骤。

挂载分区

如果你的硬盘挂载的方式很简单,就是//boot,那么直接按照前面几个教程里的直接mount。此处注意一下,由于是live iso,我不需要加sudo,如果你需要权限的话自己分情况判断。

fdisk -l   #查看分区情况,找到你的root和其他重要的分区
mount /dev/XXX /mnt #挂载root分区,注意XXX 调整为你的linux具体分区

先挂root,如果你的/boot不在/root下,手动继续挂下。这里注意一下你的bootloader,看下EndeavourOS官方arch-chroot文档里建议的boot挂载点:

mount /dev/XXX /mnt/boot/  #区分下bootloader,systemd-boot挂在/mnt/boot 下就好
mount /dev/XXX /mnt/boot/EFI  #grub应该是要挂载 /mnt/boot/EFI 下,不建议挂在 /mnt/efi下,啥用没有

我个人的情况比较复杂,所以这篇帖子有特殊的警示意义:

  • 首先硬盘分成了五个区,分别挂在LVM组下的/, /home, /docker, 还有非LVM的普通分区/swap和EPS服务/boot
  • LVM组里的三个volumes被LUKS加密了
  • 所以我的思路是:解密硬盘 -> 激活LVM分区 -> 把需要的LVM volume挂在 /mnt下 -> 进入arch-chroot /mnt
    fdisk -l #查看加密分区
    cryptsetup open /dev/XXXXX/ YYYYY #把XXXXX改成你对应的分区名字,YYYYY改成解密的分区名字,比如root
    lvscan #解密后能自动扫描到LVM group了
    vgchange -ay /dev/your_lv_group_name #把your_lv_group_name改成你看到的名字,例如 /dev/vg7000
    lsblk #再次查看一下分区情况
    
    开始挂载(记得把我的的xxx都修改成你对应的硬件和挂载点名字):
    mount /dev/vgxxx/root /mnt
    mount /dev/vgxxx/home /mnt/home #其实没必要,我不过就随手试一下
    mount /dev/nvmexxx /mnt/boot #因为我的bootloader是systemd-boot, 如果你的是grub需要自己试一下是不是/mnt/boot/efi
    

如果显示没有某个mount point导致无法正常挂载,请检查一波:

  • 你是否将root或者是包含root的分区挂载到了 /mnt
  • 你的bootloader是否要求特定的挂载点,例如grub貌似要求挂载/mnt/boot/EFI, systemd-boot要求挂载/mnt/boot (我尝试挂载/mnt/efi不过没啥用)
  • 万不得已,手动mkdir /mnt/xxx来一波,基本上把root和boot都挂载上了之后,就可以准备下一步了

进入chroot

当所有挂载点没问题,就可以进入chroot来修复受损的系统文件了:

arch-chroot /mnt

当然,到了这一步我这篇文章就无法继续参考了,因为每个人滾挂的原因各不相同,具体是什么还是看一下pacman log:

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

这里我可以给出一下我的一些通用的个人见解:

  • 如果是像我用pacman更新内核时突然炸了,那么首要做的肯定是重装一下linux内核 pacman -S linux 或者linux-lts, linux-zen
  • 如果是装完内核了,但是initramfs不知道出什么问题了,可以尝试一波 mkinicpio -P

如果是其他原因导致引导丢了,可以看一下下一步手动更新bootloader (重装也是一个道理,不过只有grub可以,systemd-boot好像不行)。

手动更新bootloader

救完系统后,最好手动更新一下系统的启动引导,争取一次性点亮。

由于我的工作电脑是用systemd-boot,所以更新eps的代码很简单:

bootctl update    #更新启动引导
exit #退出chroot

shutdown now #退出chroot,关机,拔U盘,再开机

这里我也顺便贴一下别的地方找到的grub的更新代码(虽然大家应该相当熟悉了):

#记得该代码在chroot里执行
grub-mkconfig -o /boot/grub/grub.cfg

然后就可以退出临时系统了,拔掉U盘,如果可以正常开机说明系统就救活了。

当然一次性点不亮很正常,我自己由于也是第一次摸索着旧系统,Linux操作水平只能说是一般般不是特别精通,比如网上大多数的救滚是用grub为bootloader的,我把/dev/我的boot分区挂在了/mnt/boot/EFI,开机后引导分区彻底没了,后来又挂在/mnt/efi试了好久也没成,最后挂在/mnt/boot/然后重复上面更新内核、更新引导,就成功点亮了。

所以总结起来就是,一定不要太慌,要注意细节再进行下一步操作。


有什么问题可以在评论区留言,我不定期会抽空上线查看。
该教程未经本人允许请勿转载到其他平台,多谢 😃

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Arch Linux 是一个基于 Linux 的免费和开源操作系统,具有轻量级和灵活性。安装 Arch Linux 需要一定的 Linux 知识和经验,但是它提供了丰富的文档和社区支持。 1. 下载 Arch Linux 镜像: 从官网下载最新版本的 Arch Linux 镜像。 2. 制作启动盘: 使用工具如 dd 或 Rufus 制作启动盘。 3. 启动计算机: 将启动盘插入计算机并重启。 4. 进入系统安装界面: 连接到互联网并设置键盘布局。 5. 分区磁盘: 使用工具如 fdisk 或 cfdisk 分区磁盘。 6. 格式化分区: 使用工具如 mkfs.ext4 或 mkfs.btrfs 格式化分区。 7. 挂载分区: 使用 mount 命令挂载分区到 /mnt 目录。 8. 安装系统: 使用 pacstrap 命令安装基本系统。 9. 生成 fstab 文件: 使用 genfstab 命令生成 fstab 文件。 10. 进入系统: 使用 arch-chroot 命令进入系统。 11. 设置时区: 使用 ln -sf /usr/share/zoneinfo/Region/City /etc/localtime 命令设置时区。 12. 设置本地化: 修改 /etc/locale.gen 文件并使用 locale-gen 命令生成本地化。 13. 设置主机名: 修改 /etc/hostname 文件并设置主机名。 14. 安装引导程序: 使用 grub 或 syslinux 安装引导程序。 15. 配置网络: 使用 netctl 或 systemd-networkd 配置网络。 16. 创建用户: 使用 useradd 和 passwd 命令创建用户并设置密码。 17. 重启系统: 使用 reboot 命令重启系统。 18. 登录系统: 使用创建的用户名和密码登录系统。 注意:这只是一个简单的安装步骤概述,详细步骤可以在 Arch Linux 官网和社区上查找。在安装时应该根据自己的需求和硬件配置进行相应的调整。 ### 回答2: Arch Linux 是一种自由和开放源代码的 Linux 发行版,它采用了 rolling-release 更新方式,并提供了一个简单而强大的 Pacman 包管理器,让用户可以快速轻松地安装和管理软件包。 要进行 Arch Linux 安装,首先需要准备一些基本的工具和资源,如一台可靠的计算机、Arch Linux ISO 文件、可引导的 USB 驱动器、网络连接等。然后,可以按照以下步骤进行安装: 1. 下载 Arch Linux ISO 文件并将其刻录到可引导的 USB 驱动器上。 2. 将USB驱动器插入计算机并重启,进入 BIOS 界面选择从 USB 驱动器启动。 3. 进入 Arch Linux Live CD 环境后运行命令行。 4. 确定网络连接是否已经启用。如果没有启用,则需要手动配置以便能够下载和安装软件包。 5. 运行 fdisk 命令分区,将磁盘划分为根(/)和交换分区(swap)等。 6. 格式化分区或卷,并挂载根分区到“/mnt”目录,将 swap 分区与根分区分别挂载到“/mnt/swap”目录和“/mnt”目录。 7. 运行 pacstrap 命令并指定需要安装的软件包(在基本安装中至少需要安装 base 软件包),然后使用 chroot 命令切换到新安装环境。 8. 配置新系统的基本设置,例如时区、语言等,同时设置并安装引导加载程序。 9. 退出 chroot 环境并重新启动计算机。 10. 登录新安装的 Arch Linux 并进行必要的软件更新和配置。 总的来说,安装 Arch Linux 可能不像其他一些发行版那么简单,但它为用户提供了更大的自由和灵活性,并能够更好地满足他们对系统的个性化需求。通过仔细阅读 Arch Linux 官方文档并按照步骤进行操作,可以很容易地完成安装过程。 ### 回答3: Arch Linux是一个流行的Linux发行版,它被广泛使用于服务器和桌面设备。它被认为是一款轻量级、定制化程度高、可定制性强的操作系统。 Arch Linux的安装过程需要一定的技能和经验,因为它涉及到了一些复杂的工具和命令。以下是Arch Linux安装的步骤: 1. 下载Arch Linux ISO文件:在Arch Linux的官方网站上下载最新的ISO映像文件。 2. 准备安装介质:将ISO文件刻录到USB盘或DVD-R光盘上,如果是在虚拟机上安装,则可以直接将ISO文件挂载为虚拟光盘。 3. 启动Arch Linux:将安装介质插入电脑,并在启动时选择从该介质启动。此时将进入Arch Linux的安装程序。 4. 分区:在安装程序中,选择“分区”,进行分区设置。建议使用GPT分区表,并创建“/”分区和“/boot”分区(可选),其中“/”是根分区,包含系统文件和应用程序,“/boot”分区包含引导程序。 5. 安装基本系统:选择“安装”进入安装程序,在提示符中输入用户名和密码,然后安装基本系统。 6. 安装启动程序:安装grub引导程序或syslinux引导程序。 7. 安装桌面环境和应用程序:安装桌面环境和应用程序之前,需要先更新系统软件包列表,然后通过pacman命令安装所需软件包。常用的桌面环境有GNOME、KDE、XFCE等。 8. 配置网络:配置网络连接,可以使用ip命令或编辑网络管理器进行配置。 9. 配置用户:添加用户,设置密码等。 10. 完成安装:当你完成了以上所有步骤后,重新启动电脑并进入Arch Linux系统。 总之,Arch Linux的安装过程需要一定的技能和经验,需要认真的阅读安装程序的提示和文档。安装完成后,你将获得一个非常灵活和可定制的操作系统,可以根据自己的需求进行调整和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值