先普及个少见的基础常识,本次故障的原因就是要理解这句话:

一些 UEFI 固件在显示 UEFI NVRAM 启动条目之前,需要在一个已知的位置上有一个可启动文件。如果是这种情况, grub-install 会说明 efibootmgr 添加了一个启动 GRUB 的条目,但这个条目不会在 VisualBIOS 启动顺序选择器中显示。解决方法是把 GRUB 安装到缺省/后备启动路径当中:
grub-install –target=x86_64-efi –efi-directory=esp –removable
或者你可以把已经安装好的 GRUB EFI 执行文件移动到缺省/后备路径中:(这都是后话,除非硬盘再接回原来的电脑上)
mv esp/EFI/grub esp/EFI/boot
mv esp/EFI/boot/grubx64.efi esp/EFI/boot/bootx64.efi

下面根据上文的理论开始实操:

一、用ARCH LINUX的U盘引导,进入UEFI SHELL菜单
#查看UEFI Shell 里找到的 EFI 分区
alias

#列出所有的EFI引导条目(看详情用-v参数)
bcfg boot dump

#查看fs1分区里的文件(因为我这是U盘引导启动,FS0是U盘)
ls fs1:
ls fs1:\efi

#进入对应的efi分区
fs1:

#创建文件夹及拷贝GRUB启动菜单文件
mkdir esp/EFI/boot
cp esp/EFI/grub/grubx64.efi esp/EFI/boot/bootx64.efi

到此为止可以reboot机器,就能够看到GRUB的启动菜单啦。

二、重新安装grub
#安装grub到/boot/grub/目录,并在UEFI的NVRAM里面创建一个名字叫GRUB的启动项。(如果你的启动项已满,这个命令会执行失败。你需要使用 uefi shell 来删除不必要的条目。)在配置完成后,记得grub-mkconfig -o /boot/grub/grub.cfg生成主配置文件。
#本次故障的起因就是老电脑上这样执行的命令,新电脑UEFI的nvram里面没GRUB的启动项。本次就注释掉,不再次执行此命令啦
#grub-install –target=x86_64-efi –efi-directory=esp –bootloader-id=GRUB

#–removable 选项,GRUB将被安装到 esp/EFI/boot/bootx64.efi。这样启动固件就可以在没有 UEFI 启动条目的的情况下找到。(即使 EFI 变量被重设或者你把这个驱动器接到其他电脑上,你仍可从这个驱动器上启动。)
#经过uefi shell的修改,引导系统后立刻重装grub,加入–removable参数
grub-install –target=x86_64-efi –efi-directory=esp –removable

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

至此,本次黑屏无法显示启动菜单的故障解决完毕。

=======
PS:uefi shell的一些常用命令
#把第3个启动选项移动到第0 (也就是说第0个是 UEFI 启动菜单的默认启动选项):
bcfg boot mv 3 0

#在编号为X的位置插入一个EFI引导项,X是一个数字编号(手动添加的UEFI启动项在硬盘发生变动(换硬盘、分区变化)时候会这行丢失,需要重新添加)
bcfg boot add X fs0:\EFI\grub\grubx64.efi “grub”

#添加Windows的引导项命令
bcfg boot add 0 fs0:\EFI\Microsoft\Boot\bootmgfw.efi “Windows”

#删除第4个启动选项:
bcfg boot rm 3

#EDIT 命令提供了类似于 nano 界面的基本编辑器,但是功能略少一点。它以 UTF-8 编码并且行尾结束符兼容 LF 和 CRLF
edit FS0:\EFI\refind\refind.conf

#bcfg 帮助文档:
help bcfg -v -b

#退出UEFI Shell
exit