Linux как отмонтировать nfs

Обновлено: 06.07.2024

Сетевая файловая система NFS или Network File System, это популярный протокол сетевой файловой системы, который позволяет пользователям подключать удаленные сетевые каталоги на своей машине и передавать файлы между серверами. Вы можете использовать дисковое пространство на другой машине для своих файлов и работать с файлами, расположенными на других серверах. По сути, это альтернатива общего доступа Windows для Linux, в отличие от Samba реализована на уровне ядра и работает более стабильно.

В этой статье будет рассмотрена установка NFS в Ubuntu. Мы разберем установку всех необходимых компонентов, настройку общей папки, а также подключение сетевых папок.

Немного теории

Как уже было сказано, NFS, это сетевая файловая система. Для работы необходим сервер, на котором будет размещена общая папка и клиенты, которые могут монтировать сетевую папку как обычный диск в системе. В отличие от других протоколов NFS предоставляет прозрачный доступ к удаленным файлам. Программы будут видеть файлы как в обычной файловой системе и работать с ними как с локальными файлами, nfs возвращает только запрашиваемую часть файла, вместо файла целиком, поэтому эта файловая система будет отлично работать в системах с быстрым интернетом или в локальной сети.

Установка компонентов NFS

Перед тем как мы сможем работать с NFS, нам придется установить несколько программ. На машину, которая будет сервером нужно установить пакет nfs-kernel-server, с помощью которого будет выполнено открытие шары nfs в ubuntu 16.04. Для этого выполните:

sudo apt install nfs-kernel-server

Теперь давайте проверим правильно ли установился сервер. Сервис NFS слушает соединения как для TCP, так и для UDP на порту 2049. Посмотреть действительно ли сейчас используются эти порты можно командой:

rpcinfo -p | grep nfs

nfs

Также важно проверить поддерживается ли NFS на уровне ядра:

cat /proc/filesystems | grep nfs

nfs1

Видим, что работает, но если нет, нужно вручную загрузить модуль ядра nfs:

Давайте еще добавим NFS в автозагрузку:

sudo systemctl enable nfs-server

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

sudo apt install nfs-common

Вот и все, дальше настройка NFS в Ubuntu.

Настройка сервера NFS в Ubuntu

Мы можем открыть NFS доступ к любой папке, но давайте создадим для этих целей новую:

sudo mkdir /var/nfs

Дальше нас интересует настройка ubuntu nfs server. Все общие папки и другие настройки nfs находятся в файле /etc/exports. Синтаксис записи папки такой:

адрес_папки клиент (опции)

Адрес папки - это та папка, которую нужно сделать доступной по сети. Клиент - ip адрес или адрес сети, из которой могут получить доступ к этой папке. А вот с опциями немного сложнее. Рассмотрим некоторые из них:

  • rw - разрешить чтение и запись в этой папке;
  • ro - разрешить только чтение;
  • sync - отвечать на следующие запросы только тогда, когда данные будут сохранены на диск (по умолчанию);
  • async - не блокировать подключения пока данные записываются на диск;
  • secure - использовать для соединения только порты ниже 1024;
  • insecure - использовать любые порты;
  • nohide - не скрывать поддиректории при, открытии доступа к нескольким директориям;
  • root_squash - подменять запросы от root на анонимные, используется по умолчанию;
  • no_root_squash - не подменять запросы от root на анонимные;
  • all_squash - превращать все запросы в анонимные;
  • subtree_check - проверять не пытается ли пользователь выйти за пределы экспортированной папки;
  • no_subtree_check - отключить проверку обращения к экспортированной папке, улучшает производительность, но снижает безопасность, можно использовать когда экспортируется раздел диска;
  • anonuid и anongid - указывает uid и gid для анонимного пользователя.

Например, для нашей папки, если вы хотите разрешить к ней подключаться только с определённого IP адреса, эта строка может выглядеть вот так:

sudo vi /etc/exports

Можно разрешить только нужную подсеть, например:

Для того чтобы разрешить все адреса используйте подсеть 0.0.0.0/0 или символ *.

Открытие шары NFS в Ubuntu почти завершено. Осталось разобраться с правами. Кроме ограничений IP адреса работает обычная система полномочий UNIX, поэтому если вы хотите чтобы определённый пользователь мог получить доступ к папке, то на сервере должен существовать пользователь с таким же UID и эта папка должна принадлежать ему или группе в которой он состоит.

