Как загружаться с нескольких дисков на материнской плате UEFI с помощью Grub2

У меня есть SSD и HDD на материнской плате UEFI. Я могу переключить ОС, изменив порядок загрузки в BIOS, но я бы предпочел, чтобы Grub2 просто указывал Windows7 как вариант загрузки.

Решение должно помочь любому, у кого на материнской плате UEFI установлено более одного диска. Вы видели Загрузка нескольких ОС с нескольких дисков с UEFI и rEFInd выглядит хорошей альтернативой; этот вопрос касается того, как правильно настроить Grub2, чтобы увидеть загрузчик для Windows7 (или любой ОС), если это вообще возможно - без использования Grub-legacy или другого инструмента, такого как rEFInd.

Я использую Ubuntu 12.10, где Grub2 находится на SSD, основном загрузочном устройстве, а Windows7 находится на жестком диске, который при установке решено разделить на три раздела.

Сценарий загрузки информации дает длинную разбивку:

                  Boot Info Script 0.61      [1 April 2012]


============================= Boot Info Summary: ===============================

 => Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 1 of 
    the same hard drive for core.img. core.img is at this location and looks 
    in partition 72 for .
 => No boot loader is installed in the MBR of /dev/sdb.

sda1: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  Ubuntu 12.10
    Boot files:        /boot/grub/grub.cfg /etc/fstab

sda2: __________________________________________________________________________

    File system:       swap
    Boot sector type:  -
    Boot sector info: 

sdb1: __________________________________________________________________________

    File system:       vfat
    Boot sector type:  Windows 7: FAT32
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /efi/Boot/bootx64.efi

sdb2: __________________________________________________________________________

    File system:       
    Boot sector type:  -
    Boot sector info: 
    Mounting failed:   mount: unknown filesystem type ''

sdb3: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows Vista/7: NTFS
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  Windows 7
    Boot files:        /Windows/System32/winload.exe

============================ Drive/Partition Info: =============================

Drive: sda _____________________________________________________________________

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

Partition  Boot  Start Sector    End Sector  # of Sectors  Id System

/dev/sda1    *          2,048   218,439,679   218,437,632  83 Linux
/dev/sda2         218,439,680   234,440,703    16,001,024  82 Linux swap / Solaris


Drive: sdb _____________________________________________________________________

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
256 heads, 63 sectors/track, 121126 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes

Partition  Boot  Start Sector    End Sector  # of Sectors  Id System

/dev/sdb1                   1 4,294,967,295 4,294,967,295  ee GPT

/dev/sdb1 ends after the last sector of /dev/sdb

GUID Partition Table detected.

Partition    Start Sector    End Sector  # of Sectors System
/dev/sdb1           2,048       206,847       204,800 EFI System partition
/dev/sdb2         206,848       468,991       262,144 Microsoft Reserved Partition (Windows)
/dev/sdb3         468,992 1,953,523,711 1,953,054,720 Data partition (Windows/Linux)

"blkid" output: ________________________________________________________________

Device           UUID                                   TYPE       LABEL

/dev/sda1        e20b187a-c3b0-45e1-98df-c955b3cffdde   ext4       
/dev/sda2        7663b629-19c9-49fc-a744-2beb2dcdb317   swap       
/dev/sdb1        F428-FB77                              vfat       
/dev/sdb3        162C36632C363DD5                       ntfs       

================================ Mount points: =================================

Device           Mount_Point              Type       Options

/dev/sda1        /                        ext4       (rw,errors=remount-ro)


=========================== sda1/boot/grub/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 ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
set default="0"

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 recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; 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_input console
terminal_output console
if [ "${recordfail}" = 1 ]; then
  set timeout=-1
else
  set timeout=6
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 44,0,30; then
  clear
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
  set gfxpayload="${1}"
  if [ "${1}" = "keep" ]; then
    set vt_handoff=vt.handoff=7
  else
    set vt_handoff=
  fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
if [ "${linux_gfx_mode}" != "text" ]; then load_video; fi
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
recordfail
  gfxmode $linux_gfx_mode
  insmod gzio
  insmod part_msdos
  insmod ext2
  set root='hd0,msdos1'
  if [ x$feature_platform_search_hint = xy ]; then
    search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  e20b187a-c3b0-45e1-98df-c955b3cffdde
  else
    search --no-floppy --fs-uuid --set=root e20b187a-c3b0-45e1-98df-c955b3cffdde
  fi
  linux /boot/vmlinuz-3.5.0-27-generic root=UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde ro   quiet splash $vt_handoff
  initrd  /boot/initrd.img-3.5.0-27-generic
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
  menuentry 'Ubuntu, with Linux 3.5.0-27-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.5.0-27-generic-advanced-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
  recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  e20b187a-c3b0-45e1-98df-c955b3cffdde
    else
      search --no-floppy --fs-uuid --set=root e20b187a-c3b0-45e1-98df-c955b3cffdde
    fi
    echo  'Loading Linux 3.5.0-27-generic ...'
    linux /boot/vmlinuz-3.5.0-27-generic root=UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde ro   quiet splash $vt_handoff
    echo  'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-27-generic
  }
  menuentry 'Ubuntu, with Linux 3.5.0-27-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.5.0-27-generic-recovery-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
  recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  e20b187a-c3b0-45e1-98df-c955b3cffdde
    else
      search --no-floppy --fs-uuid --set=root e20b187a-c3b0-45e1-98df-c955b3cffdde
    fi
    echo  'Loading Linux 3.5.0-27-generic ...'
    linux /boot/vmlinuz-3.5.0-27-generic root=UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde ro recovery nomodeset 
    echo  'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-27-generic
  }
  menuentry 'Ubuntu, with Linux 3.5.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.5.0-26-generic-advanced-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
  recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  e20b187a-c3b0-45e1-98df-c955b3cffdde
    else
      search --no-floppy --fs-uuid --set=root e20b187a-c3b0-45e1-98df-c955b3cffdde
    fi
    echo  'Loading Linux 3.5.0-26-generic ...'
    linux /boot/vmlinuz-3.5.0-26-generic root=UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde ro   quiet splash $vt_handoff
    echo  'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-26-generic
  }
  menuentry 'Ubuntu, with Linux 3.5.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.5.0-26-generic-recovery-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
  recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  e20b187a-c3b0-45e1-98df-c955b3cffdde
    else
      search --no-floppy --fs-uuid --set=root e20b187a-c3b0-45e1-98df-c955b3cffdde
    fi
    echo  'Loading Linux 3.5.0-26-generic ...'
    linux /boot/vmlinuz-3.5.0-26-generic root=UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde ro recovery nomodeset 
    echo  'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-26-generic
  }
  menuentry 'Ubuntu, with Linux 3.5.0-17-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.5.0-17-generic-advanced-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
  recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  e20b187a-c3b0-45e1-98df-c955b3cffdde
    else
      search --no-floppy --fs-uuid --set=root e20b187a-c3b0-45e1-98df-c955b3cffdde
    fi
    echo  'Loading Linux 3.5.0-17-generic ...'
    linux /boot/vmlinuz-3.5.0-17-generic root=UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde ro   quiet splash $vt_handoff
    echo  'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-17-generic
  }
  menuentry 'Ubuntu, with Linux 3.5.0-17-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.5.0-17-generic-recovery-e20b187a-c3b0-45e1-98df-c955b3cffdde' {
  recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  e20b187a-c3b0-45e1-98df-c955b3cffdde
    else
      search --no-floppy --fs-uuid --set=root e20b187a-c3b0-45e1-98df-c955b3cffdde
    fi
    echo  'Loading Linux 3.5.0-17-generic ...'
    linux /boot/vmlinuz-3.5.0-17-generic root=UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde ro recovery nomodeset 
    echo  'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-17-generic
  }
}

### 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/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###

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

=============================== sda1/etc/fstab: ================================

--------------------------------------------------------------------------------
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=e20b187a-c3b0-45e1-98df-c955b3cffdde /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda2 during installation
UUID=7663b629-19c9-49fc-a744-2beb2dcdb317 none            swap    sw              0       0
--------------------------------------------------------------------------------

=================== sda1: Location of files loaded by Grub: ====================

           GiB - GB             File                                 Fragment(s)

               =                boot/grub/grub.cfg                             1
               =                boot/initrd.img-3.5.0-17-generic               1
               =                boot/initrd.img-3.5.0-26-generic               1
               =                boot/initrd.img-3.5.0-27-generic               1
               =                boot/vmlinuz-3.5.0-17-generic                  1
               =                boot/vmlinuz-3.5.0-26-generic                  1
               =                boot/vmlinuz-3.5.0-27-generic                  2
               =                initrd.img                                     1
               =                initrd.img.old                                 1
               =                vmlinuz                                        2
               =                vmlinuz.old                                    2

=============================== StdErr Messages: ===============================

awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in

Таким образом, Ubuntu имеет раздел подкачки (sda2) в дополнение к корневому разделу (sda1), в котором он находится. Там все нормально. Windows7 сделала 3 раздела, первый (sdb1) для EFI, второй (sdb2) зарезервирован для окон, что не имеет отношения к делу, а третий (sdb3) - это фактическая установка Windows.

