LINUX.ORG.RU

GRUB мультибут на внешнем SSD

 , , ,


0

1

Есть у меня старый мультибут HDD. На нем 3 загрузочных в режиме UEFI (Mint ISO, Win10, WinPE) и 4 загрузочных в режиме legacy BIOS (Mint ISO, Win10, WinPE, Win7). Делал мультизагрузку сам без всяких инструкций.

После 6 лет работы на диске появилась пара бэдов, решил сделать новый мультибут, теперь на SSD.

Повторил всё один в один, как со старым HDD:

1. Создал таблицу разделов msdos

2. Создал 3 fat32 раздела под UEFI системы

3. Создал 4-й раздел (extended) и внутри него 4 ntfs раздела (для legacy).

4. Скопировал содержимое разделов старого HDD на новые разделы SSD.

5. Установил загрузчик на SSD: grub-install --no-floppy --root-directory /mnt/legacy /dev/sdc

Вся загрузка на первом разделе: /boot/grub/grub.cfg содержит меню для загрузки в UEFI режиме, /legacy/boot/grub/grub.cfg - меню для legacy режима. Все на месте, все UUID правильные.

При загрузке в UEFI выбираю по F8 первый раздел, UEFI находит там /boot/grub/grub.cfg и грузится меню выбора UEFI пунктов. Выбираю любой пункт и загружаюсь без проблем.

При загрузке в режиме legacy загружается меню /legacy/boot/grub/grub.cfg, но грузится только MINT ISO. Попытка загрузиться в любой другой legacy пункт меню вываливается ошибка «This is not a bootable disk. Please insert a bootable floppy and press any key to try again...»

На всяк случай установил флаг boot на первый раздел SSD, хотя на старом HDD никакого флага нет и он нормально грузится.

В чем может быть проблема? Почему в UEFI все норма, а в legacy не грузит? Хотя на HDD все нормально

★★

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

Конфиг скопирован со старого HDD, просто изменены UUID под разделы нового диска:

### BEGIN /etc/grub.d/00_header ###
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="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,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2  4f15f637-dd32-4d10-ad03-08d411b6fc25
else
  search --no-floppy --fs-uuid --set=root 4f15f637-dd32-4d10-ad03-08d411b6fc25
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=tt_RU
  insmod gettext
fi
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=10
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=10
fi
### END /etc/grub.d/00_header ###


############################################# 
menuentry "LEGASY BIOS MINT Live" {
	insmod part_msdos
    insmod search_fs_uuid
    search --fs-uuid --no-floppy --set=root B797-BCD6
    linux	/casper/vmlinuz  file=/cdrom/preseed/linuxmint.seed boot=casper iso-scan/filename=${iso_path} quiet splash --
	initrd	/casper/initrd.lz
}

############################################# 
menuentry "BIOS Windows 10 Light" {
	insmod part_msdos
	insmod ntfs
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root 4E203F2B6FB1D782
    chainloader +1
}

############################################# 
menuentry "BIOS Windows 7" {
	insmod part_msdos
	insmod ntfs
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root 5D6D60B811624047
    chainloader +1
}

############################################# 
menuentry "BIOS WinPE" {
	insmod part_msdos
	insmod ntfs
	insmod vfat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --no-floppy --set=root CE53-7EF1 
    chainloader +1
}

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

Честно говоря, удивлен, что хоть что-то грузится.

Могу предложить взять загрузочный код отсюда. Выглядит конечно монструознее твоего, но универсальней и никакой возни с УУИД-ами.

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

Дело не в меню.

Взял и напрямую склонировал старый hdd на новый ssd через dd.

Теперь с ssd стали грузиться пункты legacy-меню. А uefi вообще исчезли. Полностью. Т.е. по F8 в выборе загрузочного устройства нет ни одного UEFI раздела. Как будто бы UEFI перстало видеть FAT32 разделы. А их должно быть три. Нету. Может как-то связано с тем, что размер ssd чуть меньше (447 против 465 Мб) и неправильная таблица разделов как-то мешает увидеть FAT разделы.

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

«Не мудри без меры - перемудришь.»

Без необходимости не стоит усложнять разметку. Например, зачем три ЕФИ-раздела, чтобы самому в них запутаться? ГрубПС вполне можно установить так, чтобы все его файлы находились на ESP-разделе. Конфиг можно сделать общий, а можно и оставить отдельные. «Живой Минт» может быть на любом разделе.

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

Меню вообще не при чём. Как и количество разделов. Дело в том что загрузчик bootmgr не воспринимает диск как загрузочный.

Подход с клонированием диска целиком был неправильным, т.к. при клонировании диска из-за несовпадения размеров (447Гб против 465 Гб) один раздел как бы «вылезает» за пределы диска и поэтому UEFI видя ошибку, считает таблицу разделов некорректной и соответственно не показывает разделы fat32.

Решил проблему клонированием отдельных разделов, а не диска целиком. На новом диске создал разделы точно таких размеров как на старом, и затем скопировал разделы старого диска на разделы нового при помощи dd. Последний раздел (он не загрузочный) создал на всё оставшееся место. Установил grub, все работает, и legacy и uefi.

Так и не понял, чем отличаются разделы созданные 6 лет назад, от созданных сегодня. Почему новые не воспринимаются как bootable? Видимо какой-то аттрибут есть на старой разметке, и при этом его нет на новой разметке. А при клонировании разделов он тоже клонируется на новый диск, что делает его bootable. Другого объяснения нет. Одно знаю точно - это не флаг boot. Он не установлен ни на старом ни на новом диске.

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

Все это виндовые бзики. А у тебя много виндовсов, поэтому много точек отказа. Когда есть виндовс, всегда приходится оглядываться, как она себя поведет и подстраиваться в угоду ей, в ущерб остальным.

andytux ★★ ()