Кроме того, обратите внимание на то, что все подключения от имени пользователя root считаются по умолчанию анонимными (nfsnobody), чтобы это отключить добавьте опцию монтирования no_root_squash, но это не безопасно, потому что любой root пользователь сможет получить доступ на запись ко всем файлам. Теперь попытаемся настроем клиента и попытаемся ее примонтировать.

Для того чтобы все пользователи могли получить доступ ко всем файлам можно создать пользователя с UID 1001 и попросить NFS все запросы считать запросами от анонимного пользователя, а анонимному пользователю присвоить UID 1001. Это делается такими опциями:

Когда все будет настроено, останется только обновить таблицу экспорта NFS:

sudo exportfs -a

Если на вашем сервере используется брандмауэр, то следует открыть порты 111 и 2049:

sudo ufw allow 111
sudo ufw allow 2049

Подключение NFS

Мы не будем подробно останавливаться на этом вопросе в сегодняшней статье. Это довольно большая тема, заслуживающая отдельной статьи. Но пару слов я все же скажу. Чтобы подключить сетевую папку вам не нужен никакой nfs клиент ubuntu, достаточно использовать команду mount:

sudo mount 127.0.0.1:/var/nfs/ /mnt/

Теперь вы можете попытаться создать файл в подключенной директории:

Также мы посмотрите подключенные файловые системы с помощью df:

127.0.0.1:/var/nfs 30G 6,7G 22G 24% /mnt

Чтобы отключить эту файловую систему достаточно использовать стандартный umount:

sudo umount /mnt/

Выводы

В этой статье была рассмотрена настройка NFS в Ubuntu 20.04, как видите, все делается очень просто и прозрачно. Подключение NFS шары выполняется в несколько кликов, с помощью стандартных команд, а открытие шары NFS ненамного сложнее подключения. Если у вас остались вопросы, пишите в комментариях!

В операционных системах Linux и UNIX вы можете использовать команду mount для подключения (монтирования) файловых систем и съемных устройств, таких как флэш-накопители USB, в определенной точке монтирования в дереве каталогов.

Команда umount отсоединяет (размонтирует) смонтированную файловую систему от дерева каталогов.

В этом руководстве мы рассмотрим основы подключения и отключения различных файловых систем с помощью команд mount и umount .

Как вывести список подключенных файловых систем

При использовании без аргументов команда mount отобразит все подключенные в данный момент файловые системы:

По умолчанию вывод будет включать все файловые системы, включая виртуальные, такие как cgroup, sysfs и другие. Каждая строка содержит информацию об имени устройства, каталоге, в который оно смонтировано, типе файловой системы и параметрах монтирования в следующей форме:

Чтобы отобразить только определенные файловые системы, используйте параметр -t .

Например, чтобы распечатать только разделы ext4, которые вы должны использовать:

Монтирование файловой системы

Чтобы смонтировать файловую систему в указанном месте (точке монтирования), используйте команду mount в следующей форме:

После присоединения файловой системы точка монтирования становится корневым каталогом смонтированной файловой системы.

Например, чтобы смонтировать файловую систему /dev/sdb1 каталог /mnt/media вы должны использовать:

Обычно при монтировании устройства с общей файловой системой, такой как ext4 или xfs команда mount автоматически определяет тип файловой системы. Однако некоторые файловые системы не распознаются и требуют явного указания.

Используйте параметр -t чтобы указать тип файловой системы:

Чтобы указать дополнительные параметры монтирования , используйте параметр -o :

Несколько вариантов могут быть представлены в виде списка, разделенного запятыми (не вставляйте пробел после запятой).

Вы можете получить список всех вариантов монтирования, набрав в терминале man mount .

Монтирование файловой системы с помощью / etc / fstab

Предоставляя только один параметр (каталог или устройство) команде mount , она будет читать содержимое файла конфигурации /etc/fstab чтобы проверить, указана ли указанная файловая система в списке или нет.

Если /etc/fstab содержит информацию о данной файловой системе, команда mount использует значение другого параметра и параметры монтирования, указанные в fstab .

Файл /etc/fstab содержит список записей в следующем виде:

Используйте команду mount в одной из следующих форм, чтобы присоединить файловую систему, указанную в /etc/fstab :

Установка USB-накопителя

В большинстве современных дистрибутивов Linux, таких как Ubuntu, USB-накопители автоматически монтируются, когда вы их вставляете, но иногда вам может потребоваться вручную смонтировать диск.

Чтобы вручную подключить USB-устройство, выполните следующие действия:

Создайте точку монтирования:

Предполагая, что USB-накопитель использует устройство /dev/sdd1 вы можете /dev/sdd1 его к каталогу /media/usb , набрав:

Чтобы узнать тип устройства и файловой системы, вы можете использовать любую из следующих команд:

Чтобы смонтировать USB-накопители в формате exFAT, установите бесплатный модуль и инструменты FUSE exFAT .

Монтирование файлов ISO

Вы можете смонтировать файл ISO с помощью устройства loop, которое представляет собой специальное псевдоустройство, которое делает файл доступным как блочное устройство.

Начните с создания точки монтирования, это может быть любое место, которое вы хотите:

Подключите ISO-файл к точке монтирования, введя следующую команду:

Не забудьте заменить /path/to/image.iso путем к вашему файлу ISO.

Монтирование NFS

Чтобы смонтировать общий ресурс NFS, в вашей системе должен быть установлен клиентский пакет NFS.

Установите клиент NFS в Ubuntu и Debian:

Установите клиент NFS на CentOS и Fedora:

Выполните следующие действия, чтобы смонтировать удаленный каталог NFS в вашей системе:

Создайте каталог, который будет точкой монтирования для удаленной файловой системы:

Как правило, вам нужно автоматически монтировать удаленный общий ресурс NFS при загрузке. Для этого откройте файл /etc/fstab текстовом редакторе :

Добавьте в файл следующую строку, заменив remote.server:/dir IP-адресом сервера NFS или именем хоста и экспортированным каталогом:

Подключите общий ресурс NFS, выполнив следующую команду:

Отключение файловой системы

Чтобы отсоединить смонтированную файловую систему, используйте команду umount после которой укажите либо каталог, в котором она была смонтирована (точка монтирования), либо имя устройства:

Если файловая система используется, команда umount не сможет отсоединить файловую систему. В таких ситуациях вы можете использовать команду fuser чтобы узнать, какие процессы обращаются к файловой системе:

Как только вы определите процессы, вы можете остановить их и размонтировать файловую систему.

Ленивое отключение

Используйте параметр -l ( --lazy ), чтобы отключить занятую файловую систему, как только она больше не будет занята.

Размонтировать принудительно

Используйте параметр -f ( --force ), чтобы принудительно размонтировать. Этот параметр обычно используется для отключения недоступной системы NFS.

Обычно не рекомендуется принудительное отключение, так как это может повредить данные в файловой системе.

Выводы

К настоящему времени вы должны хорошо понимать, как использовать команду mount для присоединения различных файловых систем к вашему дереву каталогов и отсоединения монтирования с помощью команды umount .

Чтобы узнать больше о параметрах команд mount и umount , см. Соответствующие страницы руководства.


Network File System (NFS), протокол сетевого доступа к файловым системам, является прекрасным изобретением. В мире Unix это стандартное решение задачи подключения файловой системы с одной операционной системы на другую. Раздающая операционная система называется сервером. Принимающая, в данном случае монтирующая, сторона - это клиент. Когда сервер и клиент настроены должным образом, взаимодействие протекает прекрасно. Причем, для клиента файловая система часто ничем не отличается от локальной.
Даже в Windows можно активировать поддержку этого протокола.

Наверное из-за такой прозрачной интеграции часто возникают коллизии и недопонимания при настройке NFS. Помните, я писал про важность синхронизации времени на сервере и клиенте?

В конце прошлого года я столкнулся с ещё одной интересной ситуацией. Эта интересная ситуация лишила меня покоя на 3 дня. :) Сейчас всё расскажу по порядку.

Сервер, работающий на операционной системе HP-UX 11.11. Версия старая, согласен, но работает хорошо. И, как говорится, что есть, с тем и работаем. Так вот, данный сервер, в разрезе NFS является сервером, раздавая часть своих файловых систем для других систем, и одновременно клиентом, монтируя пару файловых систем по протоколу NFS с других серверов.

В один момент времени один из серверов, файловую систему с которого наш герой монтировал, пропал. За сервер отвечает третья сторона, поэтому причины падения я не знаю. Но сервер с HP-UX повёл себя следующим образом. Файловая система просто "зависла". Зависали любые попытки перейти в директорию, которая является точкой монтирования злополучной NFS файловой системы, операции-попытки прочитать таблицу файловых систем (команда bdf ), команды просмотра содержимого файловой системы и тому подобное.

Команда umount файловой системы не проходила, отвечая, что файловая система "занята" процессами системы: " nfs umount: nfs_unmount: /path: is busy ".

Все вы знаете, наверное, команду fuser, которая показывает список процессов, которые держат файлы файловой системы. Так вот, эта команда с опцией, в которой я указывал точку монтирования тоже жестко зависала. Таким образом, я плодил процессы, которые держали файловую систему.

Зная, что команды bdf, fuser висят по моей вине, я нашёл их в таблице процессов командой вида:

Все они стали сиротами, то есть родительский процесс у них заменился процессом init: PPID=1.

Но на моё удивление, попытки послать им команды останова вида:

ни к чему не приводили. Они продолжали сиротливо висеть в таблице процессов, дополнительно удерживая злополучную файловую систему.

При этом, команды ping на сервер проходят, команда вида:

где 2049 это NFS порт, отрабатывает корректно. Даже команда запроса экспортируемых файловых систем с NFS сервера ( showmount -e IP_NFS_server ) отрабатывает! А попытка выполнить монтирование этой файловой системы во временную точку монтирования (/tmp/tmp2) не удаётся! (рис. 1).


Рис. 1. Попытки достучаться до NFS-сервера.

Не верить специалистам третьей стороны у меня причин не было. Занимаясь поиском путей решения на специализированных форумах в Интернете, я всё больше и больше убеждался, что проблема в HP-UX, то есть в NFS клиенте.

Выбрав период, когда я смогу устроить небольшой downtime для монтируемых по NFS файловых систем, я решил попробовать рестарт демонов nfs.client. Демон остановился и стартовал корректно, но отмонтировать данную файловую систему не смог. " nfs umount: nfs_unmount: /path: is busy " - ответила система. :) Рестартовать все NFS-процессы (серверные и клиентские) я не мог из-за использования текущего сервера, как NFS-сервера.

На форумах я узнал, что самое часторекомендуемое простое решение - это выполнить reboot сервера NFS клиента. Но это было крайне нежелательно для данной системы, и на это я пойти пока не мог.

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

А команде fuser надо в качестве аргумента давать не локальную точку монтирования, а путь до NFS сервера + директорию:

Такой вариант команды fuser у меня не зависал, отрабатывал, но ни одного процесса не находил. Да, и по предыдущему опыту я знал, что спящие процессы сигналы от команды kill не принимают.

Замкнутый круг. Примерная картина мне была понятна, но решения не было. Я всё больше и больше с тяжёлым сердцем думал о перезагрузке всей операционной системы.

Чтобы еще раз исключить проблемы с NFS сервером, я попытался выполнить временное монтирование нужной мне файловой системы на другой сервер. Попытка удалась. То есть всё сводилось к тому, что проблема на конкретном сервере.

Знаете пословицу: одна голова хорошо, а две лучше? Иногда одна лишь попытка описать проблему, систематизировав все симптомы, помогает. Но чаще, другой человек, со своим свежим взглядом на то, над чем ты бьёшься несколько дней, задаёт новые вопросы, предлагает новые пути решения, а иногда и даёт готовое решение. В этой ситуации для меня стал таким человеком мой коллега (Сергей Шевелёв). Готового решения он мне не дал, но нашел для меня документ "Forcible Unmount NFS filesystems", в котором была описана моя проблема и пути решения.

  1. Применять команду fuser не на точку монтирования, а на NFS-путь, о чём я писал выше.
  2. Иногда бывает достаточно несколько минут подождать, пока процессы остановятся по timeout и отпустят файловую систему.
  3. Создать временный суррогатный NFS сервер, чтобы процессы, которые держат файловую систему получили отклик и остановились с ошибкой.
  1. Необходимо определить IP адрес NFS сервера, который упал. Для этого смотрим вывод команды mount -v , а потом nslookup NFS_server_hostname .
  2. Находим сервер, на котором поднят nfs.server и смотрим доступные сетевые интерфейсы командой netstat -in . В идеале можно использовать сервер, который является NFS клиентом.
  3. На интерфейсе, который входит в ту же сеть, что и пропавший NFS сервер, поднять суррогатный сервер, выполнив команду вида: ifconfig lanX:1 IP_NFS_server . Здесь lanX - название необходимого сетевого интерфейса, а "1" - второй IP адрес на этом интерфейсе.
  4. Пробуем размонтировать файловую систему, дав если придётся, небольшой timeout процессам, которые удерживают файловую систему.
  5. После успешного отмонтирования файловой системы, удаляем суррогатный NFS-сервер, командой вида: ifconfig lanX:1 0.0.0.0 .

И я смог вздохнуть с облегчением, удалив суррогатный сервер.

Спустя какой-то период времени файловая система настоящего NFS-сервера корректно примонтировалась, то есть операционная система увидела его, выйдя из заколдованного круга.

и добавляем в конец файла строки вида (строк может быть произвольное количество):

/data –путь к папке, для которой раздается доступ;

192.168.1.1 –IP-адрес, которому раздается доступ к папке(можно указать всю сеть, тогда запись примет вид 192.168.1.0/24)

(rw,no_root_squash,sync) –набор опций, опции могут быть:

rw –чтение запись(может принимать значение ro-только чтение);

no_root_squash –по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать;

nohide - NFS автоматически не показывает нелокальные ресурсы (например, примонтированые с помощью mount –bind), эта опция включает отображение таких ресурсов;

sync – синхронный режим доступа(может принимать обратное значение- async). sync (async) - указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря данных;

noaccess – запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.

FIXME

Необходимо добавить описание опций.

all_squash– подразумевает, что все подключения будут выполнятся от анонимного пользователя

subtree_check (no_subtree_check)- в некоторых случаях приходится экспортировать не весь раздел, а лишь его часть. При этом сервер NFS должен выполнять дополнительную проверку обращений клиентов, чтобы убедиться в том, что они предпринимают попытку доступа лишь к файлам, находящимся в соответствующих подкаталогах. Такой контроль поддерева (subtree checks) несколько замедляет взаимодействие с клиентами, но если отказаться от него, могут возникнуть проблемы с безопасностью системы. Отменить контроль поддерева можно с помощью опции no_subtree_check. Опция subtree_check, включающая такой контроль, предполагается по умолчанию. Контроль поддерева можно не выполнять в том случае, если экспортируемый каталог совпадает с разделом диска;

anonuid=1000– привязывает анонимного пользователя к «местному» пользователю;

anongid=1000– привязывает анонимного пользователя к группе «местного» пользователя.

Под «местным» пользователем понимается пользователь, который будет осуществлять запись в файлы (запускать приложения, скачивающие файлы и т.д.), поэтому значение 1000 может отличаться от вашего. Для определения uid пользователя воспользуйтесь командой

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

Для монтирования сетевой папки необходимо создать папку на локальном компьютере:

Для монтирования папки вручную необходимо выполнить в терминале команду:

Следует помнить, что, как в настройках сервера, так и в настройках клиента при монтировании, путь к общему каталогу указывается полный. Данный пример показывает, что каталог /data находится в корне файловой системы.

Монтирование с записью в fstab

Для большего удобства можно добавить запись с сетевой папкой в fstab. Целесообразно создать точку монтирования сетевой папки в /media, потому что каталоги, созданные там, будут отображаться в Nautilus в левой колонке, монтировать их можно будет одним кликом.

В файл /etc/fstab добавляем подобную запись:

опция «noauto» запрещает автоматическое монтирование сетевого диска при старте системы.

Проблемы

Использование на ноутбуке

Монтирование с помощью autofs

Данный способ монтирования позволяет автоматически монтировать папку после обращения к ней в наутилусе (к примеру, через закладки) или в терминале:

и автоматически отмонтировать при отсутствии активности.

Установка

Для реализации данного способа необходимо доустановить пакет autofs :

Настройка

Для настройки autofs в файле /etc/auto.master необходимо добавить строку

Здесь –timeout=60 указывает отмонтировать раздел при отсутствии активности на нём более чем 60 секунд. Создаем в корне файловой системы папку /nfs :

В файле /etc/auto.nfs добавляем строку

-rw,soft,intr,rsize=8192,wsize=8192 – параметры монтирования;

server – папка, которая будет создаваться в каталоге /nfs при монтировании удаленных папок;

192.168.1.2:/path_to_share– IP-адрес и общая папка сервера.

Перезапускаем службу autofs :

Проблемы

Недоступность удаленного сервера

Если сеть с сервером NFS недоступна, возможна большая задержка (по умолчанию 3 минуты) при открытии nautilus, в закладках которого находится примонтированная удаленная папка NFS.
Для решения этой проблемы необходимо уменьшить время ожидания монтирования autofs, для этого в файле /etc/default/autofs необходимо раскомментировать или добавить следующие строки:

После этого autofs будет пытаться примонтировать удаленную папку только 10 секунд.

FIXME

Проблемы с гибернацией или выключением

Для диагностирования смотрим лог dmesg, возможный вывод:

Причина №1: пакет NFS

Причиной данной проблемы является скрипт прерывания работы NetworkManager, необходимо запретить его выполнение переименовав его:

Причина №2: пакет updatedb.mloc

Читайте также: