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

 

NFS协议

经过多年的演进,NFS协议有多个版本,每个版本都有相应的RFC规范,如

NFS通过NFS过程来对外提供服务。如下是RFC1813中定义的一组NFS过程。

NFS特性对比

NFSv3特性对比

NFSv4特性对比

NFSv4.1特性对比

Linux NFS实现与实例

LInux NFS架构是典型的CS架构,其结构如下图所示。其中服务端应用程序主要由如下几部分组成:

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

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

  • 服务注册过程
  • NFS挂载:mount 168.0.155.1:/datadisk0 /tmp
  • 改变工作目录:cd /tmp
  • 查看目录下文件:ls
  • 读文件:more tail bootcfg.ini

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等
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.cnblogs.com/wahaha02/p/9559345.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信