Arch Linux系统修复指南 – 寻

您所在的位置:网站首页 系统开机修复系统 Arch Linux系统修复指南 – 寻

Arch Linux系统修复指南 – 寻

2024-07-15 15:49| 来源: 网络整理| 查看: 265

一:前期准备

拿一个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盘设备号和分区号 123  fdisk -l  会看到类似以下的输出,一般通过U盘的大小就能知道哪个是U盘设备号。 123456789101112  Disk /dev/sda: 14.4 GiB, 15502147584 bytes, 30277632 sectorsDisk model: DataTraveler 3.0Units: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0x2ec1b483 Device     Boot Start      End  Sectors  Size Id Type/dev/sda1        8064 30277631 30269568 14.4G  c W95 FAT32 (LBA)  比如我的是/dev/sda, 注意设备号后面一定没有数字,/dev/sda1是分区号!!!记住你自己的U盘设备号,等一下要用。 输入以下命令进行U盘弹出: 123  umount /dev/sda1  #注意弹出使用的是分区号  在终端输入以下命令获取U盘设备号,前面如果已经获取了,请跳过这步。 123  lsblk  看到类似以下输出,找到自己U盘的设备号,比如下面sda即是我U盘的设备号: 12345  NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTsda           8:0    1  14.4G  0 disk └─sda1        8:1    1  14.4G  0 part  使用以下dd命令刻写U盘,注意将if等于号后面的镜像改成你自己的,of等号后面的改成你U盘的设备号,而且是非数字结尾的!!!    不能是/dev/sda1!!! 123  sudo dd bs=4M if=./archlinux-2019.05.02-x86_64.iso of=/dev/sda status=progress oflag=sync  还有其他各种各样的方法,请参考Arch Wiki:https://wiki.archlinux.org/index.php/USB_flash_installation_media#BIOS_and_UEFI_bootable_USB 3. 用refus刻录U盘启动盘

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

具体方法请网上自行搜索,比较简单不再赘述,记得一定要使用dd方式写入U盘即可。 还有其他各种各样的方法,请参考Arch Wiki:https://wiki.archlinux.org/index.php/USB_flash_installation_media#BIOS_and_UEFI_bootable_USB 4. 关机启动到U盘 完全关机后,按电源键开机,在屏幕出现灯光的时候,按几下F12或对应型号电脑进入启动项选择的快捷键(如果不是F12,请网上自行查找或者多试几个其他键,或者进入BIOS手动选择第一启动项)。 进入到开机项选择后,选择U盘启动的项目(按方向键选择),然后回车 等待进入U盘或者回车直接进入(Boot Arch Linux(x86_64))  5. 连接网络

123  wifi-menu  #使用此命令按指示连接好无线网络 

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

123  dhcpcd 

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

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

6. 同步时间

123  timedatectl set-ntp true 

二:分析问题,解决问题 1. 更新内核后无法启动,报错类似premature end of file /boot/vmlinuz

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

查看Linux系统分区并执行挂载操作 123  fdisk -l  识别出你的根分区和启动分区,先挂载根分区到/mnt, 再挂载启动分区到/mnt/boot, 示例 1234  mount /dev/nvme0n1p2 /mntmount /dev/nvme0n1p1 /mnt/boot  #请将分区号换成你自己的  Arch-chroot到受损系统 123  arch-chroot /mnt  重新安装内核 123456  pacman -S linux #如果是lts内核,请替换成如下命令pacman -S linux-lts  关机重启,如果依旧无法启动,再执行后面的操作 1234  exitreboot  如果上述操作无法解决问题,重复前面的步骤,最后的内核重装命令换成下面的: 123  pacman -Syyuu linux  如果上述操作依旧无法解决问题,尝试降级内核 1234  pacman -U /var/cache/pacman/pkg/linux-5.0.12.arch2-1-x86_64.pkg.tar.xz#将最后的linux内核包换成你自己的上一个可用的内核版本  如果上述所有方法都失败了,请参照下述磁盘空间转移导致引导失败的解决办法,进行格式化启动分区,进行整个分区的引导信息重写。 2. 磁盘空间转移导致引导失败的解决办法

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

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

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

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

不要挂载引导分区,如果挂载了请先umount 123  umount /dev/sda1 #将sda1换成你自己的引导分区号  格式化引导分区 123  mkfs.fat -F32 /dev/sdx1  #将sda1换成你自己的引导分区号  接下来查看分区格式是否正确 123456789  fdisk -l 对应引导分区输出应类似如下:Device             Start       End   Sectors  Size Type/dev/nvme0n1p1      2048   1050623   1048576  512M EFI System 重要的是显示的是EFI System  如果不是的话执行以下命令格式化对应分区 123456  fdisk /dev/nvme0n1  #注意这里指的是一整个设备号,而不是分区号#将nvme0n1换成你自己的设备号,如sda,不含数字#如果是固态的话,就是类似我的这样,不包含最后的p几。  然后输入t,选择分区号,再根据提示选择更改的分区类型,p打印将更改成的信息。确认后输入w写入所有操作。 挂载根分区和引导分区 123456  mount /dev/nvme0n1p2 /mntmount /dev/nvme0n1p1 /mnt/boot #nvme0n1p1换成你自己的引导分区号,相应的nvme0n1p2换成你的根分区号  选择镜像源 12345678910111213  vim /etc/pacman.d/mirrorlist #找到China的行,将它复制到文件最前面,并将网址前的‘#’号反注释掉如下是我的配置示例:## ChinaServer = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch## ChinaServer = http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch## ChinaServer = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch#这些内容可以手动输入  选择好后保存退出。 重新安装linux到磁盘 123  pacstrap /mnt base  转移操作权到待修复系统 123  arch-chroot /mnt  安装相关依赖包(对于EFI/GPT引导方式) 123  pacman -S intel-ucode os-prober grub efibootmgr  如果是BIOS/MBR引导,请参见https://www.viseator.com/2017/05/17/arch_install/内容 部署Grub 12345  grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub#如果grub生成出现了非下列错误,请先卸载os-prober包,#据笔者记忆,os-prober包导致过中途某个环节的失败。  “如果报 warning failed to connect to lvmetad,falling back to device scanning.错误。简单的方法是编辑 /etc/lvm/lvm.conf这个文件,找到 use_lvmetad = 1将 1修改为 0,保存,重新配置grub。

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

生成配置文件 123  grub-mkconfig -o /boot/grub/grub.cfg 

检查 123  cat /boot/grub/grub.cfg 

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

如果入口不存在 123  ls /boot 

查看是否有下列文件等

12345  initramfs-linux.imgintel-ucode.imgvmlinuz-linux 

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

1234  pacman -S linuxgrub-mkconfig -o /boot/grub/grub.cfg 

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

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

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

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

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

Post Views: 10,803


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3