Мини-HOWTO: Корневые файловые системы NFS клиентов на сервере

Версия 4.1, 2 февраля 1999

История изменений
Издание 4.1Feb 02, 1999Под редакцией: mo

Цель этого документа - объяснить, как создать клиентские корневые файловые системы на сервере, к которому подключаются клиенты, использующие корневую файловую систему NFS. Вы можете найти последнюю версию этого документа в виде HTML или чистого текста по адресу: http://www.hcs.co.il/oferm/NFS-Root-Client/


Содержание
1. Copyright и авторские права
1.1. Copyright
1.2. Авторские права
1.3. Благодарности
2. Вступление
2.1. Общий обзор
3. Создаем корневой каталог клиента
3.1. Создаем дерево каталогов
3.2. Создаем минимальную файловую систему, необходимую для загрузки
3.2.1. Создаем каталог dev.
3.2.2. Копируем необходимые исполняемые файлы.
3.2.3. Каталог var
3.2.4. Остальные каталоги
3.3. Создаем каталог etc и настраиваем клиентов
3.3.1. Создаем общий для всех клиентов каталог etc
3.3.2. Создаем клиентские каталоги etc
3.3.3. Создаем каталог etc клиента
3.4. Загрузка
4. Создание дополнительных клиентов

1. Copyright и авторские права

1.1. Copyright

(c) 1996 Ofer Maor ()

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 Ofer Maor (), the author of this mini-HOWTO, or Greg Hankins, the Linux HOWTO coordinator, at via email, or at +1 404 853 9989.

If you have anything to add to this Mini-Howto, please mail the author (Ofer Maor, ), with the information. Any new relevant information would be appreciated.


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

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

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

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

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

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


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

Я хочу выразить огромную благодарность автору документа NFS-Root Howto, Andreas Kostyrca (). Этот документ помог мне при первых шагах настройки клиентов с корневыми NFS. Однако, мой мини-Howto ни в коем случае не ставит перед собой цели, заменить его работу, но дополнить ее моим опытом при настройке подобных систем.

Я также хотел бы поблагодарить Mark Kushinsky () за корректировку фраз в английской версии этого документа, вследствие чего документ стало значительно легче читать.


2. Вступление

Этот мини-Howto был написан с целью помочь людям, которые хотят использовать корневое подключение NFS для создания каталогов клиентов на сервере. Надо заметить, что существует много способов, позволяющих добиться этого, в зависимости от вашего желания и возможностей. Если клиенты индивидуальны, и у каждой клиентской машины есть свой набор пользователей и администратор, то необходимо будет создать раздельные части клиентских каталогов, не разделенных с другими клиентскими точками. С другой стороны, если клиент предназначен для большого количества пользователей, и все они администрируются одним человеком (например, компьютерный класс), необходимо, чтобы наибольшее количество файлов были разделены для того, чтобы упростить администрирование. Этот документ сфокусирует свое внимание на втором варианте.


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

Когда мы будем создавать клиентский каталог, и попытаемся максимально уменьшить размер пространства на диске, используемого для клиентов, мы, в основном, займемся тем списком файлов, которые можно разделить , или подключить с сервера. В этом Howto я буду рекомендовать конфигурацию клиентов, базированную на моем личном опыте. Но перед началом запомните, что:

  • Этот документ не объяснит, как произвести корневое подключение NFS. Обращайтесь к мини-Howto "Корневые NFS", если вам нужна информация по этому вопросу.

  • Я основываю большую часть конфигурации моих клиентов на точках подключения и символьных ссылках. Большинство этих символьных ссылок могут быть заменены жесткими ссылками (hardlinks). Это вы будете выбирать для себя, по своему желанию. Использование жестких ссылок, вместо точек подключения и символьных ссылок, имеет свои преимущества, но может привести к недоразумениям. Файл не может быть удален, пока не удалятся все его жесткие ссылки. Таким образом, для того, чтобы предотвратить ситуацию, когда вы устанавливаете новую версию файла, а жесткие ссылки все еще указывают на старую версию, придется очень внимательно следить за каждой ссылкой, которую вы создаете.

  • При подключении каталогов сервера можно использовать два способа. Первый (наиболее часто встречающийся) - это подключать весь корневой каталог сервера в локальный каталог, а затем просто изменять путь или подключать туда отдельные каталоги. Мне лично не нравится подключать корневой каталог сервера на клиентах. Поэтому в этом документе предлагается путь подключения отдельных каталогов сервера на соответствующие места в системе клиента.

  • Этот документ основан на личном опыте построения клиентских каталогов в дистрибутиве Slackware версии 3.1. Некоторые вещи в других дистрибутивах могут различаться (особенно часть, касающаяся файлов rc.*), однако принципы должны остаться неизменными.


3. Создаем корневой каталог клиента

3.1. Создаем дерево каталогов

Первым делом надо создать саму структуру каталогов. Я создаю всех клиентов в каталоге /clients/имя_машины, я буду использовать это в примерах, приведенных ниже. Это, конечно, можно изменить на что-нибудь другое. Сначала создадим соответствующие каталоги в корневом каталоге клиента. Нужно создать следующие каталоги:

bin , dev , etc , home , lib , mnt , proc , sbin , server , tmp , usr , var

и другие, которые вы возможно захотите иметь в своей системе.

Каталоги local, proc, и dev будут использоваться отдельно на каждой машине, в то время как остальные каталоги будут частично или полностью с другими клиентами.


3.2. Создаем минимальную файловую систему, необходимую для загрузки

3.2.1. Создаем каталог dev.

Несмотря на то, что каталог dev может быть разделен, правильнее будет создать отдельный каталог для каждого клиента. Вы можете создать клиентский каталог dev при помощи соответствующего скрипта MAKEDEV, хотя, в большинстве случаев значительно проще скопировать его с сервера командой:

bash# cp -a /dev
/clients/hostname

Вы должны помнить, что /dev/mouse, /dev/cdrom и /dev/modem это символьные ссылки на настоящие устройства, поэтому необходимо убедиться в том, что они указывают на правильные устройства, в соответствии с конфигурацией клиентской машины.


3.2.2. Копируем необходимые исполняемые файлы.

Несмотря на то, что мы подключаем все с сервера, существует минимум, который необходимо скопировать каждому клиенту. Во-первых нам необходим "init", наша система не сможет ничего запустить до запуска "init" (это автор выяснил в результате долгих и мучительных поисков ;-). Итак, во-первых, вам надо скопировать файл /sbin/init в каталог sbin вашего клиента, и для того, чтобы заработал rc.S, надо скопировать /bin/sh в каталог bin клиента. Также для того, чтобы подключить все, что надо, скопируйте /sbin/mount в каталог sbin клиента. Это минимум, предполагающий, что первая строка в вашем файле rc.S содержит команду mount -av. Однако, я советую скопировать еще немного файлов: update, ls, rm, cp и umount, чтобы у вас был минимальный набор средств в том случае, если будут проблемы с подключением. Также, если вы решите оставить включение swap до подключения файловых систем, необходимо будет скопировать программу swapon.

Так как большинство этих программ по умолчанию созданы с использованием динамических связей, вам также будет нужна большая часть каталога /lib:

bash# cp -a /lib/ld* /lib/libc.*
/lib/libcursses.* /client/hostname/lib

Лучше будет создать жесткие ссылки на эти файлы, вместо их копирования. Прочтите комментарии к этому в разделе 2.1 этого Howto.

Заметьте также, что вся приведенная выше информация предполагает, что сетевые параметры передаются ядру при загрузке. Если вы планируете использовать rarp или bootp, то вам для этого, возможно, также понадобятся соответствующие программы.

В общем случае, вам понадобится минимум файлов, который позволит сконфигурировать сеть и запустить скрипт rc.S до точки, где он подключает остальную файловую систему. Убедитесь в том, что вы проверили файлы /etc/init и rc.S, и уверены, что там нет "сюрпризов", которые потребуют доступа к другим файлам до подключения файловых систем. Если таковые есть, найдите эти файлы и либо скопируйте их тоже, либо удалите соответствующие части файлов init и rc.S.


3.2.3. Каталог var

Каталог var, в большинстве случаев, должен быть уникален для каждого клиента. Однако, многое может быть разделено. Создайте в каталоге /server подкаталог var. Сюда мы подключим каталог /var сервера. Чтобы создать локальный каталог var, наберите:

bash# cp -a /var
/clients/hostname/

Теперь у вас есть выбор, что сделать отдельно для каждого клиента, а что сделать разделенным. Любой каталог файл, который вы хотите разделить между клиентами, удалите из клиентского каталога, и создайте для него символьную ссылку или на /server/var/, или на ../server/var, но НЕ НА /clients/hostname/server/var, так как это не будет работать, поскольку корень системы изменяется.

Обычно я советую создать для каждого клиента отдельные каталоги /var/run, /var/lock, /var/spool, и /var/log.


3.2.4. Остальные каталоги

  • etc подробно описывается в следующем разделе.

  • mnt и proc существуют для локальных целей.

  • usr и home - обычные точки подключения.

  • tmp - это решать вам. Вы можете создать отдельные каталоги tmp для каждого клиента или создать несколько каталогов /clients/tmp, и подключить их для каждого каталога в их /tmp. Я бы рекомендовал иметь для каждого клиента отдельный каталог tmp.


3.3. Создаем каталог etc и настраиваем клиентов

Замечание

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


3.3.2. Создаем клиентские каталоги etc

Несмотря на то, что мы создаем отдельные каталоги etc для каждого клиента, большинство файлов в них мы все-таки разделим между клиентами. Вообще, разделение файлов etc с каталогом /etc сервера - это плохая идея, поэтому я советую создать каталог /clients/etc, в котором будет информация, необходимая клиентам. Для начала просто скопируйте каталог /etc сервера в каталог /clients/etc.

Вы должны добавить в этот каталог все не-машинно-уникальные файлы конфигурации, например motd, issue , и т.п. и те файлы, которые одинаковы для всех клиентов.(т.е. inittab или fstab)

Наиболее важным изменениям подвергнется ваш каталог rc.d. Во-первых, вам надо будет изменить файл rc.inet1 для того, чтобы он соответствовал локальной настройке. Я передаю все мои сетевые параметры ядру через LILO/Loadlin, поэтому я почти все удалил из файла rc.inet1. Единственное, что я там оставил - это ifconfig и route для локальной машины. Если вы используете rarp или bootp, то придется настроить его соответственно.

Во-вторых, отредактируйте ваш файл rc.S. Сначала уберите оттуда все части, ответственные за проверку дисков fsck, так как fsck запускается при загрузке сервера. Затем найдите строки, в которых подключаются ваши файловые системы. Они должны выглядеть примерно так:

mount -avt nonfs

Ключ -t nonfs присутствует здесь потому, что обычные машины сначала запускают rc.S и только потом конфигурируют Ethernet в скрипте rc.inet1. Так как эта строка не подключает NFS-разделов, то ее можно удалить. Поменяйте ее на mount -av. Если вам надо запустить rarp/bootp для настройки сети, сделайте это в rc.S (или запустите соответствующий скрипт из rc.S) до команды mount и убедитесь в том, что ваши каталоги bin и sbin содержат все необходимые файлы.

После того, как выполнится команда mount -av, вы получите работоспособную файловую систему. Создайте общий fstab, чтобы скопировать его позднее каждому клиенту. Ваш файл fstab должен выглядеть примерно так:

Таблица 1. fstab

server:/clients/hostname/nfsdefault11
server:/bin/binnfsdefault11
server:/usr/usrnfsdefault11
server:/sbin/sbinnfsdefault11
erver:/home/homenfsdefault11
server:/lib/libnfsdefault11
server:/clients/etc/server/etcnfsdefault11
server:/clients/var/server/varnfsdefault11
none/procprocdefault11

Заметьте, что ключевое слово default может не работать в некоторых версиях команды mount. Вам возможно придется сменить его на rw или ro, или убрать все части default 1 1.

Также убедитесь, что ваш файл /etc/exports на сервере выглядит примерно так:

Таблица 2. /etc/exports

/clients/hostnamehostname.domainname(rw,no_root_squash)
/clients/etchostname.domainname(ro,no_root_squash)
/clients/varhostname.domainname(ro,no_root_squash)
/usrhostname.domainname(ro,no_root_squash)
/sbinhostname.domainname(ro,no_root_squash)
/binhostname.domainname(ro,no_root_squash)
/libhostname.domainname(ro,no_root_squash)
/homehostname.domainname(rw,no_root_squash)

В отличие от первой строки, которая должна быть отдельна для каждого хоста, остальные строки могут содержать маску хостов для того, чтобы использоваться для всех ваших машин (например, pc*.domain - однако помните, что * подходит для всех строк, не содержащих внутри себя точку). Я предполагаю, что вы сделаете большинство каталогов только для чтения, но это зависит от вас. Флаг no_root_squash указывает на то, что пользователи root на клиентских машинах будут иметь настоящие права root-а также и на nfsd. Читайте man exports(5). Если вы хотите, чтобы пользователи на клиентских машинах могли запускать passwd, убедитесь что каталог /etc имеет разрешение на запись. Однако, я бы этого вам не советовал.

Отметьте также еще одну вещь, касающуюся файла rc.S. В дистрибутиве Slackware по умолчанию файлы /etc/issue и /etc/motd создаются заново каждый раз, как система запускается. Эта функция ДОЛЖНА быть запрещена, если эти файлы подключаются в режиме "только для чтения" с сервера, я бы посоветовал отключить эту функцию в любом случае.

И последнее. Если вы хотите, чтобы на клиентской машине был тот же набор пользователей, что и на сервере, вы должны выбрать между 1) использованием NIS (Желтые Страницы - прочтите yp-howto), и поэтому у каждого клиента будут свои файлы /etc/passwd и /etc/group, так как он получает их с NIS-сервера. 2) В большинстве случаев, обычной символьной ссылки будет достаточно. Таким образом, вам придется сделать ссылку /clients/etc/passwd на файл /etc/passwd, жесткую или символьную - какую вы предпочитаете (и не как то по-другому, так как клиенты не подключают каталог /etc сервера). Проделайте то же самое для файла /etc/group.


3.3.3. Создаем каталог etc клиента

В общем случае, большинство файлов в каталогах etc клиентов будут представлять из себя символьные ссылки на соответствующие файлы в каталоге /server/etc. Однако, некоторые файлы различны для каждой машины, и некоторые просто должны быть там, пока загружается ядро. Минимум файлов, который вы должны иметь в клиентском каталоге etc приведен ниже:

resolv.conf
hosts
inittab
rc.d/rc.S
fstab

В то время, как эти 5 файлов могут быть одинаковыми у всех клиентов, вы можете создать жесткие ссылки или просто скопировать их. Однако, я рекомендую создать отдельные файлы rc.S и fstab для каждого клиента. Вам также может понадобиться отдельный файл etc/HOSTNAME для каждого клиента. Я лично советую иметь отдельные rc.d-файлы для каждого клиента, так как конфигурация и оборудование могут различаться.

Для каждого клиента добавьте в fstab соответствующую строку, касающуюся swap :

Таблица 3. fstab

/dev/swap_partitionswapswapdefault11

Остальные файлы каталога /etc клиента могут представлять из себя или жесткие ссылки на файлы /clients/etc* или символьные ссылки на файлы каталога /server/etc (который является точкой подключения каталога /clients/etc).

Убедитесь в том, что ваша машина правильно распознает (resolve) хосты, с помощью named или через etc/hosts. Не очень плохая идея - хранить IP-адрес сервера в файле etc/hosts, нежели полагаться на распознавание (resolving). Если вы будете полагаться только на named, проблема с named не даст загрузиться вашим клиентам.


3.4. Загрузка

Теперь, вы сделали все для того, чтобы ваша машина загрузилась, скрестите пальцы и надейтесь, что все будет работать так, как оно должно :-).


4. Создание дополнительных клиентов

Если вы следовали моим инструкциям, то все должно быть просто - зайдите в каталог /clients/ и наберите:


bash# cp -a hostname1 hostname2

и затем проверьте следующие точки:

Файлы rc.d/* соответствуют оборудованию и требуемой конфигурации программ, файл etc/HOSTNAME содержит правильную информацию, строка, касающаяся swap в файле fstab, заполнена правильно, символьные ссылки dev/mouse, dev/modem и dev/cdrom также верны.

Удачи....