LINUX.ORG.RU

Мультизагрузка. Несколько Linux-систем, Windows. Как организовать?

 ,


1

1

Доброго дня,

Пытаюсь настроить, чтобы несколько ОС загружались из одного списка при старте (Grub). Ставлю каждую ОС на свой раздел, общие /boot, /boot/efi, swap. В вариантах загрузки все появляется, но установка каждой следующей ОС приносит «чехарду». Появляется куча лишних пунктов с ядрами, с которыми оно не грузится, также каждая ОС пишет себя в UEFI. Короче говоря, полный бардак. Причем с окошками проблем нету, грузятся из любого варианта идеально.

Прописать все вручную в grub.cfg не всегда получается, если какие-то нюансы в полях, где menuentry, приходится бэкапить файл, ставить ОС, смотреть как прописалась и оттуда копировать.

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

P.S. Fedora вообще поставилась в свой вариант какой-то (новый?), это systemd-boot? Не могу перенести в grub.

Спасибо.



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

Fedora вообще поставилась в свой вариант какой-то (новый?), это systemd-boot?

его и используй, но конфиги для загрузки остальных систем придется написать самому, благо там три строчки + вручную править после обновления ядра, напиши скрипт который это автоматизирует

anonymous
()

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

Так они вроде через chainloader грузятся? С чего бы у них проблемы.

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

Сделать EFS побольше, кинуть на него GRUB. Ядра (vmlinuz+initramfs) туда же, на EFS, в свой каталог, указав в grub.cfg путь linux путь_до_vmlinux_на_efs/vmlinuz и initrd путь_до_initamfs_на_efs/initramfs, а в vmlinuz в прописать root=настоящий_рут_раздел grub.cfg (на EFS) в этом случае никто не тронет. И при обновлении ядра надо только не забыть скинуть новое на EFS. Руками отредактировать grub.cfg после установки всех систем, оставив нужное.

Так проще для нервов.

Короче говоря, полный бардак.

Иначе так и будет.

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

Сделать EFS побольше, кинуть на него GRUB.

Тут у меня вопрос каким образом загрузчик понимает, откуда конкретно ему нужно читать grub.cfg, это в какой момент задается?

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

По-моему он банально ищет каталог GRUB в корне текущего (с которого он запустился) раздела. У меня на EFS в EFI/BOOT лежит грубовый BOOTX64.EFI, в корне калалог GRUB с grub.cfg и модулями (x86_64-efi).

anonymous
()

А чего ты хочешь добиться? Не лучше ли поставить какую-нибудь виртуалку (тот же VirtualBox) и устанавливать все остальные системы виртуально?

debugger ★★★★★
()

При установке новых систем не устанавливай их установщиком grub заново. Прописывай всё вручную (или не очень) в существующий, да и всё. Тебе он один раз нужен. Выбери дистр, из которого будешь юзать grub, а в остальных не ставь его.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Создаёшь отдельный раздел, куда ставишь Grub.

При установке линуксов этот раздел никак не задействуешь, чтобы этот Grub они не портили. В установщике выбираешь ставить загрузчик ОС на собственный раздел ОС.

После установки вручную добавляешь пункт запуска ОС в отдельный Grub.

Автоматику по поиску других ОС нужно будет отключить, если таковая есть в дистрибутиве.

Получается, что у тебя сначала будет меню с выбором ОС от первого Grub, а потом меню с выбором конкретного ядра.

Пример ручного конфига:

set timeout=10
set default=0

insmod part_msdos
insmod part_gpt
insmod lvm
insmod ext2
insmod fat
insmod ufs2

menuentry "Arch Linux Aquila" {
    set root=(lvm/aq-aq_archlinux)
    configfile /boot/grub/grub.cfg
}

menuentry "Artix" {
    set root=(lvm/aq-aq_artix)
    configfile /boot/grub/grub.cfg
}

menuentry "Void Linux Epsilon" {
    set root=(lvm/aq-aq_voidlinux)
    configfile /boot/grub/grub.cfg
}

menuentry "ROSA Rozana" {
    set root=(lvm/aq-aq_rosa)
    configfile /boot/grub2/grub.cfg
}

menuentry "FreeBSD" {
    insmod part_msdos
    insmod ufs2
    set root=(hd0,5)
    kfreebsd /boot/kernel/kernel
    kfreebsd_loadenv /boot/device.hints
    set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s5
    set kFreeBSD.vfs.root.mountfrom.options=rw
    boot
}

menuentry "Windows 7" {
    chainloader (hd0,1)+1
    boot
}

menuentry "NetBSD" {
    set root=(hd0,2)
    knetbsd -r wd0g /boot/netbsd/netbsd
}
wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 2)

У Grub2 есть custom.cfg рядом с grub.cfg. Он не меняется.
Наименования записей в нём можно помечать каким-нибудь значком, чтобы их сразу было видно при загрузке.

К тому же имеет смысл сделать для каждого установленного экземпляра ОС свой отдельный фейковый /boot.
Например, объеденить его с / экземпляра.
А после обновлений тупо копировать новые ядра, initrd в реальный единый /boot из фейкового. Затем поправлять custom.cfg.

Останется только не забыть монтировать руками реальный /boot в моменты апгрейда пакета самого Grub2, что бывает ооочень редко.

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

Вообще неплохо так получилось. Отдельный раздел efi, там же установлен grub. Каждая ОС имеет свой корневой раздел вместе с boot. Никакие ядра никуда копировать не надо, ОС сама решает, когда ей передается управление через chain. В случае федоры указан напрямую EFI-файл, тоже потом открывает ее (федорино) стандартное меню загрузки. Также, отдельное меню (через еще один файл), в котором описаны загрузки всяких live-iso.

