AIX主机应用调用getdirent函数导致访问NFS共享异常

发布时间:  2017-05-09 浏览次数:  371 下载次数:  0
问题描述

AIX主机A使用ftp访问AIX主机B的NFS共享时出现ls含有通配符的文件时失败

告警信息


处理过程

1,在挂载NFS共享的AIX主机上使用truss命令跟踪主机的系统调用

 a,在主机B上执行如下命令”ps –ef | grep ftp”,查找ftp的进程id

   

  b,在主机B上执行“truss –p 进程号”,进程号为步骤a)中红色方框中的数字

  c,登陆主机A,在ftp环境的nfs共享目录下执行“ls 含通配符的”命令

  d,保存主机A上监控的系统调用信息

2,分析truss的调用信息检查主机查询目录时是否使用了“getdirent”的接口,且该函数是否返回“EOVERFLOW”,如下图所示,若是可以确认是该问题

 

3,因存储版本是V300R002C10SPC100,需要升级到V300R002C10SPC200,,后进行到如下操作

4,通过存储的管理口登陆CLI,然后执行如下命令:

 

5,通过如下命令查询文件系统id

 

6,通过如下命令配置存储的文件系统兼容32位文件系统调用接口,其中红色方框1中的值为步骤2获取的值,红色方框2的值固定为yes;

 

7,在主机上卸载NFS共享挂载点,然后重新挂载

8,在AIX主机A上使用ftp访问AIX主机B上的NFS共享时,ls含有通配符的文件可以正常显示

 

根因

AIX主机系统使用了32位接口getdirent查询目录,存储默认返回文件id为64位(NFS协议规定该值是64位的),两者不兼容,导致主机枚举目录失败,参见IBM官网类似问题的链接地址:http://www-01.ibm.com/support/docview.wss?uid=isg1IV31203

解决方案


建议与总结


END