無法使用 Grub2 與 Arch Linux 一起雙引導 FreeBSD
Grub 看到的我的磁碟分區方案如下:
hd0,gpt1: EFI system hd0,gpt2: Linux Swap hd0,gpt3: Linux Filesystem hd0,gpt4: FreeBSD UFS`
FreeBSD 11.0-RELEASE 的安裝過程很順利,我還嘗試了 chroot 和更新系統,以防萬一。然後我啟動到 Arch Linux 並編輯
/etc/grub/40_custom
,嘗試各種配置(請參閱wiki.archlinux.org 上 GRUB 中的 FreeBSD 菜單條目),然後執行grub-mkconfig -o /boot/grub/grub.cfg
.(注意:我編輯了“mountfrom”參數,為根 fs 指定了正確的 dev 文件,在我的例子中是 ada0p4,並省略了“bsd1”條目,只設置(hd0,gpt4),否則找不到分割。)
如果我載入
kfreebsd /boot/loader
並啟動,我會得到一個黑屏。如果我載入
kfreebsd /boot/kernel/kernel kfreebsd_loadenv /boot/device.hints set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0p4 set kFreeBSD.vfs.root.mountfrom.options=rw
並啟動,我明白了:
我的筆記型電腦是 Thinkpad X220(股票 BIOS 是最新的)。蠐螬版本:
2.02.beta3-4
.有什麼想法嗎?如果您需要更多資訊,請發表評論。
我的
grub.cfg
(連結):# # DO NOT EDIT THIS FILE # # It is automatically generated by grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### insmod part_gpt insmod part_msdos if [ -s $prefix/grubenv ]; then load_env fi if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="0" fi if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" else menuentry_id_option="" fi export menuentry_id_option if [ "${prev_saved_entry}" ]; then set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true fi function savedefault { if [ -z "${boot_once}" ]; then saved_entry="${chosen}" save_env saved_entry fi } function load_video { if [ x$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop insmod efi_uga insmod ieee1275_fb insmod vbe insmod vga insmod video_bochs insmod video_cirrus fi } if [ x$feature_default_font_path = xy ] ; then font=unicode else insmod part_gpt insmod ext2 set root='hd0,gpt3' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 ff637c2e-1e42-4533-9a12-6ac2f6d43c9b else search --no-floppy --fs-uuid --set=root ff637c2e-1e42-4533-9a12-6ac2f6d43c9b fi font="/usr/share/grub/unicode.pf2" fi if loadfont $font ; then set gfxmode=1024x768 load_video insmod gfxterm set locale_dir=$prefix/locale set lang=en_US insmod gettext fi terminal_input console terminal_output gfxterm if [ x$feature_timeout_style = xy ] ; then set timeout_style=menu set timeout=5 # Fallback normal timeout code in case the timeout_style feature is # unavailable. else set timeout=5 fi ### END /etc/grub.d/00_header ### ### BEGIN /etc/grub.d/10_linux ### menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ff637c2e-1e42-4533-9a12-6ac2f6d43c9b' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 BE35-0EC9 else search --no-floppy --fs-uuid --set=root BE35-0EC9 fi echo 'Loading Linux linux ...' linux /vmlinuz-linux root=UUID=ff637c2e-1e42-4533-9a12-6ac2f6d43c9b rw echo 'Loading initial ramdisk ...' initrd /intel-ucode.img /initramfs-linux.img } submenu 'Advanced options for Arch Linux' $menuentry_id_option 'gnulinux-advanced-ff637c2e-1e42-4533-9a12-6ac2f6d43c9b' { menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-ff637c2e-1e42-4533-9a12-6ac2f6d43c9b' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 BE35-0EC9 else search --no-floppy --fs-uuid --set=root BE35-0EC9 fi echo 'Loading Linux linux ...' linux /vmlinuz-linux root=UUID=ff637c2e-1e42-4533-9a12-6ac2f6d43c9b rw echo 'Loading initial ramdisk ...' initrd /intel-ucode.img /initramfs-linux.img } menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-ff637c2e-1e42-4533-9a12-6ac2f6d43c9b' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 BE35-0EC9 else search --no-floppy --fs-uuid --set=root BE35-0EC9 fi echo 'Loading Linux linux ...' linux /vmlinuz-linux root=UUID=ff637c2e-1e42-4533-9a12-6ac2f6d43c9b rw echo 'Loading initial ramdisk ...' initrd /intel-ucode.img /initramfs-linux-fallback.img } } ### END /etc/grub.d/10_linux ### ### BEGIN /etc/grub.d/20_linux_xen ### ### END /etc/grub.d/20_linux_xen ### ### BEGIN /etc/grub.d/30_os-prober ### ### END /etc/grub.d/30_os-prober ### ### BEGIN /etc/grub.d/40_custom ### # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'FreeBSD 11.0' { insmod ufs2 set root=(hd0,gpt4) kfreebsd /boot/kernel/kernel kfreebsd_loadenv /boot/device.hints set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0p4 set kFreeBSD.vfs.root.mountfrom.options=rw } ### END /etc/grub.d/40_custom ### ### BEGIN /etc/grub.d/41_custom ### if [ -f ${config_directory}/custom.cfg ]; then source ${config_directory}/custom.cfg elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then source $prefix/custom.cfg; fi ### END /etc/grub.d/41_custom ###
編輯:忘了提,就在磁碟分區之前,我收到以下文本的警告
已知您的 Lenovo 型號有一個 BIOS 錯誤,該錯誤會阻止它在沒有 UEFI 的情況下從 GPT 分區引導。您希望安裝程序為您應用解決方法嗎?
由於我使用 UEFI 啟動,我選擇不應用它(我什至嘗試應用它但沒有成功)。
雖然大多數指南建議使用
chainloader +1
鍊式載入,但它對我不起作用。以下配置成功了:
insmod ufs2 set root=(hd0,gpt4) chainloader /boot/loader.efi
我在使用同一台筆記型電腦(聯想 X220 有 2 個硬碟,一個用於系統/一個用於數據)和 FreeBSD 10 時遇到了同樣的問題。對我來說,一種解決方案是:
- 安裝 MBR 方案(這台筆記型電腦上的 GPT 支持似乎已損壞)
- 安裝 grub
- 在某個分區上安裝 FreeBSD
我
grub.cfg
的很簡單(並且適用於年齡):menuentry 'FreeBSD' { insmod bsd insmod ufs2 set root='hd0,msdos3' kfreebsd /boot/loader }
我只是使用 FreeBSD引導載入程序來啟動 FreeBSD 核心(在我的loader.conf中有一些自定義配置)。如果您嘗試使用
kfreebsd
FreeBSD 核心上的選項直接啟動,您將不得不配置很多東西。順便說一句,您是否閱讀過有關使用 grub2 的 multiboot env 的官方 FreeBSD 文件?