双系统因升级BIOS导致UEFI启动项丢失,恢复操作备忘

系统配置

#1

在WIN下的厂商驱动管理软件近期不停提示升级BIOS,终于有一天手痒没忍住自己的强迫症点了确认升级 :roll_eyes:
然而,经过了几分钟的神秘黑屏升级过程后,启动变成了直接进入WINDOWS,默认进入PARROT的GRUB菜单没有了。
用PARROT LIVE的U盘启动,看分区和文件都在,放心一半,后面的问题是怎么把系统启动设置回来。
因GRUB的配置文件等都未变动,升级BIOS涉及不到磁盘文件,因此判断应该是在启动到指定的EFI阶段出了问题。
进BIOS查看,把升级后的默认SECURE BOOT等恢复到之前的设置状态,然后LIVE U盘启动到GRUB阶段修改指定ROOT目录位置进入原有的PARROT系统,efibootmgr命令配置BIOS的EFI启动项,再重启,完成恢复。

涉及操作整理备忘,如下:

1、由LIVE的GRUB进入本地硬盘的系统
grub界面,c键进入command模式,ls查看和查找原分区名,然后配置启动

set root=(hd1,gpt6)
linux /vmlinz root=/dev/sda6
initrd /initrd.img
boot

{{ ----另外这里多插一句话:
偷偷的赞一下系统的人性化设置,boot目录下的initrd.img-4.14.0-parrot7-amd64和vmlinuz-4.14.0-parrot7-amd64两个文件如果在grub命令行里面敲出来确实不容易,然而早有人为我们想好了这一点,它们被直接在根目录下做了一个链接,并且简化了文件名。
用到了---->发现了---->暗爽了 :rofl:

└──╼ #ll / | grep -E "vmli|initrd"
lrwxrwxrwx   1 root root    36 Jan  2 09:58 initrd.img -> boot/initrd.img-4.14.0-parrot7-amd64
lrwxrwxrwx   1 root root    36 Jan  2 09:58 initrd.img.old -> boot/initrd.img-4.14.0-parrot2-amd64
lrwxrwxrwx   1 root root    33 Jan  2 09:58 vmlinuz -> boot/vmlinuz-4.14.0-parrot7-amd64
lrwxrwxrwx   1 root root    33 Jan  2 09:58 vmlinuz.old -> boot/vmlinuz-4.14.0-parrot2-amd64

插话结束 — }}

2、查看BIOS当前的EFI启动项及顺序

└──╼ #efibootmgr 
BootCurrent: 0004
Timeout: 0 seconds
BootOrder: 0004,0000,2003,2001,2002
Boot0000* Recovery System
Boot0002* EFI Network 0 for IPv4 (xx-45-96-41-F0-xx) 
Boot0003* EFI Network 0 for IPv6 (xx-45-96-41-F0-xx) 
Boot0004* Windows Boot Manager
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network

以上是BIOS恢复初始状态,没有PARROT的启动项了

3、恢复BIOS的EFI启动项,根据自己的情况,配置使用了如下命令

efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\parrot\\grubx64.efi -L PersonalSystem

相关参数参考 https://cnzhx.net/blog/restore-grub2-boot-menu-with-uefi/
这里参数的大概含义:-c增加; -d设备; -p efi分区号; -l efi启动文件位置(这里原有文件未改变,只指定路径); -L EFI启动项名称。

增加后查看结果:

└──╼ #efibootmgr 
BootCurrent: 0004
Timeout: 0 seconds
BootOrder: 0004,0000,2003,2001,2002
Boot0000* Recovery System
Boot0002* EFI Network 0 for IPv4 (xx-45-96-41-F0-xx) 
Boot0003* EFI Network 0 for IPv6 (xx-45-96-41-F0-xx) 
Boot0004* Windows Boot Manager
Boot0005* PersonalSystem
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network

4、恢复BIOS的EFI启动顺序

efibootmgr -o 2001,0005,0004

这里设置的顺序是把USB放在第一位方便以后玩 live usb,PARROT的GRUB放在第二位,WINDOWS第三位。

