LINUX.ORG.RU

После установки Debian 10 GRUB не грузит Windows 7

 ,


0

2

На ноуте Lenovo G700 (2014г.) стоит HDD 320G, разбивка MBR.

root@notebook:~# fdisk -l /dev/sda
Диск /dev/sda: 298,1 GiB, 320072933376 байт, 625142448 секторов
Disk model: HGST HTS545032A7
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: dos
Идентификатор диска: 0xd9fa2484

Устр-во    Загрузочный    начало     Конец   Секторы Размер Идентификатор Тип
/dev/sda1                   2048 157087743 157085696  74,9G            83 Linux
/dev/sda2              520384512 524290047   3905536   1,9G            82 Linux своп / Solaris
/dev/sda3  *           157087744 520384511 363296768 173,2G             7 HPFS/NTFS/exFAT
/dev/sda4              565127168 625142447  60015280  28,6G            12 Compaq диагностика

Элементы таблицы разделов упорядочены не так, как на диске.

Разделы упорядочены - 1,3,2,4. Нв /dev/sda1 стоял Debian 7 Wheezy, после попытки сделать apt dist-upgrade он успешно навернулся, что и следовало ожидать. Ранее раздел 2 свопа стоял за 1, я сжал раздел 3 и перенес своп за него. Раздел 1 создал заново.

Установил Debian 10 Buster на /dev/sda1 c DVD#1. Во время установки GRUB было сказано, что найдена Windows Vista, но пункты меню в grub.cfg добавлены не были.

Запустил os-prober, он сгенерировал /etc/grub.d/30_os-prober. Написал свой /etc/grub.d/40_custom. grub-update поместил изменения в /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
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_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  bec4ed44-96c0-444f-a773-31e15a701bb7
else
  search --no-floppy --fs-uuid --set=root bec4ed44-96c0-444f-a773-31e15a701bb7
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=ru_RU
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  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
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
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  bec4ed44-96c0-444f-a773-31e15a701bb7
else
  search --no-floppy --fs-uuid --set=root bec4ed44-96c0-444f-a773-31e15a701bb7
fi
insmod png
if background_image /usr/share/desktop-base/futureprototype-theme/grub/grub-4x3.png; then
  set color_normal=white/black
  set color_highlight=black/white
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
	set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-bec4ed44-96c0-444f-a773-31e15a701bb7' {
	load_video
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	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  bec4ed44-96c0-444f-a773-31e15a701bb7
	else
	  search --no-floppy --fs-uuid --set=root bec4ed44-96c0-444f-a773-31e15a701bb7
	fi
	echo	'Загружается Linux 4.19.0-8-amd64 …'
	linux	/boot/vmlinuz-4.19.0-8-amd64 root=UUID=bec4ed44-96c0-444f-a773-31e15a701bb7 ro  quiet
	echo	'Загружается начальный виртуальный диск …'
	initrd	/boot/initrd.img-4.19.0-8-amd64
}
submenu 'Дополнительные параметры для Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-bec4ed44-96c0-444f-a773-31e15a701bb7' {
	menuentry 'Debian GNU/Linux, с Linux 4.19.0-8-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-8-amd64-advanced-bec4ed44-96c0-444f-a773-31e15a701bb7' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		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  bec4ed44-96c0-444f-a773-31e15a701bb7
		else
		  search --no-floppy --fs-uuid --set=root bec4ed44-96c0-444f-a773-31e15a701bb7
		fi
		echo	'Загружается Linux 4.19.0-8-amd64 …'
		linux	/boot/vmlinuz-4.19.0-8-amd64 root=UUID=bec4ed44-96c0-444f-a773-31e15a701bb7 ro  quiet
		echo	'Загружается начальный виртуальный диск …'
		initrd	/boot/initrd.img-4.19.0-8-amd64
	}
	menuentry 'Debian GNU/Linux, with Linux 4.19.0-8-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-8-amd64-recovery-bec4ed44-96c0-444f-a773-31e15a701bb7' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		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  bec4ed44-96c0-444f-a773-31e15a701bb7
		else
		  search --no-floppy --fs-uuid --set=root bec4ed44-96c0-444f-a773-31e15a701bb7
		fi
		echo	'Загружается Linux 4.19.0-8-amd64 …'
		linux	/boot/vmlinuz-4.19.0-8-amd64 root=UUID=bec4ed44-96c0-444f-a773-31e15a701bb7 ro single 
		echo	'Загружается начальный виртуальный диск …'
		initrd	/boot/initrd.img-4.19.0-8-amd64
	}
}

