Мини-HOWTO: "Linux+FreeBSD"

Аннотация

Этот документ содержит информацию о том, как использовать Linux и FreeBSD на одной машине. Здесь обсуждается, как эти две системы могут разделять некоторые ресурсы, например, область подкачки. Я предполагаю, что Вы имеете некоторые навыки в работе с Linux или FreeBSD, а так же то, что Вы разбили на разделы свой жесткий диск (программой fdisk), прежде чем приступить к чтению данного документа. Советы, данные ниже, были проверены на FreeBSD 2.2.2, но, наверняка, все они будут справедливы и для более новых версий. Не стесняйтесь писать мне, если у Вас есть вопросы, комментарии или предложения относительно данного документа. Я также хотел бы получить письма от людей, которые используют Linux вместе с NetBSD или OpenBSD.


Содержание
Что такое FreeBSD? Двойная загрузка в FreeBSD! FreeBSD - краткий обзор
Разметка жесткого диска
Совместное использование области подкачки в Linux и FreeBSD.
Загрузка FreeBSD с использованием LILO
Подключение файловых систем
Запуск программ
Ссылки на информационные ресурсы
Благодарности и юридическая информация

Что такое FreeBSD? Двойная загрузка в FreeBSD! FreeBSD - краткий обзор

FreeBSD - это свободно распространяемая Unix-подобная операционная система, весьма похожая на Linux. Главное различие состоит в том, что ядро Linux было написано с нуля, а ядро FreeBSD было переработано из свободно распространяемых частей дистрибутива 4.4BSD (Berkeley Software Distribution), известных как 4.4BSD-lite. Этот факт заставляет многих людей считать, что FreeBSD более похож на "настоящий" UNIXR, чем Linux. FreeBSD работает только на Intel-платформах (i386 и выше); версии для платформ DEC Alpha и Sun Sparc в настоящий момент находятся в стадии разработки. Системы NetBSD и OpenBSD, подобны FreeBSD, и работают на нескольких платформах. Аппаратные требования для всех этих *BSD систем аналогичны Linux.

Развитие FreeBSD происходит несколько другим путем, чем Linux. Основная группа разработчиков задает путь развития проекта. Значительные изменения обсуждаются заранее через списки рассылок. FreeBSD имеет две версии (как и Linux): "-ТЕКУЩАЯ" и "-СТАБИЛЬНАЯ". "-ТЕКУЩАЯ" версия включает в себя последние версии программ и усовершенствований. "-СТАБИЛЬНАЯ" версия имеет только те усовершенствования, которые уже проверены на наличие серьезных ошибок.

FreeBSD может бесплатно использоваться и распространяться так же, как и Linux. Авторские права на большую часть системы принадлежат BSD; остальное распространятся под лицензией GNU GPL или ей подобной.


Разметка жесткого диска

В Linux и FreeBSD названия жестких дисков и разделов строятся по двум разным схемам. В этой главе описаны главные различия между ними. Фактически, в FreeBSD маркировка разделов взята из традиционного BSD; она адаптирована для fdisk. Таким образом, она очень похожа на ту, которая используется в BSD-подобных системах, таких как NetBSD, OpenBSD, Ultrix, Digital Unix, SunOS и Solaris.


FreeBSD: "slices" и "partitions".

FreeBSD необходим свой раздел на Вашем жестком диске. В FreeBSD этот первичный раздел называется "slice". На первичном разделе с помощью программы disklabel, можно создать до восьми подразделов . В FreeBSD эти логические разделы называют ``partitions'' . Эта концепция подобна Linux (и DOS) с разбивкой расширенного раздела на логические. FreeBSD нельзя устанавливать в расширенный раздел, сделанный Linux (или DOS). Обратите внимание, что Linux-программа fdisk не показывает "partition"-разделы из основного меню, но она может это делать при помощи команды "b". Это выглядит примерно так (/dev/hda4 - это "slice"-раздел FreeBSD):

