LINUX.ORG.RU

GRUB2 chainload grub 0.97

 


0

1

Добрый день! Прошу помощи с GRUB2 или GRUB 0.97. Есть ноутбук. Внутри него SSD и HDD. На SSD Linux Mint c GRUB2, на HDD старая Open Suse 12 с GRUB 0.97. На данный момент гружусь в обеих системах, сменяя диск для загрузки в BIOS. Хочу мультизагрузку :) OpenSuse стояла всегда, Минт ставил на днях. Минт при установке увидел Сусю и добавил автоматически к себе в GRUB2, но из этого пункта Суся не грузится! Просто черный экран. Обе ОС стоят в режиме MBR, UEFI в биосе выключен совсем и полностью.

Как сделать мультизагрузку? Как видите, я попытался и в сусином грубе добавить чейнлоадер (через yast) и через минта (Grub Customizer). с минтовым грубом - черный экран при выборе загрузки суси, при выборе пункта чейнлодер (который попробовал сделать через Grub Customizer) ошибка invalid signature . При загрузке от сусиного груба (0.97), ошибка 12 Invalid device requested

Mint грузится вот с такими параметрами: (это скопировал из Grub Customizer). Копировал,загрузившись в Минт

recordfail
load_video
gfxmode $linux_gfx_mode
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  974578b9-9351-4e4a-a872-5d81b643ee0f
else
  search --no-floppy --fs-uuid --set=root 974578b9-9351-4e4a-a872-5d81b643ee0f
fi
linux	/boot/vmlinuz-5.4.0-58-generic root=UUID=974578b9-9351-4e4a-a872-5d81b643ee0f ro  quiet splash $vt_handoff
initrd	/boot/initrd.img-5.4.0-58-generic

Выхлоп fdisk

Диск /dev/sda: 111,81 GiB, 120034123776 байт, 234441648 секторов
Disk model: SPCC Solid State
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6d57115b

Устр-во    Загрузочный    начало     Конец   Секторы Размер Идентификатор Тип
/dev/sda1  *                2048 218056735 218054688   104G            83 Linux
/dev/sda2              218058750 234440703  16381954   7,8G             5 Расшир
/dev/sda5              218058752 234440703  16381952   7,8G            82 Linux 


Диск /dev/sdb: 465,78 GiB, 500107862016 байт, 976773168 секторов
Disk model: ST500LM012 HN-M5
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: dos
Идентификатор диска: 0xb5dcb711

Устр-во    Загрузочный   начало     Конец   Секторы Размер Идентификатор Тип
/dev/sdb2  *               2048 976773167 976771120 465,8G             5 Расшире
/dev/sdb5                  4096  40951807  40947712  19,5G            83 Linux
/dev/sdb6              40953856 976773119 935819264 446,2G             7 HPFS/NT

Если выбрать в биосе HDD для загрузки. То загружаемся в Сусю и вот такие настройки загрузки у нее (содержимое файла menu.lst)

# Modified by YaST2. Last modification on Thu Feb 25 15:09:14 EET 2021
# THIS FILE WILL BE PARTIALLY OVERWRITTEN by perl-Bootloader
# Configure custom boot parameters for updated kernels in /etc/sysconfig/bootloader

default 0
timeout 8
##YaST - generic_mbr
gfxmenu (hd0,4)/boot/message
##YaST - activate

###Don't change this comment - YaST2 identifier: Original name: linux###
title Desktop -- openSUSE 12.1 Milestone 2 - 2.6.39-2
    kernel (hd0,4)/boot/vmlinuz-2.6.39-2-desktop root=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part5 resume=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part6 splash=silent quiet showopts vga=0x317
    initrd (hd0,4)/boot/initrd-2.6.39-2-desktop

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- openSUSE 12.1 Milestone 2 - 2.6.39-2
    root (hd1,4)
    kernel /boot/vmlinuz-2.6.39-2-desktop root=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part5 showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe vga=0x317
    initrd /boot/initrd-2.6.39-2-desktop