Спасибо большое.

OverLocker
() автор топика
Последнее исправление: OverLocker (всего исправлений: 1)
Ответ на: комментарий от OverLocker

Помогите, пожалуйста.

menuentry "System Rescue CD" {
    set isofile="/ISO/systemrescue-11.03-amd64.iso"
    loopback loop (hd0,1)/$isofile
    probe -s isolabel -l loop
    linux (loop)/sysresccd/boot/x86_64/vmlinuz img_label=$isolabel img_loop=$isofile
    initrd (loop)/sysresccd/boot/x86_64/sysresccd.img
    }

Ядро и образ грузятся, метку образа получает. Но при попытке дальнейшей загрузки пишет что не нашел такого маунта.

OverLocker
() автор топика
Последнее исправление: OverLocker (всего исправлений: 1)
Ответ на: комментарий от OverLocker

Откуда этот код, насколько можно считать его правильным?

Ядро и образ грузятся…

…груб свою задачу выполнил. Дальше уже система сама должна себя найти.

img_label=$isolabel img_loop=$isofile

Эти параметры достоверны? Значения подставляются правильные?

Может быть ещё один момент. Файловая система раздела, на котором находится исо-образ. Если эта конкретная операционная система не умеет работать с данной файловой системой, то она не сможет найти саму себя. Следовательно, не загрузится.

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

Спасибо, разобрался. Все переменные передавались верно, проверил. Это нюанс с загрузкой конкретной реализации, ему нужен файл squashfs из образа. Может напрямую из iso и не загрузится, пока это неизвестно.

Оставлю здесь для истории.

menuentry 'SystemRescueCD' {
  search --no-floppy --label EFI --set=root
  set label=EFI
  echo   'Loading Linux kernel ...'
  linux  /ISO/sysresccd/vmlinuz archisobasedir=ISO/sysresccd archisolabel=$label copytoram setkmap=us
  echo   'Loading initramfs ...'
  initrd /ISO/sysresccd/sysresccd.img
}
OverLocker
() автор топика
Последнее исправление: OverLocker (всего исправлений: 1)
Ответ на: комментарий от OverLocker

А вот и с ISO получилось.

menuentry "SystemRescueCD ISO" {
  #Диск, где лежит образ
  search --no-floppy --label EFI --set=root
  iso_path="/ISO/systemrescue-11.03-amd64.iso" 
  export iso_path
  #Переключаемся на корень уже на диске
  search --set=root --file $iso_path
  rmmod tpm
  loopback loop $iso_path
  set root=(loop)
  # Передаем управление грабу на диске.
  configfile /boot/grub/loopback.cfg
}
OverLocker
() автор топика
Последнее исправление: OverLocker (всего исправлений: 1)
Ответ на: комментарий от OverLocker

configfile /boot/grub/loopback.cfg

Это хорошо, когда образе есть loopback.cfg. Значит образ поддерживает «loopback-bootable», специально придуманную для облегчения загрузки из исо-образа. В файле loopback.cfg конфиг груба именно для загрузки из исо-образа.

menuentry «SystemRescueCD ISO»

Небольшой трюк. Вместо «menuentry» используй «submenu». Сейчас, в случае неудачи, получишь просто зависание и нужно заново перезагружаться. «submenu» даёт возможность вернуться в меню груб, нажатием «ESC».

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

Аналогично. Напишу на форуме - сам лучше запомню. Но для других «черте где». Нет, я добрался, прочитал, больше из любопытства.

Не обязательно ESP быть большим. «Виндового размера» 100мб вполне достаточно. Ventoy тоже делает небольшой. Не обязательно ему быть «специальным-особым». Вполне достаточно ему быть «FAT32». Мне ещё не попадался ни один УЕФИ, который-бы обязательно требовал флаги «boot,esp». Поэтому, любая стандартная флешка с одним разделом FAT32 - вполне надёжный запасной парашют. ЕФИ-загрузчик устанавливается простым копированием файлов. Так что, опять можно обойтись без линукса, только виндой.

Ну и… Уже несколько раз здесь давал эту ссылку. «Тонкие намёки.» Там много вещей, которые опровергают устоявшиеся заблуждения. Некоторые из которых, даже сегодня здесь, прозвучали несколько раз.

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

Попытался закрепить успех. Поставил две ОС. Накатил загрузчик вручную на EFI-раздел. Дальше начались странности:

  • В EFI меню нету моего варианта (имени)

  • Мой вариант теперь находится под именем ubuntu (но папка с моим именем на разделе создалась).

  • Попытка загрузки любого пункта приводит к выводам:

  • error: cant find command search

  • error: cant find command configfile

Чешу репу…

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

Собственно воспроизводится.

Команда grub-install –efi-directory=/boot/efi –boot-directory=/boot/efi –bootloader-id=superboot

создает каталог, а биос видит это как еще одну «ubuntu», которая показывает мое кастомное меню, но оно не работает.

OverLocker
() автор топика

Вообще ядро и есть операционная система, так что у тебя уже давно все получилось. Если какое ядро не грузится, то и пофиг, ведь есть другие. А вот пакетный менеджер может различаться. Можно хоть xbps-src в другой дистрибутив перенести. Могли бы просто надавать дитю по шее чтобы выучил уже что линукс это ядро.

anonymous
()