Fedora

Qubes 無法在 Fedora/Qubes 雙啟動機器上啟動

  • May 11, 2016

我的目標是雙啟動 Qubes OS 3.1 和 Fedora 23 Workstation (respin)。這傢伙讓它在 Ubuntu 上執行,但他先安裝了 Ubuntu,而我先安裝了 Qubes。最後的手段是跟隨他並從頭開始重新安裝,但我想學習一些東西。

我嘗試了什麼:

  • 安裝 Qubes OS 3.1 (OK)
  • 更新 Qubes OS 3.1 dom0 和 Fedora23 模板(OK)
  • 安裝了最新的 Fedora 23 Workstation respin(好的,但報告了一些 GRUB2 引導載入程序失敗;不過 Fedora 啟動正常)
  • 更新了最新的 Fedora 23 工作站(好的,沒有更新)
  • 嘗試啟動 Qubes(失敗,GRUB2 啟動菜單中還沒有 menuentry)
  • 為 Qubes 創建了一個菜單項(好的,見下文)
  • 試圖啟動 Qubes(失敗,見截圖
  • google了這個解決方法並安裝了包
  • 我現在通過錯誤消息,但幾秒鐘後系統會自行重新啟動並無限次執行

我如何添加菜單項:

我啟動到 Fedora 並進入/etc/grub.d/文件夾,並編輯了40_custom文件。在那裡,我將 qubes 引導分區上 /boot/grub2/grub.cfg 文件的 xen 部分之間的所有內容粘貼到40_customFedora 上該文件的末尾。然後我在root下執行了以下命令

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

並且 qubes menuitems 生成到grub.cfg並在啟動菜單中可見。我可以稍後提供 grub.cfg 的內容,同時我想知道可能出了什麼問題以及如何解決它。

值得注意的資訊:

  • Qubes 在 Legacy BIOS 上從 GPT 啟動(帶有 2MB biosboot 分區)
  • Fedora 在 UEFI 上從 GPT 啟動(帶有 EFI 分區)
  • 每個作業系統都有單獨/boot的分區,以及其他分區
  • 沒有額外的/boot分區

這是承諾的 grub.cfg:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

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="${saved_entry}"
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
}

terminal_output console
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/01_users ###
if [ -f ${prefix}/user.cfg ]; then
 source ${prefix}/user.cfg
 if [ -n "${GRUB2_PASSWORD}" ]; then
   set superusers="root"
   export superusers
   password_pbkdf2 root ${GRUB2_PASSWORD}
 fi