###Don't change this comment - YaST2 identifier: Original name: other###
title Chain
    map (hd0) (hd0)
    map (hd0) (hd0)
    rootnoverify (hd0,0)
    makeactive
    chainloader +1


Последнее исправление: multimaxfm (всего исправлений: 2)

Минт при установке увидел Сусю и добавил автоматически к себе в GRUB2

Показал-бы, что он там добавил…

Как сделать мультизагрузку?

Первый вариант. В grub.cfg добавить пункт загрузки суси или исправить, добавленный «автоматикой».

Второй вариант. Груб2 умеет использовать другие конфиги, в частности menu.lst. Добавить пункт, который ищет и запускает этот конфиг. Добавть в grub.cfg следующий код:

  submenu "Load configfile" {
	src='/boot/isolinux/isolinux.cfg'
	src='/boot/grub/menu.lst'
	#src='/boot/grub/loopback.cfg'
	#src='/boot/grub/grub.cfg'
	root='x'; search -n -s -f "${src}"
	if [ "${root}" = 'x' ]
	  then	avload=''
	  else	if regexp "grub." "${src}"; then avload='configfile'; fi
	  	if regexp "loopback." "${src}"; then avload='configfile'; fi
		if regexp "menu." "${src}"; then avload='legacy_configfile'; fi
		if regexp "isolinux." "${src}"; then avinit="syslinux_configfile ${src}"; avload="syslinux_source /boot/isolinux/isolinux.bin"; fi
	fi
	if [ "${root}" = 'x' ]; then msg="$src not exist!"; else if [ -z "${msg}" ]; then msg="Load $src from $root"; fi; fi
	echo "$msg"; sleep -v 4
	if [ -n "${avload}" ]; then ${avload} ${src}; if [ -n "${avinit}" ]; then ${avinit}; fi; fi
  }

В переменной src - что искать. Будет искать по всем дискам. Если найдет, то должен вывести меню, которое создает этот конфиг.

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

пункты загрузки OPENSUSE, созданные установщиком минта автоматически. по ним сусе не грузится. черный экран без возможности что-либо ввести. только зажатие кнопки включения помогает выключить ноутбук. это кусок GRUB2

menuentry "openSUSE 12.1 Milestone 2 (Asparagus) (x86_64) (на /dev/sdb5)" --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-81c317c3-2af6-4b59-e870-5d34b499400b' {
	insmod part_msdos
	insmod ext2
	set root='hd1,msdos5'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5  81c317c3-2af6-4b59-e870-5d34b499400b
	else
	  search --no-floppy --fs-uuid --set=root 81c317c3-2af6-4b59-e870-5d34b499400b
	fi
	linux /boot/vmlinuz-2.6.39-2-desktop root=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part5 resume=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part6 splash=silent quiet showopts vga=0x317
	initrd /boot/initrd-2.6.39-2-desktop
}

submenu "Дополнительные параметры"{
menuentry "Desktop -- openSUSE 12.1 Milestone 2 - 2.6.39-2 (на /dev/sdb5)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-2.6.39-2-desktop--81c317c3-2af6-4b59-e870-5d34b499400b' {
		insmod part_msdos
		insmod ext2
		set root='hd1,msdos5'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5  81c317c3-2af6-4b59-e870-5d34b499400b
		else
		  search --no-floppy --fs-uuid --set=root 81c317c3-2af6-4b59-e870-5d34b499400b
		fi
		linux /boot/vmlinuz-2.6.39-2-desktop root=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part5 resume=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part6 splash=silent quiet showopts vga=0x317
		initrd /boot/initrd-2.6.39-2-desktop
}
menuentry "Failsafe -- openSUSE 12.1 Milestone 2 - 2.6.39-2 (на /dev/sdb5)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-2.6.39-2-desktop--81c317c3-2af6-4b59-e870-5d34b499400b' {
		insmod part_msdos
		insmod ext2
		set root='hd1,msdos5'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5  81c317c3-2af6-4b59-e870-5d34b499400b
		else
		  search --no-floppy --fs-uuid --set=root 81c317c3-2af6-4b59-e870-5d34b499400b
		fi
		linux /boot/vmlinuz-2.6.39-2-desktop root=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part5 showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe vga=0x317
		initrd /boot/initrd-2.6.39-2-desktop
}
menuentry "Ubuntu, с Linux 5.4.0-58-generic (recovery mode)" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-58-generic-recovery-974578b9-9351-4e4a-a872-5d81b643ee0f' {
		recordfail
		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  974578b9-9351-4e4a-a872-5d81b643ee0f
		else
		  search --no-floppy --fs-uuid --set=root 974578b9-9351-4e4a-a872-5d81b643ee0f
		fi
		echo	'Загружается Linux 5.4.0-58-generic …'
		linux	/boot/vmlinuz-5.4.0-58-generic root=UUID=974578b9-9351-4e4a-a872-5d81b643ee0f ro recovery nomodeset dis_ucode_ldr 
		echo	'Загружается начальный виртуальный диск …'
		initrd	/boot/initrd.img-5.4.0-58-generic
}
menuentry "Ubuntu, с Linux 5.4.0-58-generic" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-58-generic-advanced-974578b9-9351-4e4a-a872-5d81b643ee0f' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		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  974578b9-9351-4e4a-a872-5d81b643ee0f
		else
		  search --no-floppy --fs-uuid --set=root 974578b9-9351-4e4a-a872-5d81b643ee0f
		fi
		echo	'Загружается Linux 5.4.0-58-generic …'
		linux	/boot/vmlinuz-5.4.0-58-generic root=UUID=974578b9-9351-4e4a-a872-5d81b643ee0f ro  quiet splash $vt_handoff
		echo	'Загружается начальный виртуальный диск …'
		initrd	/boot/initrd.img-5.4.0-58-generic
}
}

multimaxfm
() автор топика
Ответ на: комментарий от andytux

Вставил ваш код. Открыл grub.cfg редактором текста, вставил. При старте загрузчика появился новый пункт меню. Жму на него. На экране пишет, что идет загрузка menu.lst Далее появляются пункты меню Сусиного загрузчика. Загрузка не идет с ее пунктов - потому что у нее hd0 основной, а при таком раскладе, это hd1 (методом тыка выяснил). Жму Е, редактирую цифру, на 1 во всех местах. Жму бут - грузится.

Теперь вопрос :) как сделать без вашего кусочка кода, без чтения старого груба суси. Подскажите, пожалуйста. хочется разобраться и понять)) Конечно, можно в сусе отредактировать загрузчик и тогда из груб2 будет сразу все запускаться. Но это не интересно и костыльно, если захочу загрузиться с ХДД потом, не вспомню почему не грузит.

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

Загрузка не идет с ее пунктов - потому что у нее hd0 основной, а при таком раскладе, это hd1

Пункт «Failsafe – openSUSE 12.1 Milestone 2 - 2.6.39-2» тоже не загружался? Судя по приводимому тобой выше коду, там предусмотрен этот вариант - «root (hd1,4)».

можно в сусе отредактировать загрузчик…

…добавить пункт загрузки, когда диск подключен вторым.

andytux ★★★★★
()
Ответ на: комментарий от multimaxfm

Пункты загрузки OPENSUSE, созданные установщиком минта

Вроде все правильно. Не вижу каких-то явных ошибок.

сусе не грузится. черный экран

Убрать параметр «splash=silent», должен вместо заставки показать процесс загрузки. Проверь UUID «81c317c3-2af6-4b59-e870-5d34b499400b». Точно он соответствует разделу sdb5. У меня были случаи, когда блок «if…else…» работал неправильно, поэтому в таком виде отказался от него. Возможно позже предложу самодельный вариант.

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

