Grub2를 사용하여 FreeBSD와 Arch Linux를 동시에 시작할 수 없습니다

Grub2를 사용하여 FreeBSD와 Arch Linux를 동시에 시작할 수 없습니다

Grub을 통해 본 내 디스크 파티션 구성표는 다음과 같습니다.

hd0,gpt1: EFI system
hd0,gpt2: Linux Swap
hd0,gpt3: Linux Filesystem
hd0,gpt4: FreeBSD UFS`

FreeBSD 11.0-RELEASE 설치는 순조롭게 진행되었으며, 만약을 대비해 루트를 바꾸고 시스템 업데이트도 시도했습니다. 그런 다음 Arch Linux로 부팅하고 편집하여 /etc/grub/40_custom다양한 구성을 시도했습니다(참조:wiki.archlinux.org의 GRUB에 있는 FreeBSD 메뉴 항목) 그리고는 도망갔습니다 grub-mkconfig -o /boot/grub/grub.cfg.

(참고: 루트 파일 시스템에 대한 올바른 개발 파일(내 경우에는 ada0p4)을 지정하기 위해 "mountfrom" 매개변수를 편집했고 "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는 최신 버전입니다). GRUB 버전: 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 모델에는 UEFI 없이 GPT 파티션에서 부팅하지 못하게 하는 BIOS 버그가 있는 것으로 알려져 있습니다. 설치 프로그램이 해결 방법을 적용하도록 하시겠습니까?

UEFI로 부팅을 했기 때문에 적용하지 않기로 했습니다. (적용을 시도해도 성공하지 못했습니다.)

답변1

동일한 노트북(Lenovo X220, 하드 드라이브 2개, 시스템용 하나, 데이터용 하나)에서 FreeBSD 10과 동일한 문제가 발생했습니다. 나에게 해결책은 다음과 같습니다.

  1. MBR 구성표 설치(이 노트북에서는 GPT 지원이 중단된 것 같습니다)
  2. 그럽 설치
  3. 파티션에 FreeBSD 설치

내 것은 grub.cfg간단합니다(그리고 수년 동안 훌륭하게 작동했습니다).

menuentry 'FreeBSD' {
  insmod bsd
  insmod ufs2
  set root='hd0,msdos3'
  kfreebsd /boot/loader
}

저는 그냥 FreeBSD를 사용합니다부트 로더FreeBSD 커널을 부팅합니다(내로더 구성 파일). FreeBSD 커널의 옵션을 사용하여 직접 부팅 하려고 하면 kfreebsd많은 것을 구성해야 합니다.

그런데 읽어보셨나요?grub2를 사용하는 다중 부팅 환경에 대한 FreeBSD 공식 문서?

답변2

대부분의 가이드에서는 체인 로딩을 권장하지만 chainloader +1나에게는 효과가 없었습니다.
다음 구성은 목표를 달성합니다.

insmod ufs2  
set root=(hd0,gpt4)  
chainloader /boot/loader.efi

관련 정보