Arch Linux系统修复指南

一:前期准备

拿一个U盘刻录成Arch Linux的启动盘,可以用dd命令,或者到Windows下使用Refus以dd方式刻录成启动盘,注意最好不要使用其他方法,本人试过多个刻写启动盘的软件,很多不是刻好后无法启动,就是启动过程出现各种各样的问题,比如Ultral-ISO。

其他可以刻写成功并启动的还有:unetbootin(Linux和Windows版本都有)

1.  先下载Arch系统的镜像:

Arch系统镜像地址:

Arch官方下载区(可选国家及镜像源地址): https://www.archlinux.org/download/ 这里提供一个清华源下载地址:https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/2019.05.02/ 可自行删掉URL后面的日期寻找看这篇文章时候的最新镜像

2.  在Linux下使用dd命令制作启动盘

  • 打开终端,切换到镜像所在目录
  • 插入U盘,注意不要进行挂载操作!!!
    • 如果是系统自动挂载的,不要用鼠标直接弹出或者点击Unmount之类的,请执行以下操作
    • 在终端输入以下命令查看U盘设备号和分区号 会看到类似以下的输出,一般通过U盘的大小就能知道哪个是U盘设备号。 比如我的是/dev/sda, 注意设备号后面一定没有数字,/dev/sda1是分区号!!!记住你自己的U盘设备号,等一下要用。
    • 输入以下命令进行U盘弹出:
  • 在终端输入以下命令获取U盘设备号,前面如果已经获取了,请跳过这步。 看到类似以下输出,找到自己U盘的设备号,比如下面sda即是我U盘的设备号:
  • 使用以下dd命令刻写U盘,注意将if等于号后面的镜像改成你自己的,of等号后面的改成你U盘的设备号,而且是非数字结尾的!!!    不能是/dev/sda1!!! 还有其他各种各样的方法,请参考Arch Wiki:https://wiki.archlinux.org/index.php/USB_flash_installation_media#BIOS_and_UEFI_bootable_USB

3. 用refus刻录U盘启动盘

如果已经用dd方式制作完成请跳过这步

4. 关机启动到U盘

  • 完全关机后,按电源键开机,在屏幕出现灯光的时候,按几下F12或对应型号电脑进入启动项选择的快捷键(如果不是F12,请网上自行查找或者多试几个其他键,或者进入BIOS手动选择第一启动项)。
  • 进入到开机项选择后,选择U盘启动的项目(按方向键选择),然后回车
  • 等待进入U盘或者回车直接进入(Boot Arch Linux(x86_64))

 5. 连接网络

或者连接的是有线网络的话,执行以下命令获取IP:

全称是Dynamic Host Configuration Protocol Client Daemon,即动态主机配置协议客户端进程

如果是校园网,有些是需要登录操作的,暂时不知道解决办法,一般都是连接无线网络,或者有双系统的话,先切换到另一个系统登录后关机启动到U盘可以不用再登录,网络即可用

6. 同步时间

二:分析问题,解决问题

1. 更新内核后无法启动,报错类似premature end of file /boot/vmlinuz

一般这种情况进行重装内核即可,请执行以下步骤,当然,也可以通过grub选择回退版本内核启动。

  • 查看Linux系统分区并执行挂载操作 识别出你的根分区和启动分区,先挂载根分区到/mnt, 再挂载启动分区到/mnt/boot, 示例
  • Arch-chroot到受损系统
  • 重新安装内核
  • 关机重启,如果依旧无法启动,再执行后面的操作
  • 如果上述操作无法解决问题,重复前面的步骤,最后的内核重装命令换成下面的:
  • 如果上述操作依旧无法解决问题,尝试降级内核
  • 如果上述所有方法都失败了,请参照下述磁盘空间转移导致引导失败的解决办法,进行格式化启动分区,进行整个分区的引导信息重写。

2. 磁盘空间转移导致引导失败的解决办法

此方法适用于有独立引导分区的情况,如果boot是作为文件夹在根分区而不是作为独立分区挂载到根分区的话,请不要执行下述操作!!!因为这将清除分区的所有信息。

注:为什么不直接删除引导分区的所有文件进行重写引导分区信息?

答:本人试过,如果是这样的话,将会在重写的过程中发生各种各样的错误,不限于生成报错,ReadOnly filesystem等等。

具体步骤(由于上一次操作有点久,具体可能有点偏差,请读者自行鉴别):

  • 不要挂载引导分区,如果挂载了请先umount
  • 格式化引导分区 接下来查看分区格式是否正确 如果不是的话执行以下命令格式化对应分区 然后输入t,选择分区号,再根据提示选择更改的分区类型,p打印将更改成的信息。确认后输入w写入所有操作。
  • 挂载根分区和引导分区
  • 选择镜像源 选择好后保存退出。
  • 重新安装linux到磁盘
  • 转移操作权到待修复系统
  • 安装相关依赖包(对于EFI/GPT引导方式) 如果是BIOS/MBR引导,请参见https://www.viseator.com/2017/05/17/arch_install/内容
  • 部署Grub “如果报 warning failed to connect to lvmetadfalling back to device scanning.错误。简单的方法是编辑 /etc/lvm/lvm.conf这个文件,找到 use_lvmetad = 11修改为 0,保存,重新配置grub。

    如果报 grub-probe: error: cannot find a GRUB drive for /dev/sdb1, check your device.map类似错误,并且 sdb1这个地方是你的u盘,这是u盘 uefi分区造成的错误,对我们的正常安装没有影响,可以不用理会这条错误。”

  • 生成配置文件

  • 检查

    查看有没有Linux的入口,有的话就行,Windows的无关紧要,进入系统后可以再来生成。

  • 如果入口不存在

    查看是否有下列文件等

    如果没有,重新安装linux,生成配置文件

  • 检查如果已经有了入口了,退出重启

3. 卸载软件的时候不小心将系统核心依赖连带卸载,系统多数命令无法正常使用

如果pacman还可以用的话,直接重新安装对应依赖即可,如果卸载的依赖造成pacman都无法使用的话,需要用启动盘进行修复。

参照这篇文章https://poemdear.com/2019/05/06/invalid-or-corrupted-gpg-errors-pacstrap-mnt-base/

安装基本包,会将核心依赖自动补上即可解决问题。