32位系统使用nfs报EOVERFLOW(value too large for defined data type)

  1. 问题现象:
    1. 使用32位编译的linux内核,在通过nfs mount加载so失败
    2. cannot load xxx.so
  2. 排查:
    1. so所在位置已被包含到LIB_LABRARY_PATH
    2. so对应的文件类型是32位的动态库文件
    3. 使用strace加载程序
      1. 报fstat *** =-1 EOVERFLOW(value too large for defined data type)
      2. 这个问题的原因是远程机器的IPC或文件系统对象的uid_t off_t gid_t比本地系统的要大,比如远程的是64bit,而本地的是32bit
    4. 但是我远程mount的也是32bit编译出来的so
    5. 进一步排查,是nfs在转换过程中,提供的是64bit的inode
  3. 解决方法:
    1. 第一种,修改nfsserver,限制inode大小到32bit
    2. 第二种,修改nfs客户端的配置,返回32bit的inode number
      1. 不想重新编译nfs模块,则输入如下指令即可
      2. echo -n N > /sys/module/nfs/parameters/enable_ino64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值