Сетевая файловая система (NFS)

NFS, the network file system, являетс я возможно наиболее видной   сетью услуг, использующей RPC. Это позволяет обращаться к файлам на   отдаленных хостах точно   тем же самым способом, как пользователь обратился бы к любым"   локальным файлам. Сделано возможным смешением kernel функциональных   возможностей на клиентской стороне (которая использует отдаленную файловую   систему) и NFS сервер на стороне сервера (который обеспечивает файл   данных). Этот доступ к файлу полностью очевиден  клиенту, и работает через   все разнообразие серверов и архитектуры хостов.
NFS предлагает ряд преимуществ:

  • Данные, к которым обращаются все пользователи, могут быть сохранены   на центральном хосте, с клиенами устанавливающими этот каталог при   начальной загрузке. Например, Вы можете сохранить все accounts   пользователей на одном хосте, и иметь все хосты на Вашем сетевом mount   /home от того хоста. Если оно установлено бок о бок с NIS, то  пользователи   могут затем войти в любую систему, и все еще работать на одном множестве   файлов.
  • Данные, потребляющие большие количества дискового пространства   могут быть сохранены в единственном хосте. Например, все файлы и программы   относящиеся к LaTeX и METAFONT могут быть сохранены и поддерживаться в   одном месте.
  • Административно-управленческая информация может быть сохранена в   адинственном хосте. Нет нужды использовать rcp для того, чтобы установить   тот же самый глупый файл на 20 различных машин.

Linux NFS - в значительной степени работа Rick Sladkey, (1), кто   написал NFS
kernel код и большие части NFS сервера. Последний,  выводил из unfsd   пространства пользователя NFS сервер, первоначально написанный Mark Shand,   и hnfs Harris NFS сервер, написанный Donald Becker.
Давайте теперь посмотрим том, как NFS работает: клиент может   запросить установить каталог от отдаленного хоста на локальном каталоге тем   же способом, и он может установить физическое устройство. Однако,   синтаксис, используемый для того, чтобы точно определить отличен ли
отдаленный каталог. Например, чтобы mount /home хост vlager к /users на   vale, администратор выпустил бы следующую команду на vale: (2)
"
1. Rick может быть найден в jrs@world.std.com.


# mount -t nfs vlager:/home /users
mount затем попробует соединиться с mountd, устанавленный с daemon на   vlager через RPC. Сервер проверит, разрешается ли vale повысить каталог, и   если так, вернет это  к file handle. Этот handle файл будет использоваться   во всех последовательных запросах к картотекам ниже /users.

Когда кто -то обращается к файлу над NFS, kernel места RPC вызовут   nfsd (NFS daemon) на машине сервера. Это обращение берет handle файл, имя   файла, к которому обращаются, и user's user и идентичность группы как   параметры. Они используются в определении прав доступа к точно   определенному файлу. Чтобы предотвратить от несанкционированного чтения или
модифицирования файла, пользователь и идентичность группы должны быть теме   же самыми на обоих хостах.   
На большинстве Un*x  реализаций, NFS функциональные возможности обоих   клиентов и сервер выполнены как kernel уровень daemons, которые начаты из   пространства пользователя при начальной загрузке системы. Они - NFS daemon   (nfsd) на хосте сервера, и  блок ввода - вывода Daemon (biod) выполняющийся   на клиентском хосте. Чтобы улучшить производительность, biod выполняет   асинхронный ввод - вывод, используя чтение - вперед и запись-назад; также,
несколько nfsd daemons обычно запускается совместно.   
NFS реализация Linux, немного отлична в этом самом клиентском коде,   крепко объединена в файловой системе (VFS) уровень ядра и не требует   дополнительного управления через biod. С другой стороны код сервера   запускается полностью в пространстве пользователя, так, чтобы при запуске  нескольких копий сервера в одно и то же время было бы почти невозможным из-   за синхронизации. Linux NFS, в настоящее время также существует отсутствие   чтения - вперед и записи назад, но Rick Sladkey планирует исправит этот   недостаток в ближайшее время. (3)


Проблема с Linux NFS кодом - то, что Linux kernel   версии 1.0 не способен распределить память в кусках больших чем 4k; как   следствие, сетевой код не может обрабатывать датаграммы большие чем   приблизительно 3500 байтов после вычитания размера заголовка и т.д. Это   значит, что передача к  и из NFS daemons выполняющейся на системах, которые   используют большие UDP датаграммы по умолчанию (например 8k на SunOS)
должны быть уменьшенны в размере искуственно. Этот причиняет вред
характеристике под влиянием некоторых обстоятельств. (4) Этот предел входит
в поздние Linux-1.1 ядра, и клиентский код был
модифицирован для того, чтобы пользоваться  этим преимуществом.

2. Заметьте, что Вы можете опустить -t nfs аргумент, потому что mount   видит из двоеточия то, что это определяет NFS объем.
3. Задача с write-behind - то, что kernel буфер кэша индексирован   парами device/inode, и следовательно не может использоваться для nfs-   установленных файловых систем.