8. 与其他操作系统一起使用 Linux NFS

每个操作系统,包括 Linux,在其 NFS 实现的行为方面都有其怪癖和偏差 -- 有时是因为协议含糊不清,有时是因为它们留下了巨大的安全漏洞。据我们所知,Linux 将与所有主要供应商的 NFS 实现正常工作。 但是,可能需要采取额外的步骤来确保这两个操作系统之间清晰地通信。本节详细介绍了这些步骤。

一般来说,强烈建议不要尝试使用 2.2.18 之前的内核的 Linux 机器作为非 Linux 客户端的 NFS 服务器。 具有较旧内核的实现可以很好地用作客户端; 但是,如果您正在使用这些内核中的一个并且遇到问题,我们给出的第一个建议是升级您的内核,看看问题是否消失。用户空间 NFS 实现也无法与非 Linux 客户端很好地工作。

以下是使用 Linux 与主要操作系统一起使用的已知问题列表。

8.1. AIX

8.1.1. Linux 客户端和 AIX 服务器

/etc/exports 文件的格式,如第 3 节中的示例所示
  /usr   slave1.foo.com:slave2.foo.com,access=slave1.foo.com:slave2.foo.com
  /home  slave1.foo.com:slave2.foo.com,rw=slave1.foo.com:slave2.foo.com
    

8.1.2. AIX 客户端和 Linux 服务器

AIX 使用 /etc/filesystems 文件而不是 /etc/fstab 文件。基于第 4 节中的示例的示例条目如下所示
/mnt/home:
        dev             = "/home"
        vfs             = nfs
        nodename        = master.foo.com
        mount           = true
        options         = bg,hard,intr,rsize=1024,wsize=1024,vers=2,proto=udp
        account         = false
  

  1. AIX 的 4.3.2 版本,以及可能更早的版本,要求使用以下选项导出文件系统:insecure选项,该选项使 NFS 监听来自不安全端口(即 1024 以上的端口,非 root 用户可以绑定到这些端口)的请求。 较旧版本的 AIX 似乎不需要这样做。

  2. AIX 客户端将默认通过 TCP 挂载版本 3 NFS。如果您的 Linux 服务器不支持此功能,则可能需要指定vers=2和/或proto=udp在您的挂载选项中。

  3. /etc/exports中使用网络掩码似乎有时会导致客户端在另一个客户端重置时丢失挂载。可以通过显式列出主机来解决此问题。

  4. 显然,AIX 4.3.2 中的自动挂载相当糟糕。

8.2. BSD

8.3. Tru64 Unix

8.3.1. Tru64 Unix 服务器和 Linux 客户端

一般来说,Tru64 Unix 服务器与 Linux 客户端配合得很好。 /etc/exports 文件的格式,如第 3 节中的示例所示
     
/usr         slave1.foo.com:slave2.foo.com \
     -access=slave1.foo.com:slave2.foo.com \

/home        slave1.foo.com:slave2.foo.com \
         -rw=slave1.foo.com:slave2.foo.com \
       -root=slave1.foo.com:slave2.foo.com 
   

root选项仅出于信息目的列在最后一个条目中;除非必要,否则不建议使用。)

Tru64 每次有挂载请求时都会检查/etc/exports文件,因此您不需要运行 exportfs 命令;实际上,在许多版本的 Tru64 Unix 上,该命令不存在。

8.4. HP-UX

8.5. IRIX

8.5.1. IRIX 服务器和 Linux 客户端

HP-UX 上的示例/etc/exportsIRIX 上的条目如下所示
/usr -ro,access=slave1.foo.com:slave2.foo.com
/home -rw=slave1.foo.com:slave2.fo.com:root=slave1.foo.com:slave2.foo.com
  
root选项仅出于信息目的列在最后一个条目中;除非必要,否则不建议使用。)

据报道,在使用在导出到基于 linux 2.2 的系统的导出时使用 nohide 选项时会出现问题。此问题已在 2.4 内核中修复。作为一种解决方法,您可以单独导出和挂载较低级别的文件系统。

截至 Kernel 2.4.17,仍然存在一些次要的互操作性问题,可能需要内核升级。特别是

8.6. Solaris

8.6.1. Solaris 服务器

Solaris 在服务器端与与其他操作系统略有不同的格式。 配置文件不是 /etc/exports,而是 /etc/dfs/dfstab。 条目的形式为 share 命令,其中第 3 节中示例的语法如下所示
share -o rw=slave1,slave2 -d "Master Usr" /usr
   
,而运行的不是 exportfs 编辑后,而是 shareall

Solaris 服务器对数据包大小特别敏感。 如果您将 Linux 客户端与 Solaris 服务器一起使用,请务必将rsizewsize在挂载时设置为 32768。

最后,Solaris 上的 root squashing 存在一个问题:root 被映射到用户noone,这与用户nobody不同。 如果您在客户端计算机上以 root 身份处理文件权限时遇到问题,请务必检查映射是否按预期工作。

8.7. SunOS

SunOS 只有基于 UDP 的 NFS 版本 2。

8.7.1. SunOS 服务器

在服务器端,SunOS 使用其 /etc/exports 文件的最传统格式。 第 3 节中的示例如下所示
/usr    -access=slave1.foo.com,slave2.foo.com
/home   -rw=slave1.foo.com,slave2.foo.com, root=slave1.foo.com,slave2.foo.com
   

同样,root选项仅出于信息目的列出,除非必要,否则不建议使用。