NFSの稼働状況確認

稼働中NFSの状態確認コマンドをメモ書き

クライアント側

マウント状況、オプションの確認
[root@nfs-client01 ~]# df -h
...
192.168.1.154:/tmp/     65G   47G   15G  77% /mnt

[root@nfs-client01 ~]# mount
...
192,168.1.154:/tmp/ on /mnt type nfs (rw,addr=192,168.1.154)

チューニングのためrsize、wsizeを大きくしていたり、
サーバ停止時の対策としてsoft、intr使ってるなら、ちゃんと入ってるかチェックしましょう

アクセス状況の確認
[root@nfs-client01 ~]# nfsstat -c
Client rpc stats:
calls      retrans    authrefrsh
1616       0          0

Client nfs v3:
null         getattr      setattr      lookup       access       readlink
0         0% 185      11% 13        0% 29        1% 129       8% 0         0%
read         write        create       mkdir        symlink      mknod
12        0% 35        2% 9         0% 6         0% 0         0% 0         0%
remove       rmdir        rename       link         readdir      readdirplus
1         0% 1         0% 2         0% 0         0% 0         0% 19        1%
fsstat       fsinfo       pathconf     commit
1162     72% 6         0% 0         0% 1         0%

Client nfs v4:
null         read         write        commit       open         open_conf
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
open_noat    open_dgrd    close        setattr      fsinfo       renew
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
setclntid    confirm      lock         lockt        locku        access
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
getattr      lookup       lookup_root  remove       rename       link
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
symlink      create       pathconf     statfs       readlink     readdir
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
server_caps  delegreturn
0         0% 0         0%

アクセス種別ごとの回数、比率などが確認できます。


サーバ側

export状況の確認

設定ファイルを確認

[root@nfs-server01 ~]# cat /etc/exports
/tmp 192.168.1.0/24(rw,no_root_squash)

実際のエクスポート状況を確認

[root@nfs-server01 ~]# exportfs
/tmp            192.168.1.0/24

[root@nfs-server01 ~]# showmount -e
Export list for nfs-server01:
/tmp   192.168.1.0/24

設定と差分があるようならexportfs -rか/etc/init.d/nfs reloadで反映させましょう

被マウント状況の確認

showmountで確認できます

[root@nfs-server01 /]# showmount -a
All mount points on nfs-server01:
192.168.1.153:/tmp

正常にumountされなかったときの情報が残っていることがあるので、
正確な情報を得るためには出力された各クライアントにログインして調べる必要があると思います。
(もっといい方法ないのかな・・・)

アクセス状況の確認
[root@nfs-server01 ~]# nfsstat -s
Server rpc stats:
calls      badcalls   badauth    badclnt    xdrcall
2640       0          0          0          0

Server nfs v3:
null         getattr      setattr      lookup       access       readlink
11        0% 162       6% 9         0% 21        0% 122       4% 0         0%
read         write        create       mkdir        symlink      mknod
12        0% 23        0% 7         0% 6         0% 0         0% 0         0%
remove       rmdir        rename       link         readdir      readdirplus
1         0% 1         0% 0         0% 0         0% 0         0% 12        0%
fsstat       fsinfo       pathconf     commit
2228     84% 8         0% 0         0% 0         0%

アクセス種別ごとの回数、比率などが確認できます。

どのサーバがどのファイルにアクセスしてるの?

どのサーバが?

tcpdumpで見つけましょう

[root@nfs-server01 /]# tcpdump -n port 2049
17:20:32.476431 IP 192,168.1.153.3173409502 > 192,168.1.154.2049: 124 access [|nfs]
どのファイルに?

mtime、atimeでアクセス時間が判別できるならばfindでOKでしょう

[root@nfs-server01 ~]# find /tmp/ -mtime -1
[root@nfs-server01 ~]# find /tmp/ -atime -1

ただサーバ側でnoatimeつけてると読み込みファイルを探すのはけっこうたいへんな気がします。


というわけでrpcdebugというコマンドを紹介しておきます。
このコマンドでフラグを指定するとデバッグログが出力されるようになります。
・フラグ一覧の確認

[root@nfs-server01 ~]# rpcdebug -vh
usage: rpcdebug [-v] [-h] [-m module] [-s flags...|-c flags...]
       set or cancel debug flags.

Module     Valid flags
rpc        xprt call debug nfs auth pmap sched trans svcsock svcdsp misc cache all
nfs        vfs dircache lookupcache pagecache proc xdr file root callback all
nfsd       sock fh export svc proc fileop auth repcache xdr lockd all
nlm        svc client clntlock svclock monitor clntsubs svcsubs hostcache xdr all


・サーバ側でデバッグログ出してみる

[root@nfs-server01 ~]# rpcdebug -m nfsd -s fh
nfsd       fh


[root@nfs-server01 ~]# tail -f /var/log/messages
...
Jul 31 16:09:35 nfs-server01 kernel: nfsd: fh_compose(exp fd:00/10049953 tmp/testdir, ino=0)
...
Jul 31 16:09:41 nfs-server01 kernel: nfsd: fh_compose(exp fd:00/10049953 testdir/testfile, ino=0)
...
Jul 31 17:01:27 nfs-server01 kernel: nfsd: fh_verify(20: 01000001 0000fd00 009959a1 009ded7d 26fbfccf 00000000)
...

[root@nfs-server01 ~]# rpcdebug -m nfsd -c fh
nfsd      <no flags set>

アクセスのあったファイル名が出力されています。
ただ読み込みについては初回以降はファイル名が出てこないのでよくわかりません。
(最後の行。実は009ded7dがinode番号なのでfind -inumで見つけられなくはないです)


・クライアント側でデバッグログ出してみる

[root@nfs-client01 ~]# rpcdebug -m nfs -s vfs
nfs        vfs

[root@nfs-client01 ~]# tail -f /var/log/messages
...
Jul 31 17:14:02 nfs-client01 kernel: NFS: mkdir(0:19/10049953), testdir2
...
Jul 31 17:14:03 nfs-client01 kernel: NFS: dentry_delete(//testdir2, 0)
...
Jul 31 17:14:37 nfs-client01 kernel: NFS: create(0:19/10349951), testfile2
...
Jul 31 17:14:37 nfs-client01 kernel: NFS: dentry_delete(testdir2/testfile2, 0)
...
Jul 31 17:15:39 nfs-client01 kernel: NFS: dentry_delete(testdir2/testfile2, 8)

[root@nfs-client01 ~]# rpcdebug -m nfs -c vfs
nfs       <no flags set>

こちらのほうが見やすいですし、読み込みの際もファイル名が出てきてくれます。




サービス系のNFS撲滅したい(;´Д`)ハァハァ