注意以下不是修复教程,而是进行修复的过程中遇到的问题总结,修复教程网上很多就没必要为此再写了。
一般情况要是更新内核后导致系统无法启动,用Live-CD U盘启动进去后挂载根分区和启动分区,arch-chroot到根分区,然后运行
1 2 3 |
# pacman -S linux |
进行重装一般都可以恢复,还不行可以试一下
1 2 3 |
# pacman -Syyuu linux |
其中yy和uu的含义分别为:
-yy: forces package list refresh even if it’s up-to-date.
-uu: Upgrades packages and also downgrades some if repository has older version.
以下假设作为启动和根的目录是两个独立分区,且启动分区挂载到根分区 /boot 下
一:重装Grub情形
用U盘启动后挂在根分区和启动分区,运行以下命令重装
1 2 3 |
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB |
如果遇到IO错误或者报错文件系统为只读,可以卸载启动分区后格式化该分区,运行以下命令:
1 2 3 |
# mkfs.vfat -F32 /dev/nvme0n1p1 #将nvme0n1p1改为你自己的设备名称 |
安装成功后生成grub.cfg:
1 2 3 |
# grub-mkconfig -o /boot/grub/grub.cfg |
如果出现了警告:
1 2 3 |
[crayon-651b12c4c2d21173974810 inline="true" ]WARNING: Device xx not initialized in udev database even after waiting 10000000 microseconds. |
那是os-prober导致的,先卸载再重新执行grub-mkconfig便可:
1 2 3 |
# pacman -Rs os-prober |
系统启动成功后再装好os-prober重新生成grub.cfg,因为os-prober用于检测其它系统的存在以便添加启动项到grub.cfg里,当然,如果你没有双系统,那便不用管这个了。
grub.cfg成功生成后,退出重启到系统,
二:系统启动后挂载分区失败
先输入密码进入命令行模式,用
1 2 3 |
# fdisk -l |
检测当前硬盘分区名称,对比/etc/fstab里的,如果名称对不上,说明问题出现在这里,那是因为在用U盘启动进行修复系统时,分区名称发生了变化,当时使用命令:
1 2 3 |
# genfstab -L /mnt >> /mnt/etc/fstab |
生成的fstab和正常启动系统时分配的分区名称不一致导致的。
手动修改/etc/fstab里的分区名称,使其与正常启动系统时的一致便可
如我的分区无法挂载时的fstab是这样的:
# /dev/nvme1n1p1 UUID=7259-031D
/dev/nvme1n1p1 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso88
59-1,shortname=mixed,errors=remount-ro 0 2
其中的nvme1n1p1 其实应该为nvme0n1p1,用fdisk -l可以查看到,fstab跟实际设备名不一致导致无法挂载成功启动桌面。
当然如果直接用UUID来表示是不用这么麻烦改设备名或者说分区名的。
其他情况导致的分区无法挂载暂时没遇到。