bash# fdisk /dev/hda

Command (m for help): p

Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/hda1   *        1        1       27    54400+  83  Linux native
/dev/hda2           28       28       55    56448   83  Linux native
/dev/hda3           56       56      403   701568   83  Linux native
/dev/hda4          404      404      621   439488   a5  BSD/386

Command (m for help): b
Reading disklabel of /dev/hda4 at sector 1624897.

BSD disklabel command (m for help): p

8 partitions:
#        size   offset    fstype   [fsize bsize   cpg]
  a:    64512  1624896    4.2BSD        0     0     0   # (Cyl.  404 - 419)
  b:   104832  1689408      swap                        # (Cyl.  420 - 445)
  c:   878976  1624896    unused        0     0         # (Cyl.  404 - 621)
  e:    64512  1794240    4.2BSD        0     0     0   # (Cyl.  446 - 461)
  f:   645120  1858752    4.2BSD        0     0     0   # (Cyl.  462 - 621)

BSD disklabel command (m for help): q
bash#

Буквы `a'...`f' в первой колонке соответствуют тому, что выводит программа disklabel FreeBSD (колонка Id). Первые три раздела - специальные. Буква `a' определяет корневой раздел, `b' определяет раздел подкачки в то время, как `c' определяет весь "slice"-раздел. Смотрите документацию к FreeBSD для получения большей информации об этих буквах и различных типах разделов.


Раздел Linux. Сравнение Linux и FreeBSD.

Названия жестких дисков в Linux и FreeBSD:
                           Linux           FreeBSD
Первичный IDE винчестер   /dev/hda        /dev/wd0
Вторичный IDE винчестер   /dev/hdb        /dev/wd1
Первичный SCSI винчестер  /dev/sda        /dev/sd0
Вторичный SCSI винчестер  /dev/sdb        /dev/sd1

Названия разделов (в FreeBSD "slices"-разделов) на IDE-винчестере (например, /dev/hda):
                                Linux           FreeBSD
Первый первичный раздел         /dev/hda1       /dev/wd0s1
Второй первичный раздел         /dev/hda2       /dev/wd0s2
Третий первичный раздел         /dev/hda3       /dev/wd0s3
Четвертый первичный раздел      /dev/hda4       /dev/wd0s4

Названия разделов "partitions" в моей системе FreeBSD. Эти наименования вы получите по умолчанию. Вы можете изменить их, если выберете выборочную установку FreeBSD (/dev/hda4 - это FreeBSD "slice" раздел):
Linux наимен.   FreeBSD наимен.   FreeBSD точка монтирования 
/dev/hda5       /dev/wd0s4a       /
/dev/hda6       /dev/wd0s4b       swap
/dev/hda7       /dev/wd0s4e       /var
/dev/hda8       /dev/wd0s4f       /usr

Если Вы запустите dmesg в Linux, то вы увидите примерно следующее (Ядро linux должно быть собранно с поддержкой файловой системы UFS. См. главу Установка и настройка Linux):
hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >

Если система FreeBSD у Вас установлена в раздел /dev/sd1s3 (/dev/sdb3 в Linux), а /dev/sdb2 - это расширенный раздел Linux, содержащий два логических раздела (/dev/sdb5 и /dev/sdb6), то предыдущий пример будет выглядеть так:
Linux наимен.   FreeBSD наимен.   FreeBSD точка монтирования 
/dev/sdb7       /dev/sd1s3a       /
/dev/sdb8       /dev/sd1s3b       swap
/dev/sdb9       /dev/sd1s3e       /var
/dev/sdb10      /dev/sd1s3f       /usr

Это будет показано dmesg как:
Partition check:
 sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 >

