前文
毎回トラブルが発生する度に、どのコマンドで何を確認するんだっけ? と右往左往するので備忘録として手順を残す。
動作確認環境
- NFSサーバ
Raspberry Pi2B
pi@raspberrypi2:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.13 (stretch)
Release: 9.13
Codename: stretch
pi@raspberrypi2:~ $ uname -a
Linux raspberrypi2 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux
pi@raspberrypi2:~ $
NFS共有ディレクトリ(USB-HDD)。
pi@raspberrypi2:~ $ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
(中略)
/dev/sdc2 7.3T 5.5T 1.9T 75% /media/pi/****03
/dev/sdb2 7.3T 3.3T 4.1T 45% /media/pi/****02
/dev/sda2 7.3T 2.1T 5.3T 29% /media/pi/****01
/dev/sdd2 7.3T 2.9T 4.5T 39% /media/pi/****04
pi@raspberrypi2:~ $
- NFSクライアント
Raspberry Pi4B
pi@raspberrypi4:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64 GNU/Linux
pi@raspberrypi4:~ $
マウントポイント。
pi@raspberrypi4:~ $ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
(中略)
192.168.11.101:/media/pi/****01 7.3T 2.1T 5.3T 29% /mnt/nfs/****01
192.168.11.101:/media/pi/****02 7.3T 3.3T 4.1T 45% /mnt/nfs/****02
192.168.11.101:/media/pi/****03 7.3T 5.5T 1.9T 75% /mnt/nfs/****03
192.168.11.101:/media/pi/****04 7.3T 2.9T 4.5T 39% /mnt/nfs/****04
pi@raspberrypi4:~ $
Raspberry Pi2b に USB-HDD を接続し NFS で共有、NAS化。それを他の Pi から NFS接続している。
サーバ側確認ポイント
1. サービス確認
sudo systemctl status nfs-kernel-server
でサービスの状態を確認。正常なら以下。
pi@raspberrypi2:~ $ sudo systemctl status nfs-kernel-server
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
Active: active (exited) since Sun 2022-02-27 09:19:13 JST; 36min ago
Process: 10097 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
Process: 10094 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
Process: 10091 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
Process: 10115 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 10112 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 10115 (code=exited, status=0/SUCCESS)
2月 27 09:19:13 raspberrypi2 systemd[1]: Starting NFS server and services...
2月 27 09:19:13 raspberrypi2 systemd[1]: Started NFS server and services.
pi@raspberrypi2:~ $
停止している場合は、sudo systemctl start nfs-kernel-server
で開始、エラーが発生している場合はsudo systemctl restart nfs-kernel-server
でサービス再起動。
再度状態確認。改善されない場合は Pi を再起動。それでも改善されない場合は以下の設定確認。
2. エクスポート確認
sudo exportfs
またはshowmount -e
でエクスポートの確認。正常なら以下。
pi@raspberrypi2:~ $ sudo exportfs
/media/pi/****01
192.168.11.0/24
/media/pi/****02
192.168.11.0/24
/media/pi/****03
192.168.11.0/24
/media/pi/****04
192.168.11.0/24
pi@raspberrypi2:~ $
pi@raspberrypi2:~ $ showmount -e
Export list for raspberrypi2:
/media/pi/****04 192.168.11.0/24
/media/pi/****03 192.168.11.0/24
/media/pi/****02 192.168.11.0/24
/media/pi/****01 192.168.11.0/24
pi@raspberrypi2:~ $
showmount -a
なら接続しているクライアントも表示。
pi@raspberrypi2:~ $ showmount -a
All mount points on raspberrypi2:
192.168.11.110:/media/pi/****05
192.168.11.110:/media/pi/****03
192.168.11.110:/media/pi/****04
192.168.11.113:/media/pi/****05
192.168.11.113:/media/pi/****01
192.168.11.113:/media/pi/****02
192.168.11.113:/media/pi/****03
192.168.11.113:/media/pi/****04
192.168.11.116:/media/pi/****05
192.168.11.116:/media/pi/****01
192.168.11.116:/media/pi/****03
192.168.11.116:/media/pi/****04
192.168.11.9:/media/pi/****05
192.168.11.9:/media/pi/****03
pi@raspberrypi2:~ $
あれれ? 過去に接続したクライアントや過去に共有していたディレクトリの情報まで表示されている。
ゴミが残ることがあるらしい。気持ち悪い。これってどこかに情報が記録されているってことだよね。どこだろう。ぐぐっても中々情報が見つからなかったが、やっと以下に辿り着いた。
ふむふむ。/var/lib/nfs/rmtab
を確認。確かにこれだね。
pi@raspberrypi2:~ $ cat /var/lib/nfs/rmtab
192.168.11.116:/media/pi/****01:0x0000000d
192.168.11.116:/media/pi/****05:0x00000015
192.168.11.9:/media/pi/****05:0x00000001
192.168.11.9:/media/pi/****03:0x00000029
192.168.11.110:/media/pi/****03:0x00000003
192.168.11.110:/media/pi/****05:0x00000001
192.168.11.113:/media/pi/****05:0x00000001
192.168.11.113:/media/pi/****03:0x00000007
192.168.11.113:/media/pi/****01:0x00000007
192.168.11.116:/media/pi/****03:0x00000009
192.168.11.116:/media/pi/****04:0x0000001c
192.168.11.110:/media/pi/****04:0x00000032
192.168.11.113:/media/pi/****02:0x00000006
192.168.11.113:/media/pi/****04:0x0000000f
pi@raspberrypi2:~ $
上記サイトにあるように、クライアント側を全てシャットダウン後、以下実行。クリアされた模様。
pi@raspberrypi2:~ $ showmount -a
All mount points on raspberrypi2:
192.168.11.110:/media/pi/****05
192.168.11.110:/media/pi/****03
192.168.11.110:/media/pi/****04
192.168.11.113:/media/pi/****05
192.168.11.113:/media/pi/****01
192.168.11.113:/media/pi/****02
192.168.11.113:/media/pi/****03
192.168.11.113:/media/pi/****04
192.168.11.116:/media/pi/****05
192.168.11.116:/media/pi/****01
192.168.11.116:/media/pi/****03
192.168.11.116:/media/pi/****04
192.168.11.9:/media/pi/****05
192.168.11.9:/media/pi/****03
pi@raspberrypi2:~ $ sudo cp /dev/null /var/lib/nfs/rmtab <-- クライアント側を全てシャットダウン後に実行
pi@raspberrypi2:~ $ showmount -a
All mount points on raspberrypi2:
pi@raspberrypi2:~ $
クライアント側起動後に再度確認。スッキリ。
pi@raspberrypi2:~ $ showmount -a
All mount points on raspberrypi2:
192.168.11.110:/media/pi/****03
192.168.11.110:/media/pi/****04
192.168.11.113:/media/pi/****01
192.168.11.113:/media/pi/****02
192.168.11.113:/media/pi/****03
192.168.11.113:/media/pi/****04
192.168.11.116:/media/pi/****01
192.168.11.116:/media/pi/****03
192.168.11.116:/media/pi/****04
pi@raspberrypi2:~ $
横道に逸れたが、話を戻す。
エクスポート状態が不正な場合は、設定ファイル/etc/exports
を見直す。
pi@raspberrypi2:~ $ cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/media/pi/****01 192.168.11.0/24(rw,no_subtree_check)
/media/pi/****02 192.168.11.0/24(rw,no_subtree_check)
/media/pi/****03 192.168.11.0/24(rw,no_subtree_check)
/media/pi/****04 192.168.11.0/24(rw,no_subtree_check)
pi@raspberrypi2:~ $
変更した場合は再起動。または以下コマンドでサービスを再起動。
pi@raspberrypi2:~ $ sudo exportfs -ra
pi@raspberrypi2:~ $ sudo systemctl restart nfs-kernel-server
pi@raspberrypi2:~ $
クライアント側確認ポイント
1. 接続確認
ping
で NFSサーバに到達することを確認。
pi@raspberrypi4:~ $ ping 192.168.11.101
PING 192.168.11.101 (192.168.11.101) 56(84) bytes of data.
64 bytes from 192.168.11.101: icmp_seq=1 ttl=64 time=2.43 ms
64 bytes from 192.168.11.101: icmp_seq=2 ttl=64 time=2.35 ms
64 bytes from 192.168.11.101: icmp_seq=3 ttl=64 time=9.30 ms
^C
--- 192.168.11.101 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 2.350/4.692/9.301/3.258 ms
pi@raspberrypi4:~ $
2. エクスポート確認
showmount -e <hostname>
でエクスポートの確認。正常なら以下。クライアント側から NFSサーバの共有が見えること。
pi@raspberrypi4:~ $ showmount -e 192.168.11.101
Export list for 192.168.11.101:
/media/pi/****04 192.168.11.0/24
/media/pi/****03 192.168.11.0/24
/media/pi/****02 192.168.11.0/24
/media/pi/****01 192.168.11.0/24
pi@raspberrypi4:~ $
ここでエラーが発生するかエクスポートが確認できない場合はサーバ側の問題なので、そちらの設定を再確認。
3. マウント状態確認
マウントディレクトリ確認。以下は/mnt/nfs
配下にマウント。
pi@raspberrypi4:~ $ ls -la /mnt/nfs
合計 24
drwxr-xr-x 6 root root 4096 2月 24 23:43 .
drwxr-xr-x 3 root root 4096 11月 30 21:47 ..
drwxrwxrwx 1 pi pi 4096 8月 11 2021 ****01
drwxrwxrwx 1 pi pi 4096 3月 19 2021 ****02
drwxrwxrwx 1 pi pi 4096 12月 1 19:35 ****03
drwxrwxrwx 1 pi pi 4096 2月 11 18:01 ****04
pi@raspberrypi4:~ $
というか冒頭の例のようにdf -h
で確認した方が確実か。
/etc/fstab
でマウント設定を行っている場合で且つマウントされていない場合は/etc/fstab
を見直す。
pi@raspberrypi4:~ $ cat /etc/fstab
(中略)
192.168.11.101:/media/pi/****01 /mnt/nfs/****01 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0
192.168.11.101:/media/pi/****02 /mnt/nfs/****02 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0
192.168.11.101:/media/pi/****03 /mnt/nfs/****03 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0
192.168.11.101:/media/pi/****04 /mnt/nfs/****04 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0
pi@raspberrypi4:~ $
設定を変更した場合はsudo mount -a
で再マウント。因みに/etc/fstab
でマウントする場合、マウントポイント(マウント用ディレクトリ、上記の/mnt/nfs/****01
等)は明示的に作成しなくてもシステムが用意しマウントしてれくる。
sudo mount -a
でエラーが発生する場合は手動マウントも試してみる。その場合はマウント用ディレクトリを作成してからマウントする。
mkdir /mnt/nfs/****04
sudo mount -t nfs -o nfsvers=3 192.168.11.101:/media/pi/****04 /mnt/nfs/****04
そしてエラーメッセージでぐぐる。
(具体例は今後追記予定)
その他
全ての設定を見直したが全て正常。しかし何故かマウントできる共有ディレクトリとできないものがある場合。
複数HDD を NFS共有している場合、NFSサーバ起動時に全ての HDD のマウントが完了する前に NFSサービスが開始し、不整合が発生する場合があるっぽい。
その場合はサーバ側で以下コマンドを実行しサービスを再起動する。
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server