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
存在,它可能会定义不同的标签顺序,因为您似乎至少有sda
和sdb
。
等等...即使您的系统以本机 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
文件中。