По 1 варианту лучше добавлять в custom.cfg , т.к. при установке некоторых пакетов grub.cfg может быть обновлён автоматически. custom.cfg не будет изменён и будет продолжать подхватываться.

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

убирал сплеш сайлент, ничего не происходит. я даже цифру менял на другую у hd, ставил 5 8 10. Черный экран и даже не вводится ничего.

Обновил минт вчера и затерся конфиг груба ))) опять руками вводить… кастом конфиг? хм, а как скормить грубу его?

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

Обновил минт вчера и затерся конфиг груба

Не затерся, а сгенерировался новый, по шаблонам, находящимся в /etc/grub.d. Об этом написано в первых строчках этого файла. Свои настройки лучше помещать в файл /etc/grub.d/40_custom. После этого выполнить «sudo update-grub». Будет сгенерин новый конфиг. Либо, как подсказали выше, помещать свои настройки в файл /boot/grub/custom.cfg.

Вот код для загрузки «любого линукса»:

  submenu 'Linux on LABEL|UUID|DEV' --class gnu-linux --class gnu --class os {
	src='81c317c3-2af6-4b59-e870-5d34b499400b'
	key="video=1024x768 root=/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part5 showopts noresume"
	avload='/boot'; version='-2.6.39-2-desktop'
	#insmod	part_gpt
	insmod	part_msdos
	insmod	gzio
	insmod	ext2
	root='x'; search -n -s -l ${src}
	if [ ${root} = x ]
	  then	search	-n -s -u ${src}
		if [ ${root} = x ]
		  #then	search -n -s -f ${avload}/vmlinuz${version}; rootfs="root=/dev/${src}"
		  then	search -n -s -f ${avload}/vmlinuz${version}; rootfs=""
			if [ ${root} = x ]; then avload=''; search -n -s -f ${avload}/vmlinuz${version}; fi
		  #else	rootfs="root=UUID=${src}"
		  else	rootfs=""
		fi
	  #else	rootfs="root=LABEL=${src}"
	  else	rootfs=""
	fi
	if [ ${root} = x ]
	  then	avload=''
	  else	if [ -e "/boot/grub/grub.cfg" ]
		  then	avload='configfile'; src='/boot/grub/grub.cfg'
		  else	if [ ! -e "${avload}/vmlinuz${version}" ]; then avload=''; fi
			avinit="initrd ${avload}/initrd${version}"; src="${avload}/vmlinuz${version} ${rootfs} ${key} quiet --"; avload='linux'
		fi
	fi
	if [ "${root}" = 'x' ]; then msg="$src not exist!"; else if [ -z "${msg}" ]; then msg="Load $src from $root"; fi; fi
	echo "$msg"; sleep -v 4
	if [ -n "${avload}" ]; then ${avload} ${src}; if [ -n "${avinit}" ]; then ${avinit}; fi; fi
  }

Немного подправил его для текущей задачи. В переменной «src» - что искать. Может быть метка раздела, УУИД или каноническое имя раздела (например, sdb5). Я обычно использую метку, но для этого на разделе она должна быть установлена. В данном случае подставил УУИД. Если найдет этот раздел, то проверяет наличие на нем файла grub.cfg. Если есть, то запускает груб с этим конфигом. Если нет, то ищет ядро. Шаблон для поиска ядра «vmlinuz${version}». Если находит, то пытается загрузить систему, с параметрами из переменной «key». Чтобы меньше зависеть от свап-раздела, подставил параметр «noresume». Уже довольно давно груб называет параметр «vga=» устаревшим. Быстрый поиск выдал ошибку, как раз связанную с сусе и «vga=0x317» . Поэтому вместо него подставил «video=1024x768». Параметр «root=» использует специфичное для суси значение: «/dev/disk/by-id/ata-ST500LM012_HN-M500MBB_S2RSJ9DC733911-part5». Желательно загрузиться в суси с двумя подключенными дисками и проверить, существует этот файл или нет.

andytux ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.