我使用的是华硕 N53J,目前使用的是 MBR 启动。我在 BIOS 中启用了 UEFI 启动,似乎可以启动已配置 gpt 表的 USB 驱动器。不过我还没搞清楚如何在 USB 驱动器上使用专用的 EFI 启动分区。
另外,我通过外部 SATA 连接将第二个硬盘连接到笔记本电脑,创建了 gpt 分区表、特别是启动分区以及文件系统和交换分区。
当我grub-mkconfig
在内部硬盘上运行时,它会在外部硬盘上找到新的 Linux 映像。我可以启动到该外部映像并确认 esp 启动分区已挂载在/boot/efi
,因此看来我应该能够配置 grub2。但是,如果我grub-mkconfig
在从外部驱动器执行时运行,则找不到其自己的映像,只能找到内部驱动器上的 Linux 和 Windows 映像。
我也无法efibootmgr
运行。我读过的教程要么没有明确说明如何操作和为什么操作,所以我只能自己排除故障,要么使用我认为它们正在使用的软件包中找不到的命令。在将磁盘安装为主启动盘之前,有人能指点如何配置磁盘吗?
谢谢。
更新 2015-12-30 我已经制作了一个至少可以启动 grub 救援的 USB 驱动器。我不知道为什么 grub 无法从这个驱动器运行,但它至少允许我手动启动到我的目标操作系统。因为我现在已经通过 UEFI 启动了efibootmgr
。
我针对安装在 的 esp 分区执行了新的 grub-install /boot/efi
。此操作完成且没有错误。但是,当我选择用于引导的目标系统时,固件加载程序会停留在空白屏幕上。无论磁盘是通过 ESATA 连接还是已移至机器中的主磁盘,都会发生这种情况。
的输出efibootmgr -v
是:
BootCurrent: 0003
Timeout: 2 seconds
BootOrder: 0005,0002,0003,0004,0000,0001
Boot0000 Hard Drive BBS(HD,,0x0)
Boot0001 CD/DVD Drive BBS(CDROM,,0x0)P1: Slimtype BD E DS4E1S .
Boot0002* ubuntu 15.10 HD(1,GPT,8b6800c2-0b24-4f00-aa66-b1378052604e,0x800,0xfa000)/File(\bootx64.efi)
Boot0003* grub HD(2,GPT,b07e72fd-9168-4924-a17c-b75e55ed685c,0x800,0xfa000)/File(\Shellx64.efi)
Boot0004* UEFI: SanDisk Cruzer Micro 1.26 PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(2,0)/HD(2,GPT,b07e72fd-9168-4924-a17c-b75e55ed685c,0x800,0xfa000)
Boot0005* ubuntu15.10 HD(1,GPT,8b6800c2-0b24-4f00-aa66-b1378052604e,0x800,0xfa000)/File(\EFI\ubuntu15.10\grubx64.efi)
期望的目标是Boot0005
。 是一个复制到 的Boot0002
实验。和的行为相似。grubx64.efi
/boot/efi/bootx64.efi
Boot0002
Boot0005
Boot0003
(grub)是 USB 驱动器,也是唯一的启动方式,尽管它仅在 grub 救援中启动。
有什么想法我应该探索或哪些其他信息可以帮助诊断?
更多进展:
grub rescue> set
prefix=(hd0,2)/boot/grub ... This is the fat32-formatted esp boot partition
grub rescue>ls (hd0,2)/
unknown filesystem ... or similar words to that effect
grub rescue>set prefix=(hd0,1)/boot/grub ... ext4-formatted partition
grub rescue> insmod fat
grub rescue>ls (hd0,2)/
.... the directory is now read
将根设置为目标启动系统,将前缀设置为该目标系统的 /boot/grub 目录,我可以insmod linux
搜索配置文件并正常搜索。如果正常不启动启动选项页面,则将执行以下操作:
grub rescue>configfile /boot/grub/grub.cfg
我最终可以让目标从菜单启动。
我的概要是,grubx64.efi
USB 驱动器上没有配置正在使用的启动方法所需的模块。
当通过 efi 启动到我的目标文件系统时,我创建了一个新的 USB 驱动器,也带有一个 gpt 分区表,这次以 esp 启动作为分区 1。我提到这一点只是为了协助阅读后面介绍的 bios 启动表。
将 USB 分区 2 安装到适当的节点:
mkdir -p /boot/efi
将(USB 分区 1)挂载到(USB 分区 2)/boot/efi
grub-install --target=x86_64-efi --efi-directory=(USB partition 2)/boot/efi --removable
生成EFI/BOOT/BOOTx64.EFI
。BIOS 启动表中的 UEFI:Sandisk 条目是通过此加载程序进行启动的手段
grub-install --target=x86_64-efi --efi-directory=(USB partition2)/boot/efi --bootloader-id=USBboot
生成EFI/USBboot/grubx64.efi
。USBboot 条目也写入 bios 启动表中
cmp -v BOOT/BOOTx64.EFI USBboot/grubx64.efi
两种启动选项均无差异,
现在直接启动到目标文件系统,而不显示任何 grub 启动菜单。由于 USB 驱动器没有目录/boot/grub
或grub.cfg
,grubx64.exe
必须配置为在目标上而不是 USB 上搜索此目录。
$ efibootmgr -v
BootOrder: 0007,0004,0005,0002,0003,0008,0000,0001
Boot0000 Hard Drive BBS(HD,,0x0)
Boot0001 CD/DVD Drive BBS(CDROM,,0x0)P1: Slimtype BD E DS4E1S .
Boot0002* ubuntu 15.10 HD(1,GPT,8b6800c2-0b24-4f00-aa66-b1378052604e,0x800,0xfa000)/File(\bootx64.efi)
Boot0003* grub HD(2,GPT,b07e72fd-9168-4924-a17c-b75e55ed685c,0x800,0xfa000)/File(\Shellx64.efi)
Boot0004* ubuntu_15_10 HD(1,GPT,8b6800c2-0b24-4f00-aa66-b1378052604e,0x800,0xfa000)/File(\EFI\ubuntu_15_10\grubx64.efi)
Boot0005* ubuntu15.10 HD(1,GPT,8b6800c2-0b24-4f00-aa66-b1378052604e,0x800,0xfa000)/File(\EFI\ubuntu15.10\grubx64.efi)
Boot0007* USBboot HD(1,GPT,f887bf87-18a9-40e1-9bca-6c4bfd1cbb4a,0x800,0xc8000)/File(\EFI\USBboot\grubx64.efi)
Boot0008* UEFI: SanDisk PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(4,0)/HD(1,GPT,f887bf87-18a9-40e1-9bca-6c4bfd1cbb4a,0x800,0xc8000)
我还没搞清楚如何在不从外部 USB 驱动器启动的情况下进行 grub 救援。似乎我有两个问题:
- 我不完全了解如何配置 grub 以满足其预期用途,如何确保内置了必要的模块以及正确设置了前缀。
- 我没有正确配置华硕 N53J 上的 BIOS,或者它不接受硬盘配置作为有效的启动配置。
还有其他想法吗?我现在觉得这篇文章太长了。我该如何记录这篇文章,让它更易读?
状态更新
在网上浏览时我发现了grub-mkimage
。我还没有开始研究这个问题,一旦我研究完了,并能理解结果或提出新的问题,我就会报告进展情况。
答案1
在尝试了其他硬盘后,我确定我的问题似乎与原始硬盘上的 esp、boot 分区有关。当我最初创建 esp、boot 分区时,我接受了 gparted 建议的 1 MB 默认偏移量。通过探索为什么我可以从 USB 驱动器和通过 ESATA 连接的另一个硬盘驱动器启动,成功媒体的共同属性是 esp、boot 分区位于驱动器上的第一个,偏移量为 0。
我尝试移动 esp、boot 分区,但没有成功。但是,我没有检查以确保 UUID 和 PARTUUID 没有被修改,所以我不知道这次失败是因为移动时没有配置磁盘,BIOS 无法弄清楚如何读取它,还是因为我没有重新配置 grub 而失败。
无论如何,我学会了如何:正确地将文件系统移动到新硬盘上;从头开始配置问题硬盘。将文件系统移回原位,修改/etc/fstab
以反映已安装分区的新 UUID。esp、boot 分区在其根目录中有 Shellx64.efi 的副本
然后我:将硬盘重新安装到内部驱动器托架中,在 BIOS 设置模式下启动系统,Shellx64.efi
从 BIOS 启动,输入“c”进入 grub 提示符
grub> linux /vmlinuz root=/dev/sda2
grub> initrd /initrd.img
grub> boot
这启动了文件系统(以前如果我有办法进入 grub,它总是会这样)。这次当我运行 grub-install 并grub-mkconfig
重新启动时,BIOS 可以grubx64.efi
从 esp、boot 分区上的正确位置读取。成功!