### 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 ###
menuentry 'Windows 7 (на /dev/sda3)' --class windows --class os $menuentry_id_option 'osprober-chain-2A9AA29A9AA261D5' {
	insmod part_msdos
	insmod ntfs
	set root='hd0,msdos3'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  2A9AA29A9AA261D5
	else
	  search --no-floppy --fs-uuid --set=root 2A9AA29A9AA261D5
	fi
	parttool ${root} hidden-
	chainloader +1
}
menuentry 'Windows Recovery Environment (на /dev/sda4)' --class windows --class os $menuentry_id_option 'osprober-chain-4EEE508FEE5070E7' {
	insmod part_msdos
	insmod ntfs
	set root='hd0,msdos4'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos4 --hint-efi=hd0,msdos4 --hint-baremetal=ahci0,msdos4  4EEE508FEE5070E7
	else
	  search --no-floppy --fs-uuid --set=root 4EEE508FEE5070E7
	fi
	parttool ${root} hidden-
	drivemap -s (hd0) ${root}
	chainloader +1
}
### 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.
menuentry "Windows 7 (loader) (on /dev/sda3)" --class windows --class os {
    insmod ntfs
    set root='hd0,msdos3'
    search --no-floppy --fs-uuid --set=root 2A9AA29A9AA261D5
    chainloader +1
}
### 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 ###

Не работают пункты ни из 30_os_prober, ни из 40_custom.

Вот что выводится в итоге при выборе пункта «Windows 7»
https://fastpic.ru/view/111/2020/0419/_47d54942c8838860c9fde7aa29763ea9.jpg.html
https://fastpic.ru/view/111/2020/0419/_5cc90c6ac75e57c61c691b00617edf8c.jpg.html

Что это такое и что с этим делать? Про какой UEFI речь, если загрузка в CFM режиме?

более поганого хостинга картинок не нашёл? сочувствую…

когда всё работало точно винда в режиме legacy загружалась? и как я понял у тебя что-то не так с SecureBoot // я мог и ошибиться

anonymous ()
Ответ на: комментарий от anonymous

Что первое попалось, пока искал темы про GRUB тут.

Да, debian 7 и Windows грузились. Но там был Grub 1.99 кажется, в Debian 10 идет Grub 2.02. В нем даже синтаксис grub.cfg поменялся, так вместо root (hda0,msdos3) нужно писать root ‘hda0,msdos3’, иначе сразу вываливается в grub>.

В BIOS не лазал. Кажется, что-то в параметрах. Вот тут пишут https://forums.mydigitallife.net/threads/old-slic-loader-prevent-windows-7-from-starting-normally.32954/#post-563642

bugs-bunny ()
Ответ на: комментарий от anonymous

Спасибо. Тоже нашел ntldr, Win7 грузится. https://wiki.archlinux.org/index.php/GRUB_(Русский)

/etc/grub.d/40_custom

#!/bin/sh
exec tail -n +3 $0
# 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 "Windows 7 (loader) (on /dev/sda3)" --class windows --class os {
    insmod ntfs
    set root='hd0,msdos3'
    ntldr /bootmgr
}

Выходит по всему - это кривизна os-prober-а. Только меню grub-а загадил нерабочими пунктами.

bugs-bunny ()
Ответ на: комментарий от anonymous

там оно означает досовскую таблицу разделов, ещё бывает gpt

ну не знал, что это относится к типу таблицы разделов относится. я-то думал оно тип раздела означает. тогда вообще не понимаю, почему у него не работает dualboot…

anonymous ()
Ответ на: комментарий от bugs-bunny

Выходит по всему - это кривизна os-prober

Далеко не всегда «автоматика» срабатывает правильно. В полной мере это относится и ко всем репаирам-кустомайзерам. Поэтому, os-prober удаляю. То, что мне нужно, добавляю в 40_custom - он для этого и существует. Твой код простой и правильный, но только в данном конкретном случае. Здесь можешь взять более универсальный код.

andytux ()