Open Way | Systems | Distro | Shell | Desktop | Applications
Network | Development | Download | OfftopicКарта сайта
FreeNotesФорум POSIX.ru
На главную страницу

Грузим FreeBSD через GRUB

Алексей Федорчук
2003

До недавнего времени обеспечить совместное проживание Linux и FreeBSD на одной отдельно взятой машине не составляло никакого труда. Для обеспечения загрузки любой из этих систем можно было воспользоваться:

Конечно, первый способ - не самый удобный, возможности BSD loader'а по загрузке "чуждых" систем весьма ограничены. 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, который и выполнит остальную работу.


ремонт плоттеров 8142 . срочная установка кондиционеров в Москве