Сетевой доступ к файлам (NFS) — это протокол, используемый для обмена файлами и каталогами между компьютерами в сети. NFS полезен, когда необходимо быстро предоставить общий доступ к большому количеству файлов на многих устройствах. После настройки на файловом сервере любой компьютер в сети, на котором установлены клиентские службы, может подключаться к серверу NFS и получать доступ ко всем файлам и каталогам. На клиентском компьютере диск NFS монтируется так же, как локальный диск, что упрощает пользователям навигацию.
Однако пользователи получают доступ к тем же файлам, хранящимся на диске NFS, а не к копиям, что означает, что изменения, внесенные в файл на диске NFS, также изменят оригинал на сервере NFS. Пользователи должны помнить о последствиях, прежде чем вносить изменения.
В этой статье мы исследуем преимущества NFS, а также конкретные варианты использования. Мы также рассмотрим распространенные проблемы, связанные с NFS, и способы их решения с помощью специальных команд Linux.
NFS обычно используется для совместного использования больших файлов или большого объема файлов между несколькими компьютерами в сети.
Например, редакторы на производстве совместно используют большие видеофайлы. Размер одного файла может составлять сотни гигабайт, и над ним работают несколько сотрудников. Сложно не только предоставлять доступ к таким большим файлам каждому редактору, но и хранить их локально на каждом компьютере, что может привести к чрезвычайно высоким затратам на хранение. Однако наличие централизованного хранилища может значительно снизить расходы.
Плата за лицензирование профессиональных приложений для каждого компьютера также может увеличить расходы. Установка этих приложений на сервер NFS позволяет нескольким пользователям получать удаленный доступ к приложению с одной и той же лицензией, тем самым снижая затраты.
Другой распространенный пример — совместное использование учебных материалов и ресурсов в классе или лаборатории. Используя NFS, школа может загружать ресурсы в одно центральное местоположение. Это упрощает доступ студентов и преподавателей к ним через их персональные компьютеры, как если бы ресурсы присутствовали локально.
Поскольку NFS работает с несколькими технологиями и средами, не имеет значения, в какой среде работает клиент, главное, чтобы он мог получить доступ к серверу NFS. Это упрощает настройку рабочих процессов разнородным образом.
Несмотря на широкое использование и преимущества, при использовании NFS часто возникают проблемы. Давайте рассмотрим некоторые из наиболее распространенных проблем и способы их устранения.
Клиент использует удаленные вызовы процедур (RPC) для связи с сервером NFS. Для этого требуется установленное соединение и функциональные пути подключения от клиента к серверу и от сервера обратно к клиенту. Разрыв этого соединения или путей приведет к ошибке «server not responding».
В таких случаях для проверки того, где прерываются соединения, можно использовать обычные команды Linux, такие как ping, traceroute, и tracepath. Эти команды отслеживают RPC от клиента к серверу. Если ни одна из команд не предоставляет полезной информации для отладки, может помочь проверка сетевой интерфейсной платы. Для этого можно использовать команды ifconfig и ethtool.
Даже если физическое подключение к серверу установлено и работает, может появиться ошибка «server not responding», если сервер не может отвечать на запросы клиента. Обычно это происходит, когда сервер перегружен и не может ответить в течение настроенного интервала ожидания. Увеличение времени ожидания должно устранить проблему, но долгосрочное решение будет включать либо масштабирование сервера, либо поиск способа снизить нагрузку.
Ошибка «no route to host» сигнализирует о том, что брандмауэр блокирует соединение. Брандмауэр может быть либо на сервере, либо на стороне клиента. Эта проблема обычно возникает, когда клиент пытается смонтировать файловую систему NFS, а брандмауэр блокирует их.
По умолчанию NFS использует порт 2049 для связи между клиентами и серверами, поэтому важно убедиться, что все настроенные брандмауэры разрешают трафик по этому порту. Отключите брандмауэр как на сервере, так и на стороне клиента и повторно смонтируйте файловую систему для проверки ошибок. Вы можете легко отключить брандмауэры, остановив iptables с помощью команды ниже:
service iptables stop
Если при выключенном брандмауэре все идет хорошо, вы можете сначала снова включить брандмауэр для сервера или клиента, проверить, все ли работает должным образом, а затем включить другой брандмауэр. Если брандмауэр не настроен так, чтобы разрешить клиенту подключаться к серверу NFS через указанный порт, соединение может снова завершиться сбоем, поэтому убедитесь, что брандмауэр настроен правильно.
Для правильной работы NFS как на сервере, так и на клиенте должны быть запущены служба NFS и средство сопоставления портов. Если средство сопоставления портов не работает или настроено неправильно, вы получите это сообщение об ошибке.
Проверить, запущены ли эти службы и прослушивают ли они запросы на ожидаемом порту, довольно просто. Вот команда для использования:
rpcinfo -p
Эта команда предоставит информацию о версии программы, используемом протоколе, порту и самой службе.
Другой способ проверить, запущена ли служба сопоставления портов, — это получить статус службы. Эту команду следует использовать:
service portmap status
Здесь portmap указано название службы. Если служба не запущена, ее запуск должен устранить проблему с RPC. Команда для запуска службы сопоставления портов:
chkconfig portmap on
Программы, работающие с файлами на диске или каталоге, подключенном к NFS, получают доступ к этим файлам так же, как к любому локальному файлу — с помощью команды open(2). Эта команда возвращает дескриптор файла или файловый дескриптор. Однако, в отличие от локальных файлов, при удалении файла каталога NFS команда open(2) не создаст файл, поскольку NFS не поддерживает эту функцию.
Когда программа пытается открыть файл, удаленный в NFS, выдается ошибка «устаревший дескриптор файла».
Вот простое исправление: либо размонтируйте файловую систему и смонтируйте ее заново, либо завершите процесс, который пытается получить доступ к файлу.
Ошибка «access denied» отображается, когда у клиента нет разрешений на экспорт в файловую систему NFS.
Единственный способ исправить это — настроить разрешения на экспорт, используя одну из этих двух команд:
showmount -e
или
exportfs -a
Распространенной ошибкой, приводящей к этой ошибке, является дополнительный пробел в конфигурации разрешений на экспорт. Например, обратите внимание на дополнительный пробел между * и (ro) в конфигурации ниже:
/nfs/data * (ro)
Это дополнительное пространство не дает разрешения на чтение предполагаемому клиенту, а скорее дает доступ всем пользователям, чего здесь нет. Удаление этого пространства устранит проблему с разрешениями:
/nfs/data *(ro)
Файл /etc/exports на сервере NFS содержит конфигурацию разрешений. Проверка этого файла на наличие любых подобных проблем и их исправление также должны решить проблему с отказом в разрешении.
Эта ошибка обычно появляется при настройке новой системы NFS. Ошибка «RPC timed out» выдается, когда сеть не может разрешить DNS для сервера NFS.
Команды nfsstat и nfsiostat могут использоваться для выявления проблем с NFS и их упреждающего устранения до того, как они создадут проблемы. Эти команды являются частью nfs-utils пакета.
Эта команда позволяет вам проверить статистическую информацию служб NFS и RPC. Существуют опции как для сервера, так и для клиента. Опция s предназначена для сервера; она предоставляет количество сбойных вызовов или некорректных RPC-вызовов, полученных сервером за определенный период времени. Если это число больше нуля, следует проверить базовую сеть на наличие проблем.
Опция c, для клиента предоставляет такую информацию, как retrans метрика, показатель запросов на повторную передачу, полученных клиентом от сервера. Значительно большое количество запросов на повторную передачу означает, что вам необходимо отрегулировать размер буфера передачи данных.
Вы можете использовать эту команду, чтобы понять производительность ввода-вывода дисков NFS, установленных на клиентских компьютерах. Она использует данные из файла /proc/self/mountstats для отображения статистики. Из всей информации, отображаемой этой командой, особенно важны две: retrans и avg RTT.
Показатель повторной передачи аналогичен показанному командой nfsstat. Метрика avg RTT измеряет время, прошедшее с момента отправки клиентом RPC-запроса до получения ответа от сервера. Высокое среднее (в миллисекундах) время перехода туда и обратно указывает на наличие задержки в сети между клиентом и сервером, что влияет на производительность. Это потребовало бы более глубокого анализа сети.
NFS — это очень полезный инструмент для обмена файлами и каталогами по сети, позволяющий пользователям получать доступ к общим файлам аналогично тому, как они получали бы доступ к локально сохраненным файлам. Более того, это способствует сотрудничеству между членами команды.
Несмотря на свои преимущества, NFS, как и другие инструменты, имеет свой набор проблем. Понимание каждой ошибки и умение быстро их отлаживать может предотвратить значительное время простоя.
Вы также можете использовать приведенные выше команды, чтобы понять производительность вашей базовой сети и самой службы NFS, тем самым предотвращая ряд проблем. Эти команды позволяют вам активно обслуживать службы NFS.