Иерархия файлов sdb1:

> ls -aR
.:
.  ..  EFI

./EFI:
.  ..  Boot  Microsoft

./EFI/Boot:
.  ..  bootx64.efi

./EFI/Microsoft:
.  ..  Boot

./EFI/Microsoft/Boot:
.   BCD      BCD.LOG1  bootmgfw.efi  BOOTSTAT.DAT  da-DK  el-GR  es-ES  Fonts  hu-HU  ja-JP  memtest.efi  nl-NL  pt-BR  ru-RU  tr-TR  zh-HK
..  BCD.LOG  BCD.LOG2  bootmgr.efi   cs-CZ         de-DE  en-US  fi-FI  fr-FR  it-IT  ko-KR  nb-NO        pl-PL  pt-PT  sv-SE  zh-CN  zh-TW
etc

С помощью

grub-mkdevicemap

Файл «device.map» был сгенерирован в «/ boot / grub», который определил, что SSD - это (hd0), а HDD - (hd1). hd0 - это основное загрузочное устройство, здесь живет Grub2.

В grub-customizer я попытался создать запись, которая направила бы grub2 в загрузчик Windows7:

set root='(hd1,1)'
search-no-floppy-fs-uuid-set F428-FB77
drivemap -s (hd1) ${root}
chainloader +1

Однако выбор его из grub при перезапуске дал следующую ошибку:

error: no such device: F428-FB77.
error: invalid signature.

Press any key to continue..._

Я близок?

1
задан 13 April 2017 в 15:23

1 ответ

Ваша проблема состоит в том, что у Вас есть установка режима BIOS Linux и GRUB, тогда как Ваша установка Windows находится в режиме EFI. GRUB не может режимы загрузки коммутатора, таким образом, Вы не можете сделать то, что Вы хотите сделать со своей текущей установкой GRUB. Необходимо будет добавить режим EFI GRUB (или некоторая другая программа начальной загрузки режима EFI, те, которые повторно находят) сделать задание. К сожалению, делая это от Вашей рабочей установки хитро, так как она требует использования названной программы режима EFI efibootmgr, и это не будет работать в Вашем текущем режиме BIOS начальная загрузка Linux, таким образом создавая загадку курицы-и-яйца. Можно сделать это от чрезвычайного диска Ubuntu, загруженного в режиме EFI, но это усложняет процесс установки GRUB. Посмотрите мою Веб-страницу по теме для получения информации о загрузчиках EFI и как установить их вручную, если Вы хотите попробовать это. Возможно, что инструмент Boot Repair Ubuntu, выполненный от диска чрезвычайной ситуации режима EFI, сможет установить режим EFI GRUB относительно безболезненно, но я не действительно уверен в этом. Я - также не поклонник Восстановления Начальной загрузки, так как это довольно неуклюже со своими изменениями.

Другая опция состоит в том, чтобы отказаться от GRUB в пользу перенаходки. Если Вы загружаете Linux в режиме BIOS, монтируетесь /dev/sdb1 (Ваш ESP) в /boot/efi, и затем установите версию пакета Debian перенаходки, она должна собраться для запуска в следующий раз, когда Вы загружаете компьютер в режиме EFI (Вы, возможно, должны были бы выбрать опцию "Windows" заставить ее загружаться). Это работает при помощи обходного решения, которым это находится также немного на неуклюжей стороне, но не совсем настолько же плохо как что Восстановление Начальной загрузки делает, по моему скромному мнению. Это также обратимо, после того как Вы загружаете Linux в режиме EFI: Ввести sudo mount /dev/sdb1 /boot/efi смонтировать ESP снова (создающий /etc/fstab запись для этого является хорошей идеей, какое решение Вы выбираете), и затем введите sudo mvrefind.sh /boot/efi/EFI/Microsoft/Boot /boot/efi/EFI/refind.

Третья опция состоит в том, чтобы переустановить Windows в режиме BIOS. Чтобы сделать это, необходимо было бы вытереть таблицу разделов на /dev/sdb, преобразование его от GPT до формата MBR, и затем переустанавливает Windows, гарантируя, чтобы Вы сделали так в режиме BIOS. Это - самое неэлегантное решение, но если Вы довольны установкой Windows и не имеете никаких данных, необходимо сохранить на /dev/sdb, это может быть наиболее вероятно успешно выполниться, не вызывая сложности.

1
ответ дан 13 April 2017 в 15:23

Другие вопросы по тегам:

Похожие вопросы: