Мини-HOWTO: Корневой NFS

Andreas Kostyrka

     [email protected]
   

Перевод: Станислав Рогин, SWSoft Pte Ltd.

Версия 8, 8 августа 1997

В этом документе дается объяснение того, как настроить "бездисковую" рабочую станцию на Linux, корневая файловая система которой подключена через NFS. Новую версия этого Мини-Howto можно найти по адресу ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root или на любом его зеркале РЯДОМ С ВАМИ.


1. Copyright

(c) 1996 Andreas Kostyrka ([email protected] or [email protected])

Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.

In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.

If you have questions, please contact Andreas Kostyrka <mailto:[email protected]>, the author of this mini-HOWTO, or Tim Bynum, the Linux HOWTO coordinator, at <mailto:[email protected]> via email.


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

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

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

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

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

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


1.2. Благодарности

  • Avery Pennarun <[email protected]> (за совет, как загружаться без LILO)

  • Ofer Maor <[email protected]> (за лучшую версию мини-HOWTO о настройке бездисковых станций)

  • Christian Leutloff <[email protected]> (за информацию о сетевой загрузке)


2. Общий обзор

В общих словах, при загрузке перед рабочей станцией возникают следующие проблемы:

  • Станция должна выяснить свой IP-адрес, и, если необходимо, полную конфигурацию Ethernet.

  • Также она должна знать, где находится NFS-сервер, и путь подключения корневой файловой системы на нем.

Существующая реализация системы NFSROOT в ядре Linux (начиная с версии 1.3.7x) позволяет следующие варианты:

  • IP-адрес может быть определен при помощи RARP, либо полная конфигурация Ethernet может быть передана ядру через параметры ядра через LILO или LOADLIN.

  • Путь NFS также может быть передан через параметры ядра. Если это не сделано, то RARP-сервер будет восприниматься, как и NFS-сервер, и использовать путь, встроенный в ядро по умолчанию (обычно это: /tftpboot/<IP-address of the machine>.)

  • Конфигурация станции может быть определена при помощи BOOTP.

До настройки бездисковой станции вы должны решить, использовать или нет LILO или LOADLIN. Плюс их использования - гибкость, минус - скорость. Ядро Linux без LILO загружается быстрее. Возможно, в некоторых случаях, вам просто не придется выбирать.


3. Настройка сервера

3.1. Сборка ядра

В ядре можно включить поддержку RARP . Вам необходимо будет сделать это при загрузке станции без параметров, передаваемых ядру. С другой стороны, он вам не нужен, если клиент не находится в одной подсети с сервером.

Ядро для рабочей станции должно содержать, как минимум, следующее:

  • Встроенную в ядро поддержку файловой системы NFS. (Не обязательно встраивать в ядро поддержку файловой системы ext2 - будет достаточно модуля)

  • Должен быть включен параметр "Корневая NFS"

  • Ethernet-драйвер для сетевой платы рабочей станции должен быть встроен в ядро.

  • В зависимости от вашей конфигурации, вам, возможно, нужно будет встроить поддержку RARP или BOOTBP для корневой NFS. (Я имею в виду вопросы, задаваемые make config после вопроса о поддержке файловой системы NFS)

Если станция будет загружаться без параметров ядра, то вам также надо настроить корневое устройство 0:255. Создайте несуществующее устройство командой mknod /dev/nfsroot b 0 255. После создания этого файла устройства, вы можете указать на загрузочное устройство с ядром командой rdev <образ-ядра> /dev/nfsroot.


3.2. Создание корневой файловой системы

3.2.1. Копирование файловой системы

Внимание: несмотря на то, что этот способ может подойти вам, он очень непродуктивен и неэффективен. Чтобы настроить корневую файловую систему для клиентов, читайте "Мини-HOWTO: Корневые файловые системы NFS клиентов на сервере " автора Ofer Maor <[email protected]>.

После того, как вы решите, куда поместить корневое дерево, создайте его (например) командой mkdir -p <каталог>, а затем запустите команду tar cClf / - | tar xpCf <каталог> -.

Если вы собираетесь загружать ваше ядро без LILO, тогда корневой каталог должен быть следующим: /tftpboot/<IP-address>. Если вас такой каталог не устраивает, вы можете изменить его в основном файле Makefile исходных текстов ядра; найдите там строку вида: NFS_ROOT = NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\"" После изменения этой строки пересоберите ядро.


3.2.2. Изменения в корневой файловой системе

Удалите ненужные файлы и проверьте скрипты в каталоге /etc/rc.d. Некоторые важные замечания:

  • Самая важная вещь - настройка eth0. Рабочая станция должна иметь, по крайней мере, частично настроенный интерфейс eth0. Устанавливать IP-адрес рабочей станции равным IP-адресу сервера - не самое умное решение. (Так однажды случилось с автором в его ранних попытках)

  • Второй пункт, на который нужно обратить внимание - это файл /etc/fstab. Там нужно указать все необходимые настройки файловых систем nfs.

  • ВНИМАНИЕ: Не путайте корневые файловые системы сервера и рабочей станции. (Я исправил файл rc.inet1 сервера и долго удивлялся, почему рабочая станция все еще не работает)


3.2.3. Экспортирование файловой системы

Экспортируйте корневой каталог сервера рабочей станции. Смотрите exports(5). Скорее всего, после этого вам придется перезапустить nfsd/mountd. В дистрибутиве RedHat это можно просто проделать командами /etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start .


3.2.4. Настройка RARP

Настройте RARP где-нибудь в сети. Если вы загружаете ядро без параметра nfsroot, то RARP-сервер должен быть NFS-сервером. Обычно так и бывает. Для этого в ядро должна быть встроена поддержка RARP.

Для включения RARP выполните команду (и впишите ее в соответствующий скрипт в каталоге /etc/rc.d:

/sbin/rarp -s <ip-адрес> <ethernet-адрес>

где

ip-адрес

- это IP-адрес рабочей станции

ethernet-адрес

- это Ethernet-адрес сетевой карты рабочей станции

Пример: /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12

Вместо цифровой формы IP-адреса можно использовать имя машины, если сервер сможет из этого имени определить IP-адрес (если настроены /etc/hosts или DNS)


3.2.5. Настройки BOOTP

Для настройки BOOTP вам надо должным образом отредактировать файл /etc/bootptab. Смотрите man bootpd(8) и booptab(5).


3.2.6. Выяснение Ethernet-адреса

Я не знаю Ethernet-адреса! Как его узнать?

  • Загрузитесь с диска с ядром, который вы сделали, и ищите строку с параметрами обнаруженной сетевой карты. Обычно она состоит из 6 шестнадцатеричных чисел - это и есть Ethernet-адрес карты.

  • Загрузите на рабочей станции любую операционную систему с TCP/IP. Затем выполните ping с сервера на рабочую станцию. Ищите в кэше ARP адрес станции командой: /sbin/arp -a


4. Загрузка рабочей станции

4.1. Использование загрузочного ПЗУ (boot ROM)

Я лично подобное чудовище не использовал. Могу лишь дать несколько советов (со слов Christian Leutloff <[email protected]>):

  • Невозможно использование "обычных" ПЗУ.

  • Есть пакет netboot автора Gero Kuhlmann, который содержит загрузочные ПЗУ для Linux и дополнительную информацию. netboot можно найти на ближайшем Linux ftp-сервере или в виде пакета в дистрибутиве Debian (netboot-0.4).

  • Внимательно прочитайте документацию, поставляемую с вашим загрузочным ПЗУ.

  • Возможно вам придется разрешить tftpd на сервере - это зависит от способа загрузки ядра вашим загрузочным ПЗУ.

  • Я приветствую любую информацию о производителях загрузочных ПЗУ, способных загружать Linux. Не у всех есть возможность прошивать ПЗУ самостоятельно.


4.2. Использование диска с ядром

Если вы экспортировали корневую файловую систему с правильным именем, и ваш NFS-сервер также является и RARP-сервером (что подразумевает общую подсеть у сервера и рабочей станции), то достаточно командой cat переписать его напрямую на диск. (Корневое устройство в ядре должно быть установлено в 0:255.) Это также предполагает, что корневой каталог рабочей станции находится на сервере в каталоге /tftpboot/IP-Address (это значение может быть изменено в процессе сборки ядра)


4.3. Использование загрузчика с RARP

Передайте ядру все необходимые в процессе загрузки параметры. Также добавьте туда строку nfsroot=<ip-адрес-сервера>:</путь/к/корневой/файловой/системе> где ip-адрес-сервера - это IP-адрес вашего NFS-сервера, а /путь/к/корневой/файловой/системе - это путь к корневой файловой системе рабочей станции на сервере.

Советы:

  • При использовании LILO используйте параметр "lock": просто наберите все правильные параметры вместе и добавьте слово "lock". Затем, в следующий раз, дайте LILO загрузиться автоматически.

  • При создании загрузочного диска для рабочей станции вы можете использовать опцию append= в файле lilo.conf.


4.4. Использование загрузчика без RARP

В дополнение к параметру nfsroot задайте параметр nfsaddrs=<wst-IP>:<srv-IP>:<gw-IP>:<netm-IP>:<hostname> при запуске ядра. Ядро настроит интерфейс eth0 со следующими параметрами:

wst-IP

IP-адрес рабочей станции

srv-IP

IP-адрес NFS-сервера

gw-IP

IP-адрес шлюза

netm-IP

Маска подсети

hostname

имя рабочей станции


5. Известные проблемы

5.1. /sbin/init не запускается

Наиболее распространенная проблема с /sbin/init состоит в следующем - во многих дистрибутивах /sbin/init собран динамически. Поэтому на клиенткой стороне необходимо правильно настроить каталог /lib. Наиболее простой способ - заменить /sbin/init (для клиентской машины) на обычным образом (с использованием статических ссылок) собранную программу "Hello World". Так, по крайней мере, вы сможете определить возникла ли проблема с динамическими ссылками, или существует что-то более серьезное.


5.2. Проблемы с устройствами в каталоге /dev

Если в процессе загрузки вы получаете странные сообщения об интерфейсах tty, запустите скрипт MAKEDEV с клиентской машины в каталоге /dev. Говорят, что иногда это не работает на некоторых ОС серверов, в которых используются 64-битные номера устройств. Если вы с этим столкнетесь, пишите мне, с какой ОС у вас проблемы. Потенциальное решение - создать небольшой электронный диск (ramdisk) в начале процесса загрузки и пересоздавать заново все файлы устройств каждый раз.


6. Ссылки

  • Клиент BOOTP находится по адресу: ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz

    Бездисковые станции можно настроить значительно проще и гибче при помощи initrd (включаемого в ядра Linux начиная с версии 2.0). initrd - очень хорошее решение для легко настраиваемых систем.

  • Для простых загрузок, при помощи bootpd, во всем вышеописанном нет необходимости, так как в ядрах Linux начиная с версии 2.0 существует возможность использовать BOOTP, вместо RARP. (Если быть более точным, при встраивании обоих в ядре используется более ранний сетевой ответ)

  • В каталоге Documentation исходных текстов ядра есть файл, описывающий корневые файловые системы NFS.

  • Существует патч для ядра, позволяющий подкачку на NFS. Его послали мне (в момент запарки на работе), но я каким-то образом умудрился его потерять. :(

    Скорее всего его можно найти на сервере http://www.linuxhq.com/ в разделе неофициальных патчей.

  • Мой открытый ключ PGP можно найти при помощи finger адреса [email protected]. Отпечаток ключа: F1 F7 43 D5 07 C4 6C 87 BF 6B 33 A2 2C EE 5A F9.