Система (сервер Ubuntu 18.04 LTS) экспортирует каталог для NFS, монтирующегося системами B, C, или D. На (сервер) там способ сказать, монтировалась ли какая-либо из других систем в настоящее время каталог?
Цель состоит в том, чтобы не закрываться, если какой-либо из B, C, или D смонтировал экспортируемый каталог.
Автоматизированный (заданная сценарием оболочка) средства выполнения так были бы идеальны, но ручной в порядке.
Нет никакого прямого NFS utils (обеспечен nfs-utils
) для списка клиентов, подключенных к серверу NFS (монтирует экспортируемые каталоги).
Однако, если NFSv4 используется на серверных клиентах NFS, может легко быть определен с помощью ss
или netstat
, потому что он использует только 1 порт 2049 и для UDP и для TCP:
Примеры
netstat -naptule | grep :2049
root@n54l:~# exportfs -rav
exporting 192.168.1.0/24:/srv/oops
root@n54l:~# netstat -naptule | grep :2049
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN 0 32620 -
tcp 0 0 192.168.1.123:2049 192.168.1.150:730 ESTABLISHED 0 94689 -
tcp6 0 0 :::2049 :::* LISTEN 0 32631 -
ss -tuna | grep :2049
root@n54l:~# ss -tuna | grep :2049
tcp LISTEN 0 64 0.0.0.0:2049 0.0.0.0:*
tcp ESTAB 0 0 192.168.1.123:2049 192.168.1.150:730
tcp LISTEN 0 64 [::]:2049 [::]:*
Мы видим сервер NFS 192.168.1.123, был 1 клиент 192.168.1.150 соединенных к нему.
Комбинация любой команды с обработкой текста (grep, сокращение, awk, sed, и т.д.) может собрать сценарий оболочки для достижения того, что Вы хотите непринужденно.
ПРИМЕЧАНИЕ:
nfsstat
иnfsiostat
(сторона клиента) может обеспечить некоторое понимание, но результаты/статистика не являются прямыми.
Вот простой сценарий, который выполняет мою миссию. Еще раз спасибо Терри Вангу. Сценарий, вызывающий это, входит в постоянный цикл «do», который пытается shutown и засыпает на несколько минут.
#!/bin/bash
# Check for open Samba share.
# All shares are named "share" something,
# so grep for "share" is usable
smbstatus | grep -i share > /dev/nul
samba=$?
# Check for open NFS mount.
# Grep for port 2049, then
# grep that for "ESTAB"
netstat -naptule | grep :2049 | grep ESTAB > /dev/nul
nfs=$?
# If either came back zero, something is active.
if [[ $samba != 0 && $nfs != 0 ]]; then
shutdown -h now
fi