NFSv3 和 NFSv4 之间的编码问题

NFSv3 和 NFSv4 之间的编码问题

我们在 NFS 共享的文件名编码方面遇到了一些问题。

我们之前安装为 NFSv3,然后开始使用 NFSv4,并且之前创建的一些带有特殊字符(通常是法语重音字符)的文件现在不兼容并且无法正确列出。

NFS 服务器配置为允许客户端使用 v3 或 v4 进行挂载。

此外,我们做了一个简单的测试来了解发生了什么:

  • 安装共享(例如):/mnt/nfs3类型为 nfs ( -t nfs)
  • /mnt/nfs4使用 nfs4 类型挂载同一个文件夹( -t nfs4
  • 在 nfsv4 文件夹中创建一个文件名带有重音字符的文件:touch /mnt/nfs4/testééè
  • 列出同一文件夹中新创建的文件:ls /mnt/nfs4

结果是:testééè

正如您所看到的,在创建文件的同一文件夹中列出带有重音符号的文件会显示出差异。这是为什么呢?

  • NFS 服务器上是否有兼容模式?
  • 在同一台机器上安装具有不同 NFS 类型的同一文件夹是否存在问题?
  • 它与机器区域设置和环境变量有关系吗LC_*

感谢您的帮助!

答案1

发生这种情况的原因是 NFSv4 要求文件名采用 UTF-8 编码,但您的文件名是由旧客户端使用 NFSv3 和一些拉丁编码编写的,如果您在欧洲,则可能是 ISO-8859-1。

这些文件将全部需要重命名。

您可以使用该实用程序convmv将文件从一种字符编码重命名为另一种字符编码。但由于您的存储在 Netapp 上,因此您几乎肯定必须从通过 NFSv3 安装文件系统的客户端执行此操作。例如:

convmv -f latin1 -t utf-8 -r /nfsv3-mountpoint

此后,您应该能够在 NFSv4 上正确看到文件名,并且所有丢失的文件也应该重新出现。

此后,您需要找到仍在使用 NFSv3 的客户端并修复它们。NFSv3 已有近 25 年的历史。现在应该没有人再使用它了。

有关详细信息,请参阅来自 Hacker News 的此帖

相关内容