重启后查看最终结果:

└──╼ #efibootmgr 
BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 0005,0004,0000,2003,2001,2002
Boot0000* Recovery System
Boot0002* EFI Network 0 for IPv4 (xx-45-96-41-F0-xx) 
Boot0003* EFI Network 0 for IPv6 (xx-45-96-41-F0-xx) 
Boot0004* Windows Boot Manager
Boot0005* PersonalSystem
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network

可能是因为没有插U盘的原因,这里查看的顺序USB排在了后面,在BIOS启动过程中选择EFI启动项的时候是按照命令设置的顺序排列的。最终感慨总算是虚惊一场的找回了之前的系统。


补充:
前几天刚刚处理了BIOS升级后问题,又一次遭遇到了WIN系统升级后不能启动的问题,重新把系统分区恢复出厂设置了,幸好用电脑厂商自带的恢复系统功能仅清理和恢复系统分区,另一个系统得以保留。重新恢复启动入口的时候发现EFI分区的parrot目录和grubx64.efi文件已经不在,恢复过程以上步骤3、4省略,在用恢复盘的GRUB进入将要恢复的系统root下直接用一条命令 grub-install --target=x86_64-efi 完成恢复。之前的情况,推测此命令也一样能解决,参考https://wiki.gentoo.org/wiki/GRUB2/zh-CN#Creating_EFI_boot_media 一节描述:This will install grub in /boot/grub, copy the core image to /boot/efi/EFI/gentoo/grubx64.efi, and call efibootmgr to add a boot entry. 这条命令的处理流程中是包含了efibootmgr的操作的。

┌─[root@rplcdname]─[~]
└──╼ #grub-install --target=x86_64-efi
Installing for x86_64-efi platform.
Installation finished. No error reported.
┌─[root@rplcdname]─[~]
└──╼ #cd /boot/efi/EFI/parrot
┌─[root@rplcdname]─[/boot/efi/EFI/parrot]
└──╼ #ll
total 120
-rwx------ 1 root root 122368 Jan 17 09:51 grubx64.efi
┌─[root@rplcdname]─[/boot/efi/EFI/parrot]
└──╼ #cd ..
┌─[root@rplcdname]─[/boot/efi/EFI]
└──╼ #ll
total 12
drwx------ 2 root root 4096 Oct 31  2016 Boot
drwx------ 4 root root 4096 Oct 31  2016 Microsoft
drwx------ 2 root root 4096 Jan 17 09:51 parrot
┌─[root@rplcdname]─[/boot/efi/EFI]
└──╼ #ls
Boot  Microsoft  parrot
┌─[root@rplcdname]─[/boot/efi/EFI]
└──╼ #cd ..
┌─[root@rplcdname]─[/boot/efi]
└──╼ #efibootmgr 
BootCurrent: 0004
Timeout: 0 seconds
BootOrder: 0005,0004,0001,2003,0000,2001,2002
Boot0000* Recovery System
Boot0001* Windows Boot Manager
Boot0002* EFI Network 0 for IPv4 (xx-45-96-41-F0-xx) 
Boot0003* EFI Network 0 for IPv6 (xx-45-96-41-F0-xx) 
Boot0004* Linpus lite
Boot0005* parrot
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network


#2

很羡慕大佬什么都会 :joy:


#3

只是些边边角角的小问题,不搞清楚可能又会导致重做系统浪费更长的时间,遇到了就搞清楚和解决掉吧,也真是没办法之后逼出来的办法 :sweat_smile:


#4

这就是学习的真谛吧哈哈


#5

试过那个 grub-install 不过我是直接装到某个分区了,没有用 target 选项,因为提示文件缺失无法解决 :confused:


#6

那你的电脑是不是传统BIOS mbr分区的 ?


#7

UEFI,GPT分区的 :expressionless: 以后更新得警惕了 :joy:


#8

再更新也没事,遇到问题并且踏平过一次之后心里就有底了 :grinning:


Partners Wiki IRC