Алексей Федорчук
2003 г.
Эта заметка размещается в связи с опробованием последней (2.4) версии DragonFly BSD — обеспечить её загрузку с помощью GRUB можно точно так же, как и FreeBSD.
Обычно обеспечить совместное проживание Linux и FreeBSD на одной отдельно взятой машине не составляет никакого труда. Для обеспечения загрузки любой из этих систем, установленных на одной машине, можно воспользоваться:
- штатным загрузчиком FreeBSD (BSD loader);
- LILO;
- GRUB.
Конечно, первый способ — не самый удобный, возможности BSD loader’а по загрузке «чуждых» систем несколько ограничены: он умеет грузить системы не более чем с двух физических дисков, только с первичного раздела и только в том случае, если их загрузчик записан в Boot Record последнего. LILO в этом плане гораздо богаче. Однако лучшим загрузчиком при использовании нескольких операционок, ИМХО, является GRUB. Тем более, что большинство современных дистрибутивов Linux именно его и устанавливают по умолчанию. И если он уже есть — менять его на что-либо другое после установки FreeBSD никаких основания я не вижу.
Однако здесь возникает одно небольшое осложнение. С выходом FreeBSD 5-й ветки в этой операционке по умолчанию принята файловая система UFS2. Которая обладает рядом несомненных достоинств по сравнению со своей предшественницей (UFS просто).
Однако вот беда — новая файловая система не понимается текущими версиями GRUB (ни 0.93, ни 0.94. То есть обеспечить загрузку FreeBSD старым способом, вписав в файл /boot/grub/menu.lst
строки типа
# FreeBSD title FreeBSD 5.2 root (hd0,1) kernel (hd0,1)/boot/loader
уже не удастся. (Насколько мне известно, LILO до недавнего времени также не справлялась с загрузкой FreeBSD при использовании UFS2 — как сейчас, не знаю). Конечно, ситуацию быстро поправили — порт GRUB версии 0.94 включает в себя патч для понимания UFS2. Однако согласитесь, загрузчик — это такая вещь, которую лишний раз переставлять не хочется, абы чего не вышло. Особенно если он давным-давно был установлен вместе с уже затертым дистрибутивом Linux…
Примечание: ныне (конец 2005-го года) GRUB без проблем работает с UFS2, однако описанный ниже способ по прежнему может использоваться для загрузки FreeBSD (или любой другой BSD-системы, буде у нее обнаружится классовые противоречия с GRUB’ом).
Из этой ситуации напрашивается два простых выхода: а) отказаться от GRUB в пользу Free’шного загрузчика, и б) отказаться от UFS2 на корневом разделе FreeBSD. Однако оба решения, помимо отмеченных выше недостатков, просто не спортивны. И потому есть смысл поискать третье решение — и UFS2 сохранить, и с GRUB‘а загрузить.
А для этого вспомним, что GRUB сам по себе не способен загрузить ядро еще некоторых, весьма известных, операционных систем. И, тем не менее, вполне успешно используется для мультисистемной загрузки комбинаций Linux — Windows 9X/ME — Windows NT/2000/XP.
Как же он это делает? А очень просто — передачей управления на загрузочный сектор Windows-раздела «по цепочки». Если такой номер проходит с системами от MS, почему бы не испробовать его на классово близкой к GRUB (разрабатываемом в рамках проекта GNU) FreeBSD?
А что, и испробуем. На примере конфигурации дисков и дисковых разделов, на которой я, в дополнение к имеющемуся Archlinux, не так давно устанавливал FreeBSD 5.2.
На первом мастере имеем три раздела — hd0,0
, hd0,1
, hd0,2
в номенклатуре GRUB; в Linux-нотации (при использовании devfs им соответствуют /dev/discs/disc0/part(1-3
), во FreeBSD — /dev/ad0s(1-3)
. Первый раздел (файловая система ext2fs) — под каталог /boot
Linux-инсталляции, он-то и содержит GRUB. Второй раздел несет на себе Archlinux, третий зарезервирован под всякого рода эксперименты (оба — с файловой системой ext3fs).
Первый слейв целиком отдан на растерзание FreeBSD — на нем создан единственный слайс этой системы (hd0,1
с точки зрения GRUB, /dev/discs/disc1/part1
по Linux’овому, /dev/ad1s1
по Free’шному) в режиме эксклюзивного использования, разбитый на партиции (какие — в данном случае не существенно, важно только, что все они несут файловую систему UFS2).
Разбиение второго мастера (он сидит в паре с CD-R/RW) в текущем контексте также не существенно — он оформлен как Extended partition с несколькими логическими дисками (все — с файловой системой ext3fs), предназначенными исключительно для хранения данных (в Linux монтируется как /home
).
Итак, загружаемся в Linux, монтируем /dev/discs/disc0/part1
как /boot
(для раздела, несущего GRUB, не рекомендуется автоматическое монтирование при старте системы) и открываем в текстовом редакторе файл /boot/grub/menu.lst
, содержащий вводную секцию:
# Config file for GRUB - The GNU GRand Unified Bootloader # /boot/grub/menu.lst # general configuration: timeout 5 # Время ожидания выбора загружаемой ОС в секундах default 0 # ОС, загружаемая по умолчанию # (в данном случае Linux) color light-blue/black light-cyan/blue # Цветовая гамма меню (мне такая нравится)
Далее идут строки:
# (0) Arch Linux title Arch Linux [/boot/vmlinuz] root (hd0,1) kernel (hd0,0)/vmlinuz root=/dev/discs/disc0/part2 ro hdd=ide-scsi
обеспечивающие загрузку Linux. Дописываем комментарий и метку для пункта меню, загружающего FreeBSD:
# (1) FreeBSD title FreeBSD 5.2
Теперь остается только определить раздел, который будет корневым для загружаемой системы в нотации GRUB (а не FreeBSD! — это еще не /
ее файловой системы):
rootnoverify (hd1,0)
сделать его активным:
makeactive
и «по цепочке» передать на него управление загрузкой:
chainloader +1
На этом миссия GRUB заканчивается — теперь в ходе загрузки в дело вступит /boot/loader
из FreeBSD, который и выполнит остальную работу.
> makeactive
если память не изменяет,то годик назад у меня и без этого по цепочке нормально загружалась и FreeBSD, и Windows
>Итак, загружаемся в Linux, монтируем /dev/discs/disc0/part1 как /boot (для раздела, несущего GRUB, не рекомендуется автоматическое монтирование при старте системы)
Вот это я не очень понял… :(
Помню когда прописывал OpenBSD в груб, то просто открыл /boot/grub/menu.lst и добавил:
title Open BSD 4.5
rootnoverify (hd1,1)
makeactive
chainloader +1
Правда grub у меня не в отдельном раздеде, а в / , а BSD и ее загрузчик на другом диске.