Windows 7 中 Microsoft 的 NFS 客户端没有解决方案

Windows 7 中 Microsoft 的 NFS 客户端没有解决方案

NFS 共享是使用mount server:/share x:命令安装的。
使用 samba 共享(并使用 UTF-8)创建的文件(西里尔文)“Новый текстовый документ.txt”在 Windows 下通过 NFS 共享显示为“Новый текстовый документ.txt”。
如何让 Windows 使用 UTF-8?

答案1

您可以使用 fuse-convmvfs:通过 fuse-convmvfs 挂载您的服务器文件夹(输入字符集 - utf8,输出 - cp1251)并配置 nfsd 以使用转换后的 FS

例子:

> convmvfs /mnt/converted-folder -o srcdir=/path/to/source/foleder, icharset=utf8,ocharset=cp1251

> vi /etc/exports
/mnt/converted-folder 192.168.1.*(rw,sync)

答案2

Windows 7 中 Microsoft 的 NFS 客户端没有解决方案

在这种设置下,没有办法解决您的问题,甚至连这个问题“正确答案”中给出的方法都无法解决。这不是错误,而是故意造成的障碍。NFS Client 的设计者不可能提供使用 BIG5、EUC-KR、EUC-JP、ksc5601、GB18030、SHIFT-JIS 和简单的选项忘记UTF-8 却总是忘记修补十年来。除 UTF-8 外,所有这些编码都被各种版本的 Windows 使用,这并非巧合。事实上,微软的意图是将旧 UNIX 和 Windows 连接起来,促进从 Unix 到 Windows 的迁移,必须谨慎衡量,以免给其竞争对手 Linux 提供一个轻松的生存环境。任何使 Linux 不同于 Unix 或现代 Unix 不同于即将被取代的旧 Unix 的功能都被排除在外。这是精准的营销,干得好。

让我向你展示如何封锁所有道路:

解决方法是:

想法是找到一些可以动态转码文件名的软件,例如通过在 FS 和 OS 之间插入一层。或者,找到一些可以为另一个软件设置环境以使用该文件系统的软件。没有已知的 Windows 软件可以做到这一点。这行不通,因为与允许每个应用程序使用不同编码的 Linux 不同,Windows 为文件系统配置编码。

解决服务器问题是不可能的:

大多数 NFS 服务器都是 Linux。理论上,可以使用 fuse-convmvfs 来创建文件系统的镜像并导出它。Oleg Lobach 演示了执行此操作的代码,并且无需测试就被标记为正确。它不起作用,因为 Linux 的 NFS 服务器只能在 NFSv4 中导出 FUSE 文件系统,而不能在 NFSv2/v3 中导出,同时,Windows 7(以及 Services for Unix v3.5)仅支持 NFSv2/v3,而不支持 NFSv4。我演示了这一限制在另一个答案中详细说明。

该问题详述于科技网

POSIX 文件名不是 ASCII,而是字节。NFS 文件系统上的文件名也是如此。将字节流解释为特定代码集中的文件名留给客户端应用程序。如果文件名字节流表示有效的 UTF-8 字符串,但客户端应用程序将代码集设置为 ISO-8859-5,则任何问题都是应用程序的错。但我们谈论的是 Windows。在 Windows 上,文件名的解释并不留给应用程序。相反,从 NFS 服务器发送到 Windows 客户端计算机的文件名字节流必须转换为 UTF-16 字符串才能被操作系统消化。因此,文件名字节流的解释必须由 NFS 客户端服务根据每个挂载点执行。应用程序对此没有发言权。这就是问题所在。如果用于创建文件名的远程代码集是 UTF-8(这是 POSIX 世界中多年来的默认设置),那么从 Windows 应用程序的角度来看,就不可能获得正确的文件名,因为文件名的解释已经由 Windows NFS 客户端完成,而 Windows NFS 客户端不允许从 UTF-8 转换为 UTF-16。事实上,NFS 客户端仅支持有限数量的代码集转换为 UTF-16,而且所有这些转换都相当过时。这不仅仅是一种特定的情况。在您从 Windows NFS 客户端访问设置为使用 MBCS(如 UTF-8 或 GB-18030)的计算机上的 NFS 共享的所有情况下,都会遇到此问题。

如果您选择切换,则有以下解决方案:

最好的解决方案当然是放弃 Windows。这在当今已不再重要,全球趋势不再是发布仅适用于 Windows 的软件。如果您仍使用旧的 Windows 应用程序,则可以更改您的要求:

  • 切换 NFSv2/v3 客户端:您可以为 Windows 安装 dokan 用户空间挂载驱动程序,然后安装 Neko NFS 驱动器,它将 NFS 映射到带有“Unicode”选项的设备驱动程序。单击该选项以使 UTF8 工作。它支持 NFSv2 和 v3,但不支持 v4。它尚不支持符号链接(Microsoft 的客户端支持)。

  • 切换 NFSv4 客户端:您可以将内置 NFS 客户端保留为UMICH CITI 为 Windows 提供的 NFS 4.1 免费参考实现虽然安装起来很困难,但应该可以消除问题(因为 NFS4 明确要求 UTF-8)或者可以使用上面提到的解决方法 fuse-convmv。

  • 切换操作系统:Windows Server 2012 增加了对 NFS 4.1 服务器的支持,因此它们也有可能包含 NFS 4.1 客户端。

如果您的服务器仅支持 NFSv3,例如,如果您使用 OpenWRT(即使是最新版本的 OpenWRT 服务器仍然无法支持 NFSv4),则这两种交换机都无法工作。

答案3

我只是想指出,我尝试了 UMICH CITI NFS 客户端,但遇到了安全启动问题。

尝试运行时:

bcdedit /set testsigning on

按照说明书进行操作,结果出现了以下错误:

An error has occurred setting the element data.
The value is protected by Secure Boot policy and cannot be modified or deleted.

因此,除非您想弄乱安全启动设置,否则我不建议您尝试使用 CITI 客户端。

最佳解决方案是让 CITI 签署驱动程序,这样就可以在不进行测试模式的情况下使用它。但考虑到它已经很旧了,我认为这不会发生。

答案4

Alex Kart 表示,尽管 Windows 10 和 Windows 11 中存在许多不支持 UTF8 编码的 bug(不是 bug,是 bug)。要在未来的版本中再次尝试,请登录新代码,否则您将无法访问此版本并无法启动。我使用保险丝烧断了电线并切断了电源,但没有成功。

相关内容