Алексей Федорчук
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, который и выполнит остальную работу.