Linux网络文件系统的实现与调试 (2)

portmap:端口映射器,主要功能是进行RPC程序的端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。

rpc.mountd:NFS挂载守护进程,主要功能是实现NFS MOUNT协议,负责挂载/卸载NFS文件系统和权限管理。它会读取NFS的配置文件/etc/exports来对比客户端访问权限。挂载成功后,客户获得服务器文件系统的一个文件句柄(fh)。

rpc.nfsd:NFS服务端守护进程,是NFS服务的用户态部分。需要提出的是,NFS服务的大部分功能都由nfsd内核模块处理。

 可以看出NFS服务的大部分功能都是由内核模块实现的,除了图中所示的内核模块,内核还提供了2个内核守护进程:

nfsiod:主要作用是为NFS客户端提供高效的缓冲机制,如预读、延时写等,从而改善NFS文件系统的性能

rpciod:主要作用是作为RPC(远过程调用服务)的守护进程,用于从客户端启动I/O服务。

Linux网络文件系统的实现与调试

下图是一个NFS协议消息流图实例,包含了一些典型的网络文件系统操作场景,如:

服务注册过程

NFS挂载:mount 168.0.155.1:/datadisk0 /tmp

改变工作目录:cd /tmp

查看目录下文件:ls

读文件:more tail bootcfg.ini

Linux网络文件系统的实现与调试

Linux NFS调试 NFS应用程序调试

打开应用程序调试功能:

/usr/sbin/portmap -d
/usr/sbin/rpc.mountd -d all
/usr/sbin/rpc.nfsd -d -s

查看NFS配置与记录日志:

cat /etc/exports
cat /var/lib/nfs/rmtab
cat /var/lib/nfs/etab
cat /var/lib/nfs/xtab
cat /var/lib/nfs/state
tail /var/log/messages

NFS内核模块调试

打开NFS模块调试功能:

sysctl -w sunrpc.nfs_debug=2147483647
sysctl -w sunrpc.nfsd_debug=2147483647

查看NFS相关统计和日志:

cat /proc/slabinfo | grep nfs
/proc/fs/nfsfs/
nfsstat
dmesg

TCP/IP模块调试

打开RPC模块调试功能:

sysctl -w sunrpc.rpc_debug=2147483647

查看RPC相关统计和日志:

cat /var/run/portmap_mapping
cat /proc/net/rpc/nfs
cat /proc/net/rpc/nfsd

查看TCP/IP相关统计和配置:

ping // 查看网络情况
netstat -tpwn | grep 2049 // 查看NFS TCP链接
cat /proc/sys/net/ipv4/tcp_retries2 // 查看TCP配置
cat /proc/net/rpc/nfs
cat /proc/net/rpc/nfsd // deciles等字段
cat /proc/net/snmp // IP: ReasmFails等字段

网络抓包:

tcpdump -s 9000 -w /tmp/dump.out port 2049

其他 nfs-utils移植

./configure \
CC=XX-gcc \
--build=$(./config.guess) \
--host=mips64-unknown-linux-gnu \
LDFLAGS="-L/usr/local/lib" \
CPPFLAGS="-I/usr/local/include" \
--disable-tirpc --disable-gss --disable-uuid --without-tcp-wrappers --with-gnu-ld

make

make install

导出文件系统规则

由NFS导出的文件系统由配置文件/etc/exports配置,可以导出的文件系统需要满足如下2个条件:

文件系统必须有一个设备号(需要有FS_REQUIRES_DEV,即存储设备)或FSID号(需要有NFSEXP_FSID 或 ->uuid)。

文件系统必须支持s_export_op接口。而支持s_export_op接口的文件系统都是存储设备文件系统,如ext3/4、ubifs等。其他文件系统如rootfs、ramfs、sysfs等是不支持的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxysy.html