Если расширенный раздел Linux находится после "slice"-раздела FreeBSD, то у Вас могут возникнуть некоторые проблемы, т.к. обычно Linux инсталлируется без поддержки UFS. В этом случае, он не будет распознавать разделение внутри "slice"-раздела FreeBSD. Данная ситуация может выглядеть следующим образом (/dev/hda3 "slice"-раздел FreeBSD, а /dev/hda4 - это расширенный раздел Linux) с поддержкой UFS:
Partition check:
 hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 >
без нее:
Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 >

Из-за этого Вы можете получить неправильные названия устройств и даже потерять некоторую информацию. Мой совет: всегда располагайте ваш "slice"-раздел FreeBSD после расширенных разделов Linux и не изменяйте никакие логические разделы в расширенном разделе Linux, после установки FreeBSD!


Совместное использование области подкачки в Linux и FreeBSD.

В этом разделе содержится информация о том, как мне удалось добиться того, чтобы Linux и FreeBSD использовали общую область подкачки. Возможно, существует и другой путь добиться того же результата. Вы можете установить FreeBSD до установки Linux, только обратите внимание на порядок разделов внутри "slice"-раздела.


Установка и настройка Linux

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

Когда Вы установите Linux, необходимо пересобрать ядро. Прочитайте The Linux Kernel HOWTO, если еще никогда этого не делали. Вы должны ответить ``y'' на UFS filesystem support (read only) и BSD disklabel (FreeBSD partition tables) support:
UFS filesystem support (read only) (CONFIG_UFS_FS) [N/y/m/?] y
BSD disklabel (FreeBSD partition tables) support (CONFIG_BSD_DISKLABEL) [N/y/?]
(NEW) y

Установите новое ядро и перезагрузитесь. Уберите все строки, в которых есть слово swap из файла /etc/fstab, если у Вас есть раздел подкачки Linux. Удостоверьтесь в том, что теперь у Вас система работает с новым ядром. Теперь можно устанавливать FreeBSD.


Установка FreeBSD

Установите FreeBSD в соответствии с документацией. Удалите раздел подкачки Linux, если он у Вас есть (можете использовать для этого FreeBSD fdisk). Обратите внимание на порядок разделения ``slice''-раздела FreeBSD. Если Вы используете разбивку по умолчанию, то второй "partition"-раздел(подраздел) будет разделом подкачки. Завершите установку и загрузите Linux, используя загрузочную дискету с новым ядром.


Настройка области подкачки FreeBSD для использования в Linux

Запустите dmesg, когда загрузитесь в Linux. Вы должны увидеть следующее:
Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >

Это значит, что /dev/hda4 - это "slice"-раздел FreeBSD, а /dev/hda5, /dev/hda6, /dev/hda7 и /dev/hda8 - "partitions"-разделы FreeBSD. Если у Вас разделом подкачки является второй "partition"-раздел на "slice"-разделе, то это будет /dev/hda6.

В Linux вы должны добавить строку в файл /etc/fstab, чтобы разрешить использование раздела подкачки:
/dev/hda6	none		swap		sw		0	0

FreeBSD сразу может использовать этот раздел подкачки, Linux же нуждается в специальном указании на него. Оно может быть сделано mkswap. mkswap необходимо запускать каждый раз при перезагрузке Linux, однако, при желании Вы можете автоматизировать эту процедуру. Для этого Вам надо найти файл, который запускает swapon при загрузке. В Red Hat Linux это /etc/rc.d/rc.sysinit. Добавьте в этот файл до строки swapon -a следующую строку:
awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab

Это обеспечит запуск, при загрузке системы, команды mkswap для всех разделов подкачки, заданных в файле /etc/fstab.

После перезагрузки запустите free для проверки размера раздела подкачки. Затем загрузитесь в FreeBSD, чтобы быть уверенным, что все работает. Если Вы не получили желаемого результата, то, скорее всего, Вы использовали не тот раздел. В этом случае, попробуйте переустановить FreeBSD. Повторение - мать учения ;-)


Загрузка FreeBSD с использованием LILO

Вы можете легко загрузить FreeBSD, используя LILO. Не устанавливайте загрузчик FreeBSD (Booteasy), если хотите использовать LILO. Добавьте следующие строки в файл /etc/lilo.conf и запустите lilo (я предполагаю, что "slice"-раздел FreeBSD - это /dev/hda4):
other=/dev/hda4
	table=/dev/hda
	label=FreeBSD

Если Ваш FreeBSD установлен на второе SCSI-устройство, используйте что-нибудь типа ("slice"-раздел FreeBSD - это /dev/sdb2):
other=/dev/sdb2
	table=/dev/sdb
	loader=/boot/chain.b
	label=FreeBSD


Подключение файловых систем

Подключение файловой системы UFS под Linux

К сожалению, драйвер UFS не поддерживается ядром Linux 2.0.хх. Если Вы попробуете подключить файловую систему FreeBSD, то получите сообщение об ошибке (фактически файловая система подключается, но Вы ничего не можете с ней делать). Эта проблема решена в более поздних версиях ядра (2.1.87 и выше).

На metalab.unc.edu есть другой драйвер UFS для ядра Linux 2.0.xx (xx <= 30) . Он называется U2FS. В настоящее время это файл u2fs-0.4.3.tar.gz. Версию U2FS (ufs-0.4.4.tar.gz) для Linux 2.0.31 и выше (2.0.xx; не 2.1.xx) можно найти на этом сайте. Там же есть дополнительная информация по U2FS (и UFS).

Теперь вы можете заново собрать ядро с поддержкой файловой системы U2FS. См. главу установка и настройка Linux для получения большей информации об этом. Также Вы можете убрать поддержку файловой системы UFS из ядра, т.к. теперь будете использовать U2FS.

Когда Вы установите новое ядро, подключите файловую систему UFS (все "partition"-разделы, кроме раздела подкачки) командой вида:
mount -t u2fs /dev/hda8 /mnt

Также можно использовать команду
mount -t ufs /dev/hda8 /mnt
если у Вас ядро версии 2.1.87 или выше. Начиная с ядра версии 2.1.112 Вы можете добавить -o ufstype=44bsd командой типа:
mount -t ufs -o ufstype=44bsd /dev/hda8 /mnt

UFS (и U2FS) драйвер позволяет подключать файловую систему только для чтения. Это значит, что Вы сможет прочитать информацию с подключенной файловой системы UFS, но не сможете ничего записать. Экспериментальная версия драйвера, поддерживающего чтение и запись UFS, работает с ядром 2.1.112 и выше; возможность записи в FreeBSD-раздел поддерживается ядром, начиная с версии 2.1.127.


Подключение файловой системы ext2fs под FreeBSD

Чтобы подключить файловую систему ext2fs в FreeBSD, вы должны собрать новое ядро с поддержкой ext2fs. Прочитайте the FreeBSD handbook, чтобы узнать, как это делается. Вставьте строку
options		"EXT2FS"

Затем, когда Вы загрузитесь с только что собранным ядром, подключите файловую систему ext2fs командой: mount -t ext2fs /dev/wd0s3 /mnt

Если Вы используете FreeBSD версии 2.2.8 и ранее, то отключайте все файловые системы ext2fs до перезагрузки FreeBSD. Если Вы перезагрузите FreeBSD с подключенной файловой системой ext2fs, FreeBSD не сможет синхронизировать файловые системы UFS. В результате этого, при последующей загрузке автоматически запустится fsck. Вы можете работать, не обращая внимания на эту ошибку системы, если будете всегда отключать ext2fs-разделы. Для автоматического отключения всех файловых систем ext2fs, можно вставить строку:
umount -a -t ext2fs
в файл /etc/rc.shutdown. Данная ошибка была исправлена в ядре FreeBSD версий 3.x.


Запуск программ

Запуск программ FreeBSD под Linux

Пакет iBCS поддерживает запуск программ FreeBSD под Linux, но у меня не получилось сделать это. Пожалуйста, сообщите мне, если у Вас получится.


Запуск программ Linux под FreeBSD

FreeBSD поддерживает программы Linux. Чтобы работать с ними, необходимо проделать следующее:

  1. Разрешите совместимость с Linux. Для этого нужно отредактировать файл /etc/rc.conf (в FreeBSD 2.2.2, в других версиях могут быть незначительные отличия). Исправьте строку
    linux_enable="NO"
    на
    linux_enable="YES"
    и перезагрузитесь. Кроме того, можно разрешить FreeBSD поддержку бинарных файлов Linux, запустив /usr/bin/linux. После этого не надо перезагружаться. Этот вариант хорош тем, что позволяет экономить память и запускать поддержку бинарных файлов Linux только тогда, когда это необходимо. Если Вы решите пересобрать ядро, то не забудьте добавить строку
    options		COMPAT_LINUX
    в файл конфигурации ядра.

  2. Если Ваши бинарные файлы Linux связаны динамически, то необходимо установить библиотеки, которые включены в FreeBSD 2.2.{2,5,6} в пакете linux_lib-2.4.tgz (версия может быть новее). Установите пакет следующей командой:
    pkg_add <path_to_package>/linux_lib-2.4.tgz
    <путь_к_пакету> это каталог, где находится данный пакет. Также можно установить его из сети:
    pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/packages-stable/All/linux_lib-2.4.tgz
    или запустив /stand/sysinstall. Войдите в пункт "Configure", затем "Packages". Если Ваши бинарные файлы Linux связаны статически , то выполните следующую команду:
    brandelf -t Linux <name_of_statically_linked_linux_binary>

  3. Установите программу Linux, которую Вы хотите запустить. Программа может быть установлена на файловую систему UFS или ex2fs. См. раздел "Подключение файловой системы ext2fs под FreeBSD" для получения большей информации об использовании раздела с файловой системой ext2fs под FreeBSD.

Я успешно запускал Linux версии Applixware 4.3 и Netscape 3.01 (и то, и другое ELF формата) под FreeBSD 2.2.2, используя вышеизложенный метод (да, я знаю, что существует Netscape 4 под FreeBSD). Linux версии acroread и StarOffice 3 и 4 также хорошо работают под FreeBSD. StarOffice 5 в настоящее время не работает под FreeBSD. Читайте документацию по FreeBSD для получения большего количества информации по этой теме.


Ссылки на информационные ресурсы

Последнюю версию этого mini-HOWTO можно найти на этом сайте в нескольких форматах (включая sgml и PostScript). Документ был перведен на японский Mr. Teruyoshi Fujiwara в рамках проекта JF.

Здесь вы можете найти несколько статей о различиях между Linux и FreeBSD.

Вы можете найти достаточно информации по системе FreeBSD (включая и ее саму) на этом сайте. Также можно купить компакт-диски на Walnut Creek CDROM (их сервера работают под FreeBSD).

Linux Kernel HOWTO и этот mini-HOWTO реализованы в рамках проекта The Linux Documentation Project.


Благодарности и юридическая информация

Спасибо членам команды *BSD user group in Denmark за ответы на вопросы по FreeBSD, Mr. Takeshi Okazaki за то, что обратил мое внимание на U2FS, и Mr. David O'Brien за ценные предложения.


Юридическая информация

Все торговые знаки являются собственностью их владельцев.

Хотя, как мне кажется, информация в данном документе абсолютно правильна, автор не берет на себя ответственности за ошибки, возникшие в результате использования данного mini-HOWTO. Используйте его на свой собственный страх и риск.

Copyright ╘ 1997-2000 by Niels Kristian Bech Jensen. This document may be distributed only subject to the terms and conditions set forth in the LDP License at http://www.linuxdoc.org/COPYRIGHT.html.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу