Debian GRUB2 上的 FreeBSD 问题

Debian GRUB2 上的 FreeBSD 问题

FreeBSD 新手来了。

我有 Windows 10、Debian Linux,最近又安装了 FreeBSD,安装在 240GB SSD 上,还有一个专门用于文件保留的 1TB HDD。 FreeBSD 的安装非常顺利,因为我仔细地遵循了可用的步骤,但我无法引导到系统,因为我的 GRUB 很难识别它。

我已经编辑过了/etc/grub.d/40_custom并在更新 GRUB 之前添加了这段代码:

menuentry "FreeBSD" {
    insmod ufs2
    set root=(hd0,gpt3)
    kfreebsd /boot/loader
}

在做一个更新grub,终端向我输出:

Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Imagem Linux encontrada: /boot/vmlinuz-4.19.0-6-amd64
Imagem initrd encontrada: /boot/initrd.img-4.19.0-6-amd64
Imagem Linux encontrada: /boot/vmlinuz-4.19.0-5-amd64
Imagem initrd encontrada: /boot/initrd.img-4.19.0-5-amd64
Encontrado unknown Linux distribution em /dev/sda6
Encontrado Windows Boot Manager em /dev/sdb1@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
concluído

的输出fdisk -l如下:

Disco /dev/sda: 223,6 GiB, 240065183744 bytes, 468877312 setores
Modelo de disco: SanDisk SSD PLUS
Unidades: setor de 1 * 512 = 512 bytes
Tamanho de setor (lógico/físico): 512 bytes / 512 bytes
Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes
Tipo de rótulo do disco: gpt
Identificador do disco: 51AF3127-339F-4F6D-A1D0-4A7E66BCEBDE

Dispositivo    Início       Fim   Setores Tamanho Tipo
/dev/sda1          34     32767     32734     16M Microsoft reservado
/dev/sda2       32768 305035263 305002496  145,4G Microsoft dados básico
/dev/sda3   305035264 305036287      1024    512K FreeBSD inicialização
/dev/sda4   367949824 368158719    208896    102M Sistema EFI
/dev/sda5   368158720 468875263 100716544     48G Linux sistema de arquivos
/dev/sda6   305036288 367949823  62913536     30G FreeBSD UFS

我尝试过设置根=(hd0,gptX)到3和6,删除了“gpt”,做了很多事情,但是没有任何效果,我的输出仍然是相同的:

error: disk 'hd0,gpt3' not found.

我不知道 GRUB 如何无法识别这些分区,也许我配置了错误的方式。 Windows 10 和 Debian 正常启动,没有任何问题。

答案1

您确定 GRUB 的(hd0)标签指的是吗/dev/sda?如果/boot/grub/device.map存在,它可能会定义不同的标签顺序,因为您似乎至少有sdasdb

等等...即使您的系统以本机 UEFI 样式启动,您似乎也创建了 BIOS 样式的 FreeBSD 启动分区。这可能行不通,因为此类分区中的引导代码是旧式 16 位代码,而 UEFI 需要现代 64 位代码。

您可能遵循的说明假设系统以旧版 BIOS 方式启动,即使使用 GPT 分区也是如此。您的本机 UEFI Windows 引导加载程序/dev/sdb1和“为 EFI 固件配置添加启动菜单条目”都表明您的系统当前未设置为以这种方式工作。

相反,您可以使用 FreeBSD 的 GRUB 配置执行以下操作:

menuentry "FreeBSD" {
    insmod ufs2
    search --file --set root --no-floppy /boot/loader.efi
    chainloader /boot/loader.efi
}

如果我正确理解了我在 google 上搜索的内容(我没有使用过现代版本的 FreeBSD),这应该会在您的设备上找到 UEFI 版本的 BSD 加载器代码/dev/sda6并直接从那里加载它 - 无论(hdN)GRUB 分配给哪个标签sda

UEFI 的“标准”方式是/EFI/FreeBSD在 EFI 系统分区上创建一个目录(显然/dev/sda4)并将 FreeBSD 复制/boot/loader.efi到其中。但由于 GRUB 有一个直接读取 UFS2 的模块,所以上面的代码也应该可以正常工作。

如果您/dev/sda4当前安装到/boot/efi,正如 Debian 通常所做的那样,那么标准 UEFI 风格的 FreeBSD 引导目录应该创建在/boot/efi/EFI/FreeBSD

由于 UEFI 可以简单地将任何引导加载程序作为 ESP 分区上的常规文件进行处理,因此根本不需要单独的 FreeBSD 引导分区:完整的 FreeBSD 引导代码可以包含在该loader.efi文件中。

相关内容