У меня есть 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..._
Я близок?
Ваша проблема состоит в том, что у Вас есть установка режима 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
, это может быть наиболее вероятно успешно выполниться, не вызывая сложности.