这篇文章上次修改于 1775 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
之前笔电重装win10,不小心把EFI分区给干掉了,也忘记了备份。
Windows的EFI分区恢复比较轻松,用DISM++就可以轻松解决。
这里记录下使用archLinux livecd修复manjaro系统grub引导经过。
修复EFI启动文件
制作archLinux livecdU盘,然后通过u盘启动到arch临时系统。
还有可以用archlinux的UEFI Netboot文件,在UEFI shell启动它,就可以网络启动archlinux livecd了,还可以选择镜像源,非常方便。平时可以放在EFI分区里面,以备急用。
挂载并进入系统
fdisk -l
Disk /dev/sda: 60 GiB, 64424509440 bytes, 125829120 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: FCD5BB38-3902-430F-B051-46ACDE205F63
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 125827071 124776448 59.5G Linux filesystem
查看磁盘分区
mount /dev/sda2 /mnt
挂载系统根目录
mount /dev/sd1 /mnt/boot
挂载EFI启动分区
arch-chroot
切换到需要修复的系统
重建引导程序
pacman -S grub os-prober efibootmgr
manjaro通常带有这些软件包,可以跳过
grub-install --recheck /dev/sda --efi-directory=/boot
在EFI启动分区创建引导文件,注意/dev/sda对应的是整个磁盘
grub-mkconfig -o /boot/grub/grub.cfg
生成grub的配置文件
exit
reboot
重启检查能否启动
碰到的一些问题
grub启动项中没有manjaro启动项
修复重启后能够进入grub引导界面,但是只有Windows启动项,没有找到manjaro的启动项。
可以是安装了不同版本的内核,修复是只能修复系统默认版本的内核,其他版本的内核是不能被自动修复的,所以启动项里看不到启动内核项。
解决方法也比较简单,安装默认的系统内核,重新生成grub引导。
使用livecd U盘启动,挂载并进入系统
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot
arch-chroot /mnt
pacman -S linux
pacman -Syu
重新安装内核
update-grub
重建grub配置
Linux找不到EFI分区导致无法启动
使用livecd U盘启动,挂载并进入系统,上面讲过就不重复了。
查看EFI分区的UUID
ls -l /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 10 Jul 18 06:16 3c17e54c-51a3-47ad-ad0e-3dc3a7b19421 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jul 18 06:16 E300-7464 -> ../../sda1
结合fdisk -l
命令找到EFI分区,找到其UUID
vim /etc/fstab
将EFI分区的UUID修改为当前的,保存并重启。
已有 3 条评论
感谢分享
@梦霸 first comment 😆
不是在修grub,就是在修grub的路上,感谢,收藏了