Пять систем на машине: делаем multiboot
Как вы наверное успели заметить, я использую кучу разных операционных систем, которые надо как-то загружать. Рассказываю как такое настраивается на примере машины с пятью ОС: Ubuntu, Mageia, FreeBSD, Windows11 и OpenIndiana.
Основы
В компьютере есть такая штука как жесткий диск, на диске есть разделы. Схема разбивки диска на разделы называется partition table, их много разных но для обычного пользователя PC актуальны два: GPT и MBR.
MBR считается устаревшим, GPT — новым, еще он необходим для использования UEFI загрузчиков.
На машине которую я использовал для примера используется MBR и отключена UEFI загрузка ради OpenIndiana, которая пока не поддерживает GPT.
В принципе проблема поддержки GPT + UEFI существует во всех редких либо устаревших ОС, поэтому если возникнет необходимость таковую развернуть — вам придется форматировать диск с таблицей разделов под MBR.
На описываемой машине стоит два диска, вот так выглядит разбивка на втором:
Для того чтобы загрузиться с конкретного раздела диска, на нем должен стоять специальный флаг «boot» (см. картинку выше).
Загрузка и загрузчики
У каждой ОС есть свой собственный загрузчик, в случае самой любимой операционной системы это выглядит вот так:
Да, существуют способы запихать и сюда другие ОС чтобы прямо из этого меню запускались всякие линуксы и FreeBSD.
Но они уж слишком неудобны.
Поэтому я использовал и использую Grub2 в качестве основного загрузчика, о нем и его настройке и пойдет речь.
В случае MBR загрузчик прописывается в первый раздел диска и запускается первым, до операционной системы.
Он запускается при выборе диска в качестве загрузочного в BIOS вашего компьютера:
Вот такой командой можно установить загрузчик Grub на второй диск в системе:
grub-install /dev/sdb
Думаю очевидно что в один момент времени на диске может быть только один загрузчик, поэтому установка нового загрузчика затирает предыдущий.
Несмотря на то что grub есть практически во всех линуксах, BSD и юниксах, степень его поддержки и набор модулей - отличаются.
Поэтому я крайне рекомендую осуществлять настройку главного загрузчика из какого-то популярного линукса (например Ubuntu), что я и делаю ниже.
Linux
На взятой для примере машине их два: Ubuntu и Mageia. Настройка и установка grub мало чем отличается в этих дистрибьютивах, но для отчетности напишу что все операции производились из-под Ubuntu.
Главный конфигурационный файл grub находится в /boot/grub/grub.cfg , в каталоге /etc/grub.d находятся отдельные его части, которые собираются в единое целое командой:
update-grub2
Проще говоря, после отработки команды выше после перезагрузки вы увидите меню с выбором ОС:
Добавление самих линуксов происходит автоматически, но для проформы приведу пример сгенеренного элемента меню для Mageia 9:
menuentry 'Mageia 9 (9) (on /dev/sda7)' --class mageia --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-a75595a4-4de4-4d56-a8ad-a729466b0cc3' { insmod part_gpt insmod ext2 set root='hd0,gpt7' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt7 --hint-efi=hd0,gpt7 --hint-baremetal=ahci0,gpt7 a75595a4-4de4-4d56-a8ad-a729466b0cc3 else search --no-floppy --fs-uuid --set=root a75595a4-4de4-4d56-a8ad-a729466b0cc3 fi linux /boot/vmlinuz-6.4.9-desktop-4.mga9 root=UUID=a75595a4-4de4-4d56-a8ad-a729466b0cc3 ro splash quiet noiswmd resume=UUID=b5c0fab6-8e46-4747-8119-4ca205c24238 audit=0 nopti vga=791 initrd /boot/initrd-6.4.9-desktop-4.mga9.img }
Windows
Прежде чем ставить современную Windows в multiboot, надо знать несколько вещей:
- Windows помимо своего раздела создает еще два скрытых, что в случае MBR означает попадание на лимит в 4 primary partition. Причем разделы Windows должны быть в начале диска. На практике это значит что Windows на диск нужно ставить первой, до всех остальных ОС.
- Загрузочная флешка должна быть создана специально для MBR, стандартная GPT + UEFI не заработает. Windows установленную на MBR раздел, будет невозможно загрузить с включенным UEFI.
Вообще современные версии Windows ставятся на GPT и запускаются через UEFI, имейте это ввиду.
Создание пункта меню Grub для запуска Windows происходит автоматически, при запуске os-prober, который запускается как часть процесса update-grub2.
Итоговая настройка выглядит примерно так:
menuentry 'Windows 11 (on /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-chain-5ED2C518D2C4F4F5' { insmod part_msdos insmod ntfs set root='hd1,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 5ED2C518D2C4F4F5 else search --no-floppy --fs-uuid --set=root 5ED2C518D2C4F4F5 fi parttool ${root} hidden- drivemap -s (hd0) ${root} chainloader +1 }
Технически тут происходит передача флага второму загрузчику, установленному не в начале диска а в начале раздела.
chainloader +1
Указание на конкретный раздел вот тут:
set root='hd1,msdos1'
Первый раздел второго диска, поскольку нумерация дисков идет с нуля а разделов с единицы.
Теперь переходим к более экзотическим ОС.
FreeBSD
Конечно же возможно по аналогии с Windows поставить загрузчик на раздел и запускать его через все тот же chainloader +1.
menuentry "FreeBSD 13" { insmod ufs2 set root='(hd0,2)' search --no-floppy --fs-uuid --set 65032f27c2652c99 kfreebsd /boot/loader }
Такой настройкой осуществляется запуск загрузчика FreeBSD непосредственно из Grub2:
kfreebsd /boot/loader
То есть тут подключается модуль файловой системы UFS2:
insmod ufs2
затем чтение файла загрузчика с раздела и его запуск.
Ну и напоследок - король дичи, настоящий Солярис на ноутбуке.
OpenIndiana
Эта ОС — открытый форк, выложенных в открытый доступ исходников Solaris. ОС очень сложная и необычная, по ней точно будет отдельная детальная статья, а тут ограничимся лишь настройкой ее запуска.
К сожалению OpenIndiana хоть и поддерживает UEFI и установку на GPT, но без разделов, только при условии «занять диск целиком».
Что очевидно не подходит для варианта использования на ноутбуке, поэтому ради нее одной пришлось перенести все на MBR разметку диска.
У раздела с OpenIndiana свой собственный формат, который называется Solaris2, внутри которого уже свои разделы на ZFS.
Grub ничего не знает о Солярисе, его форматах разделов и файловых систем, поэтому единственным вариантом загрузки является chainloader +1
menuentry "OpenIndiana" { set root='(hd0,4)' chainloader +1 }
Не забудьте только поставить флаг «boot» на этот раздел (см. скриншот выше). Запустится загрузчик OpenIndiana: