Linux 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. Чтобы работать с ними, необходимо проделать следующее:

Разрешите совместимость с Linux. Для этого нужно отредактировать файл /etc/rc.conf (в FreeBSD 2.2.2, в других версиях могут быть незначительные отличия). Исправьте строку

linux_enable="NO"

на linux_enable="YES"

и перезагрузитесь. Кроме того, можно разрешить FreeBSD поддержку бинарных файлов Linux, запустив /usr/bin/linux. После этого не надо перезагружаться. Этот вариант хорош тем, что позволяет экономить память и запускать поддержку бинарных файлов Linux только тогда, когда это необходимо. Если Вы решите пересобрать ядро, то не забудьте добавить строку options                              COMPAT_LINUX

в файл конфигурации ядра.

Если Ваши бинарные файлы 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>

Установите программу 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 для получения большего количества информации по этой теме.