在WIN下的厂商驱动管理软件近期不停提示升级BIOS,终于有一天手痒没忍住自己的强迫症点了确认升级 。
然而,经过了几分钟的神秘黑屏升级过程后,启动变成了直接进入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命令行里面敲出来确实不容易,然而早有人为我们想好了这一点,它们被直接在根目录下做了一个链接,并且简化了文件名。
用到了---->发现了---->暗爽了
└──╼ #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