在这种情况下修复 grub 的最佳方法

在这种情况下修复 grub 的最佳方法

最初我有双启动,Windows 10 和 Ubuntu。详细信息:
- /dev/sda1 中的 Windows EFI 文件
- /dev/sda8 中的 Ubuntu

为了学习,我开始关注 Linux From Scratch 项目,尝试创建自己的 Linux。我为此使用了 /dev/sda9 分区。完成后,我无法在 grub 菜单中找到我的 Windows 和 Ubuntu,只能从头开始使用 Linux。但是当我尝试从 Live CD 启动时,Ubuntu 和 Windows 都会与 Live CD 选项一起显示。
使用 Live CD 选项时,这些是一些命令的输出:

ls -l /dev/disk/by-label/

total 0
lrwxrwxrwx 1 root root 10 Mar 19 10:15 DELLSUPPORT -> ../../sda7
lrwxrwxrwx 1 root root 10 Mar 19 10:15 ESP -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 19 10:15 Image -> ../../sda6
lrwxrwxrwx 1 root root 10 Mar 19 10:15 New\x20Volume -> ../../sda4
lrwxrwxrwx 1 root root 10 Mar 19 10:15 OS -> ../../sda3
lrwxrwxrwx 1 root root 10 Mar 19 10:15 UBUNTU\x2017_1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Mar 19 10:15 WINRETOOLS -> ../../sda5


对于命令 sudo fdisk -l

    Disk /dev/loop0: 1.3 GiB, 1425731584 bytes, 2784632 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


Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: B128B55E-BDDA-4F19-8CBA-8FAD8E802736

Device          Start        End    Sectors   Size Type
/dev/sda1        2048    1026047    1024000   500M EFI System
/dev/sda2     1026048    1288191     262144   128M Microsoft reserved
/dev/sda3     1288192 1722216447 1720928256 820.6G Microsoft basic data
/dev/sda4  1722216448 2656086015  933869568 445.3G Microsoft basic data
/dev/sda5  3879495680 3880417279     921600   450M Windows recovery environment
/dev/sda6  3880417280 3904839679   24422400  11.7G Windows recovery environment
/dev/sda7  3904841728 3907028991    2187264     1G Windows recovery environment
/dev/sda8  2752610304 3879495679 1126885376 537.3G Linux filesystem
/dev/sda9  2656086016 2752610303   96524288    46G Linux filesystem

Partition table entries are not in disk order.




Disk /dev/sdb: 14.7 GiB, 15744892928 bytes, 30751744 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: dos
Disk identifier: 0xcf80b994

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdb1  *     2048 30751743 30749696 14.7G  c W95 FAT32 (LBA)


对于命令,sudo blkid:

/dev/sda1: LABEL="ESP" UUID="C496-69E5" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="4950763d-c24d-4680-927a-1e595c303648"
/dev/sda3: LABEL="OS" UUID="9254944E54943747" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="b16a3bfb-16fb-4275-a3fe-6e3dbcb689a1"
/dev/sda4: LABEL="New Volume" UUID="48103B2D103B20FC" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="25545acb-af8e-4230-a6d8-24337815dde9"
/dev/sda5: LABEL="WINRETOOLS" UUID="5018B15D18B14330" TYPE="ntfs" PARTUUID="c1f4defe-71d1-46fd-a501-cabfd279c132"
/dev/sda6: LABEL="Image" UUID="B23AB2C13AB281C1" TYPE="ntfs" PARTUUID="cfa18786-2f02-4b3a-ae6e-d44dc0364e50"
/dev/sda7: LABEL="DELLSUPPORT" UUID="6CE0AEC7E0AE973C" TYPE="ntfs" PARTUUID="82b58d3a-141a-4134-91cb-f41c3994121c"
/dev/sda8: UUID="972bea99-5b5f-410b-830b-b3c248d54062" TYPE="ext4" PARTUUID="3ee28255-1737-405c-8bf7-90695a0ce8b2"
/dev/sda9: UUID="180af068-75e7-4fb4-b459-271231cec69f" TYPE="ext4" PARTUUID="5dfc33a2-73a5-4ebb-994e-c1cc7d655d21"
/dev/sdb1: LABEL="UBUNTU 17_1" UUID="D29D-D873" TYPE="vfat" PARTUUID="cf80b994-01"
/dev/loop0: TYPE="squashfs"
/dev/sda2: PARTLABEL="Microsoft reserved partition" PARTUUID="6eec3d1c-1f7f-46a9-9d7a-fa7b75775a1f"

安装所有 sdaX 并运行后grub-install --boot-directory=/mnt/boot /dev/sda,给出以下错误:

Installing for i386-pc platform.
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.

我已经搜索了很多,但似乎没有任何效果。任何帮助都会很棒。

答案1

您的系统使用 UEFI 和 GPT,并且您尝试安装适用于旧版 BIOS 的 GRUB 版本,但没有旧版兼容 BIOS 引导分区。这不是有效的组合。

任何传统风格的引导加载程序都不能包含使用 UEFI 引导方案的操作系统,因为 UEFI 远远超出了它们的开发环境。一些 UEFI 引导加载程序可能如果 UEFI 引导加载程序的编写者知道用于在此特定 UEFI 实现中调用旧版兼容性的方法,则能够提供启动旧版操作系统的选项。

最好的选择是使用 UEFI 版本的 GRUB(它应该显示类似于Installing for x86_64-efi platformi386-pc 的内容。)

这将允许将 GRUB 作为文件安装在 /dev/sda1 中的 \EFI[您选择的名称]\grubx64.efi 等目录中,并且根本不需要嵌入或阻止列表等 BIOS 风格的技巧。grub-installUEFI 版本的 GRUB 命令应该会自动为您处理这个问题。

当您从 Live CD 启动时,您应该知道您的系统可能有两种不同的 CD 启动方式:传统 BIOS 方式和 UEFI 方式。诀窍在于,只有系统以 UEFI 方式启动时,才能访问对于安装引导加载程序非常重要的 UEFI 固件启动变量。某些操作系统安装程序实际上会检测 UEFI 引导变量是否可访问,并使用该变量来决定是安装 UEFI 还是旧版 BIOS 版本的引导加载程序。如果您必须从传统引导的 CD/DVD 安装可 UEFI 引导的操作系统,则必须找到某种方法来覆盖此决定。

在 GPT 分区的磁盘上创建 BIOS 引导分区需要您不断翻转固件设置:适用于 Windows 的 UEFI 引导,以及适用于 Linux 安装的传统式引导。这并不理想,并非所有系统都支持 BIOS+GPT 组合。

如果您的目标是了解新硬件的过程,则完全重新安装系统以实现完整的旧版操作将需要大量工作,并且会适得其反。

相关内容