在 Windows/Linux 之间保留 NFS 上的文件名

Preserve filenames on NFS between Windows/Linux

有什么方法可以配置 NFSClient 或如何在 Windows 或 Linux 上安装共享,以便我可以跨系统保留文件名?

目前我们有大量文件写在 Windows 上,现在已移至 Google 文件存储 (NFSv3),以便可以从其他服务器访问它们。问题是许多文件的名称中都有瑞典字符 (Å Ä Ö),当这些文件在创建它们的相反系统中列出时,文件名变得不可读(文件内容没有问题,只是姓名)

目前我正计划以编程方式重命名所有文件以删除违规字符,但如果可能的话我宁愿不必这样做。

下面是 Windows 和 Linux 侧面的示例。 Linux 文件在 Linux 上创建,Windows 文件在 windows.

上创建

Linux

Windows

这个答案可能无法帮助您解决问题,但我想我会给出一些可能有助于您(和其他人)研究的理论概述。

您可能还想阅读 this

无论如何,我们开始吧:

这里有很多东西在玩。

  • NTFS 使用的编码以及 Google Filestore 使用的任何文件系统。
  • 您用来创建和查看这些文件名的程序支持的编码。
  • 这是您正在使用的终端程序支持的编码。
  • 有NFSv3支持的编码。

文件系统

在 Linux 上,文件名只有 2 条规则:它们不能包含斜杠 (/),并且它们不能包含空字节 ([=11=])。 ASCII 和 UTF-8 与此规则兼容,这些基本上是 linux 文件系统支持的编码。

Windowsmight have different ideas。可能需要一些配置才能让 windows 文件系统以不同的编码发出字符。

创建和列出文件

在 Linux,您的文件名是 almost always encoded in UTF-8。然后,ls 和 kin 一般不会考虑太多,只是假设文件系统需要的上述规则。

Windows' dir 显然知道如何使用 NTFS 的字符编码,但是它可以读取 Linux' UTF-8 文件名吗?据我所知,它支持 with some configuration.

航站楼

现代 Linux 终端程序都是 UTF-8,但可能需要安装对其他字符集的支持(因为 Windows)。

上Windows,好像有not been fully supported as of last year。也许这已经改变了,或者你可能需要另一个终端。以上配置可能会有所帮助。

NFS

NFSv4.1 及更高版本明确支持 UTF-8 和 Unix <-> Windows 互操作性的明确目标。

NFSv3 没有这些,对任何非 ASCII 的支持是 not guaranteed

我发现 one implementation which supports UTF-8 over NFSv3, but Google Filestore's documentation only says“支持任何与 NFSv3 兼容的客户端”。

做什么

继续并重命名文件。互操作性有更多问题,例如what characters are reserved 的不同概念,有很多限制,你最好的选择是确保所有文件名都是简单的纯 ASCII,我什至会避免文件名中的空格之类的东西,它让生活变得更轻松.