fi
### END /etc/grub.d/01_users ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora (4.4.8-300.fc23.x86_64) 23 (Workstation Edition)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.4.8-300.fc23.x86_64-advanced-d43f46bc-7649-44ca-b02d-7599d115a8e8' {
   load_video
   set gfxpayload=keep
   insmod gzio
   insmod part_gpt
   insmod ext2
   set root='hd0,gpt6'
   if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6  440e2ced-56a2-432f-95e0-c5f1c33941a9
   else
     search --no-floppy --fs-uuid --set=root 440e2ced-56a2-432f-95e0-c5f1c33941a9
   fi
   linuxefi /vmlinuz-4.4.8-300.fc23.x86_64 root=UUID=d43f46bc-7649-44ca-b02d-7599d115a8e8 ro rootflags=subvol=root00 rhgb quiet 
   initrdefi /initramfs-4.4.8-300.fc23.x86_64.img
}
menuentry 'Fedora (0-rescue-1dccfd914c254de687a4ba1c13e159a9) 23 (Workstation Edition)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-1dccfd914c254de687a4ba1c13e159a9-advanced-d43f46bc-7649-44ca-b02d-7599d115a8e8' {
   load_video
   insmod gzio
   insmod part_gpt
   insmod ext2
   set root='hd0,gpt6'
   if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6  440e2ced-56a2-432f-95e0-c5f1c33941a9
   else
     search --no-floppy --fs-uuid --set=root 440e2ced-56a2-432f-95e0-c5f1c33941a9
   fi
   linuxefi /vmlinuz-0-rescue-1dccfd914c254de687a4ba1c13e159a9 root=UUID=d43f46bc-7649-44ca-b02d-7599d115a8e8 ro rootflags=subvol=root00 rhgb quiet 
   initrdefi /initramfs-0-rescue-1dccfd914c254de687a4ba1c13e159a9.img
}
if [ "x$default" = 'Fedora (4.4.8-300.fc23.x86_64) 23 (Workstation Edition)' ]; then default='Advanced options for Fedora>Fedora (4.4.8-300.fc23.x86_64) 23 (Workstation Edition)'; fi;
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### 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 'Qubes, with Xen hypervisor' --class qubes --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-simple-6e934da1-b43d-434b-83b2-878d454fb6bd' {
   insmod part_gpt
   insmod ext2
   set root='hd0,gpt2'
   if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 --hint='hd0,gpt2'  9c6e43e7-856f-4840-a04f-6936735f5835
   else
     search --no-floppy --fs-uuid --set=root 9c6e43e7-856f-4840-a04f-6936735f5835
   fi
   echo    'Loading Xen 4.6.0 ...'
       if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
           xen_rm_opts=
       else
           xen_rm_opts="no-real-mode edd=off"
       fi
   multiboot   /xen-4.6.0.gz placeholder  console=none dom0_mem=min:1024M dom0_mem=max:4096M ${xen_rm_opts}
   echo    'Loading Linux 4.1.13-9.pvops.qubes.x86_64 ...'
   module  /vmlinuz-4.1.13-9.pvops.qubes.x86_64 placeholder root=UUID=6e934da1-b43d-434b-83b2-878d454fb6bd ro rootflags=subvol=root i915.preliminary_hw_support=1 vconsole.font=latarcyrheb-sun16 rhgb quiet 
   echo    'Loading initial ramdisk ...'
   module  /initramfs-4.1.13-9.pvops.qubes.x86_64.img
}
submenu 'Advanced options for Qubes (with Xen hypervisor)' $menuentry_id_option 'gnulinux-advanced-6e934da1-b43d-434b-83b2-878d454fb6bd' {
   submenu 'Xen hypervisor, version 4.6.0' $menuentry_id_option 'xen-hypervisor-4.6.0-6e934da1-b43d-434b-83b2-878d454fb6bd' {
       menuentry 'Qubes, with Xen 4.6.0 and Linux 4.1.13-9.pvops.qubes.x86_64' --class qubes --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-4.1.13-9.pvops.qubes.x86_64-advanced-6e934da1-b43d-434b-83b2-878d454fb6bd' {
           insmod part_gpt
           insmod ext2
           set root='hd0,gpt2'
           if [ x$feature_platform_search_hint = xy ]; then
             search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 --hint='hd0,gpt2'  9c6e43e7-856f-4840-a04f-6936735f5835
           else
             search --no-floppy --fs-uuid --set=root 9c6e43e7-856f-4840-a04f-6936735f5835
           fi
           echo    'Loading Xen 4.6.0 ...'
               if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
                   xen_rm_opts=
               else
                   xen_rm_opts="no-real-mode edd=off"
               fi
           multiboot   /xen-4.6.0.gz placeholder  console=none dom0_mem=min:1024M dom0_mem=max:4096M ${xen_rm_opts}
           echo    'Loading Linux 4.1.13-9.pvops.qubes.x86_64 ...'
           module  /vmlinuz-4.1.13-9.pvops.qubes.x86_64 placeholder root=UUID=6e934da1-b43d-434b-83b2-878d454fb6bd ro rootflags=subvol=root i915.preliminary_hw_support=1 vconsole.font=latarcyrheb-sun16 rhgb quiet 
           echo    'Loading initial ramdisk ...'
           module  /initramfs-4.1.13-9.pvops.qubes.x86_64.img
       }
   }
}
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/40_custom.backup ###
# 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.
### END /etc/grub.d/40_custom.backup ###

### 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 ###

Pastebin上也有一份副本。

這是來自 Qubes OS 的核心開發人員之一 Marek Marczykowski-Górecki(Invisible Things Lab)的權威回答。來源是我最初提出問題的 qubes-users 論壇。

這是主要問題 - 您正在嘗試從 UEFI grub (Fedora) 引導舊系統(此處為 Qubes)。您需要選擇其中之一 - 要麼在傳統模式下啟動,要麼在 UEFI 模式下啟動(或在每次啟動時更改 bios 設置……)。因此,一種選擇是將 Fedora 設置為傳統模式 - 然後將 Qubes 傳統引導條目放入 40_custom(如您所做的那樣)就足夠了。

也可以從 UEFI 啟動 Qubes,但需要不同的配置。在大多數情況下,Grub 並沒有讓它變得更容易……無論如何你可以嘗試:

  1. 找到 xen-4.6.0.efi - 它應該安裝到 /boot/efi/EFI/qubes/。將它放在您的 EFI 系統分區中(如果 /boot/efi 不存在)。
  2. 在同一目錄中創建 xen.cfg,內容如下:

$$ global $$ 預設=4.1.13-8.pvops.qubes.x86_64 $$ 4.1.13-8.pvops.qubes.x86_64 $$ options=loglvl=all kernel=vmlinuz-4.1.13-8.pvops.qubes.x86_64 root=/dev/dm-2 vconsole.font=latarcyrheb-sun16 rd.lvm.lv=qubes_dom0/root ramdisk=initramfs-4.1。 13-8.pvops.qubes.x86_64.img 調整核心版本、root= 和 rd.lvm.lv= 參數。 3. 確保核心和 initramfs 文件與 xen.cfg 位於同一目錄中(很可能您需要從 /boot 複製它們)。將它們放在 EFI 系統分區上至關重要(即使 Grub 可以從其他地方載入它們)。 4. 添加 grub 條目:

menuentry ‘Qubes UEFI’ { 鏈載入器 /EFI/qubes/xen-4.6.0.efi }

在此處查找相關故障排除: https ://www.qubes-os.org/doc/uefi-troubleshooting/ https://github.com/QubesOS/qubes-issues/issues/794

引用自:https://unix.stackexchange.com/questions/280215