Вопрос или проблема
Моя ошибка:
mount.nfs4: доступ запрещен сервером при попытке монтирования fileserver:/export/path/one
Мой вопрос:
где можно найти детальную информацию в логах на сервере (под управлением systemd)?
Дополнительная информация:
Я задал похожий вопрос с точки зрения клиента Ubuntu на AskUbuntu. В этом вопросе я сосредоточен на сервере Arch Linux. В частности, я ищу логи на сервере, которые помогут мне понять проблему.
Вот предыстория:
Наш маленький локальный сегмент сети работает на сервере файлов NFS v4 под управлением Arch Linux. У нас есть несколько клиентов на Ubuntu 15.10 и 16.04. У нас есть один клиент на Ubuntu 14.04. Клиент 14.04 не может подключиться к файловому серверу. Остальные подключаются без проблем. Настройки на всех клиентах одинаковы. И все клиенты перечислены в /etc/exports на сервере.
Мне нужно найти более детальную информацию об ошибках на сервере Arch Linux. Однако journalctl не показывает ничего, связанного с nfs, и не содержит записей, касающихся ошибок доступа nfs.
Клиент 14.04 может пинговать файловый сервер, а также входить по SSH. Имя пользователя / ID, а также группа совпадают. (Я использую одну и ту же учетную запись пользователя / uid как на клиенте, так и на сервере. Это uid 1000.)
Еще больше информации:
$ sudo mount -a (на клиенте)
mount.nfs4: доступ запрещен сервером при попытке монтирования fileserver:/export/path/one
mount.nfs4: доступ запрещен сервером при попытке монтирования fileserver:/export/path/two
Клиент может пинговать файловый сервер (и наоборот):
$ ping fileserver
PING fileserver (192.168.1.1) 56(84) байт данных.
64 байта от fileserver (192.168.1.1): icmp_seq=1 ttl=64 время=0.310 мс
Клиент успешно входит в файловый сервер, находящийся в локальной сети:
$ ssh fileserver
Последний вход: Вт Авг 16 14:38:26 2016 с 192.168.1.2
[me@fileserver ~]$
Экспорт монтирования файлового сервера и rpcinfo
доступны клиенту:
$ showmount -e fileserver # на клиенте
Список экспортов для fileserver:
/export/path/one/ 192.168.1.2
/export/path/two/ 192.168.1.2,192.168.1.3
$ rpcinfo -p fileserver (на клиенте)
программа версия протокол порт сервис
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 58344 status
100024 1 tcp 58561 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 4 tcp 2049 nfs
100003 4 udp 2049 nfs
Это ошибка при прямом монтировании экспорта:
$ sudo mount -vvv -t nfs4 fileserver:/export/path/one /path/one/
mount: fstab путь: "/etc/fstab"
mount: mtab путь: "/etc/mtab"
mount: lock путь: "/etc/mtab~"
mount: temp путь: "/etc/mtab.tmp"
mount: UID: 0
mount: eUID: 0
mount: spec: "fileserver:/export/path/one"
mount: node: "/path/one/"
mount: types: "nfs4"
mount: opts: "(null)"
mount: external mount: argv[0] = "/sbin/mount.nfs4"
mount: external mount: argv[1] = "fileserver:/export/path/one"
mount: external mount: argv[2] = "/path/one/"
mount: external mount: argv[3] = "-v"
mount: external mount: argv[4] = "-o"
mount: external mount: argv[5] = "rw"
mount.nfs4: тайм-аут установлен на Вт Авг 16 16:10:43 2016
mount.nfs4: пытаемся текстовые параметры 'addr=192.168.1.1,clientaddr=192.168.1.2'
mount.nfs4: mount(2): Доступ запрещен
mount.nfs4: доступ запрещен сервером при попытке монтирования fileserver:/export/path/one
Похоже, что основная проблема была решена @pgoetz, но для потомков я отвечу на оригинальный вопрос о том, как захватить логи NFS (у меня были аналогичные проблемы, но я тоже не мог найти ответ о логировании!).
Детализированное логирование как для NFS сервера, так и для его клиентов можно получить с помощью rpcdebug
, который будет генерировать журналы ядра (так что они будут отображаться, например, в /var/log/messages
, /var/log/syslog
и т.д., в зависимости от вашего дистрибутива).
Общая форма: rpcdebug -m [module] -s [flags]
:
-m [module]
: это указывает модуль для логирования. Это может бытьnfs
,nfsd
,rpc
илиnlm
— для общих логов NFS на сервере используйтеnfsd
; для общих логов NFS на клиенте используйтеnfs
-s [flags]
: это устанавливает флаг(и) отладки, которые вы хотите, чтобы ядро логировало. Доступные флаги зависят от модуля
(смотрите man rpcdebug
для получения дополнительной информации)
Таким образом, пример команд для начала логирования всех флагов может быть:
- NFS сервер:
rpcdebug -m nfsd -s all
- NFS клиенты:
rpcdebug -m nfs -s all
Примечание: это будет очень многословно. Флаги можно настроить, чтобы получить правильный уровень логирования, но начиная с флага all
можно помочь сузить проблему.
Для меньшего количества записей в логах уберите флаг all
, а затем установите конкретные флаги для отслеживания, например:
$ rpcdebug -m nfsd -c all # удалить все флаги, чтобы перестать их логировать
$ rpcdebug -m nfsd -s auth proc # установить флаги auth и proc вместо логирования всех флагов
У меня возникла точно такая же проблема, как на клиенте, так и на сервере Arch linux. Решение заключалось в использовании имени хоста в /etc/exports
вместо IP-адреса. Я изменил это:
/srv/nfs 192.168.10(rw,fsid=root,no_subtree_check)
/srv/nfs/media 192.168.10(rw,no_subtree_check)
/srv/nfs/share 192.168.10(rw,no_subtree_check)
На это:
/srv/nfs iguana(rw,fsid=root,no_subtree_check)
/srv/nfs/media iguana(rw,no_subtree_check)
/srv/nfs/share iguana(rw,no_subtree_check)
Это привело к немного другой проблеме:
[root@iguana data]# mount -t nfs4 frog:/srv/nfs/media /data/media
mount.nfs4: Протокол не поддерживается
У меня нет большого опыта работы с NFS4; по-видимому, вы не должны включать корневой путь NFS в команду монтирования. Это наконец сработало и смонтировало том:
[root@iguana data]# mount -t nfs4 frog:/media /data/media
rpc.mountd
– это компонент, отвечающий на запросы на монтирование, исходящие от ядра (NFSv4) или от клиентов (NFSv3). По умолчанию он ничего не логирует.
- Редактируйте
/etc/nfs.conf
→[mountd]
и установитеdebug="auth"
- Перезапустите
nfs-mountd.service
- Смотрите логи с помощью
journalctl -u nfs-mountd
Успешная операция монтирования будет логировать:
26 июл 18:59:41 rpc.mountd[44663]: успешная аутентификация для IP 192.0.2.4 как *
26 июл 18:59:41 rpc.mountd[44663]: клиент v4.2 подключен: 0xfd56f6df66a3f20b от "192.0.2.4:919"
26 июл 18:59:41 rpc.mountd[44663]: доступ предоставлен к / для *
26 июл 18:59:41 rpc.mountd[44663]: доступ предоставлен к /srv для *
26 июл 18:59:41 rpc.mountd[44663]: доступ предоставлен к /srv/data для *
Если rpc.mountd
отклоняет запрос на монтирование, то вы должны видеть причину, зафиксированную здесь.
Если вы хотите, чтобы IP-адреса регистрировались вместо имени клиента (*
в моем примере выше), установите cache-use-ipaddr=y
. В этом случае также имеет смысл установить ttl=3600
, чтобы клиент, который продолжает обращаться к файловой системе, не вызывал чрезмерного спама в файлах логов. В этом случае операции монтирования будут выглядеть так:
10 дек 15:11:41 rpc.mountd[1410]: успешная аутентификация для IP 192.0.2.4
10 дек 15:11:41 rpc.mountd[1410]: клиент v4.2 подключен: 0xa9f64fd5675739d6 от "192.0.2.4:717"
10 дек 15:11:41 rpc.mountd[1410]: доступ предоставлен к / для 192.0.2.4
10 дек 15:11:41 rpc.mountd[1410]: доступ предоставлен к /srv для 192.0.2.4
10 дек 15:11:41 rpc.mountd[1410]: доступ предоставлен к /srv/data для 192.0.2.4
Для получения более подробной информации об этих изменениях см. статью SUSE Улучшенное логирование доступа клиентов на NFS v4 сервере.
Ответ или решение
Логи NFS v4 на сервере под управлением systemd: где искать
При возникновении ошибки «mount.nfs4: access denied by server while mounting fileserver:/export/path/one» может быть полезно извлечь дополнительную информацию из логов на вашем NFS-сервере под управлением Arch Linux. В данной статье мы рассмотрим, как можно найти и настроить логи для анализа проблем с NFS.
Поиск логов в системе с использованием systemd
-
Использование
journalctl
: Система логирования в Arch Linux, базирующаяся на systemd, предоставляет доступ к журналам через командуjournalctl
. Вы можете получить доступ к логам, связанным с сервером NFS, выполнив такую команду:journalctl -u nfs-server.service
Однако, как вы уже упомянули, эта команда может не вывести ничего, если не включено соответствующее логирование на стороне сервера.
-
Активация подробного логирования:
Для того чтобы включить детальное логирование NFS, можно воспользоваться утилитойrpcdebug
. Эта утилита позволяет настраивать уровень логирования для модуля NFS.Пример команд для активации:
# Для настройки сервера NFS sudo rpcdebug -m nfsd -s all # Для настройки клиента NFS sudo rpcdebug -m nfs -s all
Примечание: Обратите внимание, что это может генерировать большое количество информации, поэтому рекомендуется после определения проблемы отключить избыточное логирование, следующим образом:
sudo rpcdebug -m nfsd -c all # отключить все флаги
Настройка rpc.mountd
для логирования аутентификации
Для того чтобы получить более подробную информацию о причинах отклонения запросов на монтирование, вы можете настроить rpc.mountd
:
-
Откройте файл конфигурации NFS:
sudo nano /etc/nfs.conf
-
Найдите секцию
[mountd]
и добавьте или измените строку:debug="auth"
-
После внесения изменений перезапустите службу:
sudo systemctl restart nfs-mountd.service
-
Теперь вы можете отслеживать логи для этой службы с помощью:
journalctl -u nfs-mountd.service
Анализ логов
При успешном запросе на монтирование вы должны увидеть что-то вроде:
Jul 26 18:59:41 rpc.mountd[44663]: successful authentication for IP 192.0.2.4 as *
Если запрос отклонен, вы увидите причину отказа.
Рекомендации по устранению проблем
-
Проверьте
/etc/exports
: Убедитесь, что настройки в файле/etc/exports
верны и ваш клиент правильно указан (например, используйте имя хоста вместо IP-адреса, как это было рассмотрено в ваших записях). -
Проверьте параметры аутентификации: Убедитесь, что идентификаторы пользователей и групп совпадают на клиенте и сервере. Также проверьте настройки NFS, включая параметры, такие как
fsid
и другие опции, которые могли повлиять на разрешение доступа. -
Убедитесь в доступности сетевых портов: Проверьте, что ваш брандмауэр или другие сетевые политики не блокируют необходимые порты для NFS (обычно 2049 для nfs и 111 для rpc).
Соблюдение этих рекомендаций и проверка логов помогут вам выявить и решить проблемы, возникающие при работе с NFS v4 на вашем сервере Arch Linux.