我们在 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 的此帖。