65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 NFS 在 Windows 和 MS-DOS 6.22 之间传输文件

2023年5月7日

CPOL

4分钟阅读

viewsIcon

2902

如何使用 NFS 在 Windows 和 MS-DOS 6.22 之间传输文件

尽管我成功配置了 Microsoft Network Client 3.0 来访问我在 Windows 7 机器上的共享文件夹,但该设置会占用将近 100KB 的常规内存,导致在共享驱动器使用时无法运行许多其他程序。因此,我决定利用一些空闲时间探索如何使用 NFS (Network File System),即原始的 Unix 文件共享协议,在 MS-DOS 和 Windows 之间共享文件,希望能占用更少的常规内存,让我能够运行更大的程序。

第一个任务是为 MS-DOS 找到一个 NFS 工具。经过一番研究,我使用了 XFS191,这是一个轻量级的客户端,最后一次开发是在 1994 年。由于该软件是用 Turbo Pascal 6.0 编写的,因此有必要修补可执行文件,以避免在现代机器上运行时出现运行时错误 200(除零错误)。就我们的目的而言,我们只需要修补 xfstool.exexfskrnl.exe。修补后的可执行文件以及 hostsinit 文件以及用于启动客户端的批处理文件 (xfs.bat) 可以 在此处 下载。

接下来,我们需要找到一个与我们陈旧的 NFS 客户端兼容的 NFS 服务器。尽管现代 Linux 发行版仍然支持 NFS 进行文件共享,但 NFS 经过多年的升级,因此我们需要找到一个仍然使用 NFS v1 的轻量级服务器,因为 NFS v1 已知可以与 XFS191 配合使用。经过大量研究,我偶然发现了 Petebarber 的 NFS 服务器,它只是一个小的 Windows 可执行文件(可从 此处 下载)。只需运行它,您当前的硬盘驱动器就可以通过 NFS 访问了。

nfs_server

为了简化操作,请关闭新启动的 NFS 服务器上的防火墙,以避免任何潜在问题。

接下来,我们需要修改 XFS191 的配置。假设您的网卡已安装了数据包驱动程序,您可以首先修改 hosts 文件来指定本地机器以及 NFS 服务器的 IP 地址。

#
# XFS Version 1.71
# hosts
#
# Note: Please keep this file in LF/CR (DOS) format!
#

192.168.1.1	gateway
192.168.1.255	broadcast
255.255.255.0	netmask

192.168.1.41    md386
192.168.1.157   share 

前三行指定网络设置,然后是本地机器和 NFS 服务器的 IP 地址。请注意,可以添加多个服务器条目。之后,修改 init 文件以初始化网络配置以及要挂载的共享文件夹。

#
# XFS Version 1.8
# Command Script
#
# see  `Xfstool help <command>'  for more
#
#

init md386 sm=255.255.255.0 gw=192.168.1.1 csum=off

# authentication

pcnfsd share
#login

mount    z: share:c:\tools\dos
show

# per-drive re-authentication
# dlogin  f:
# dlogin all

init md386 行表示 NFS 客户端应以 md386 作为本地主机名启动。mount z: share:c:\tools\dos 命令告诉 XFS191 将 Z: 映射到 NFS 服务器上的 c:\tools\dos 文件夹。这可能需要在 CONFIG.SYS 中添加 LASTDRIVE=Z 语句才能生效。

编辑 XFS.BAT 并确保数据包驱动程序的地址 (0x60) 正确。

@echo off
rem XFS Version 1.71
loadhigh xfskrnl 0x60
xfstool @init 

之后,通过运行 XFS.BAT 来启动 NFS 客户端。您应该会收到指示驱动器 Z: 已成功挂载的消息。

xfs191_virtualbox

在某些机器上,即使已安装了数据包驱动程序,也可能会出现有关缺少数据包驱动程序的错误警告。只要挂载的驱动器可访问,就可以忽略这些消息。

现在访问共享文件夹变得轻而易举。

Capture

共享驱动器的卷标将与 XFS 的 mount 命令中指定的值相同。由于 NFS v1(以及 MS-DOS 6.22)并非为当今的大容量硬盘设计,因此可用磁盘空间很可能为 377,487,360 字节。在访问共享驱动器时,屏幕右上角会显示闪烁的“<”字符。

在我进行的测试中,XFS191 消耗的常规内存远少于 Microsoft Network Client,使我能够运行许多大型程序。一个小问题是,从 NFS 共享驱动器复制的文件将始终具有只读属性,必须通过 attrib 命令清除。通过 MSCDEX 挂载的 CD-ROM 驱动器复制的文件也会发生这种情况,但 Microsoft Network Client 共享驱动器不会。此外,在对大型目录进行目录列表时,列表有时会暂停几秒钟,因为正在交换数据,而 Microsoft Network Client 不会发生这种情况。尽管存在这些小不便,您应该能够正常读写共享驱动器,并且在网络连接良好的情况下,共享驱动器就如同本地驱动器一样好用。

最后需要知道的一点是,XFS191 能够很好地处理仅包含小写字母数字字符的文件夹名称。所有名称都应符合 8.3 格式。大写字母、下划线等特殊字符,甚至文件夹名称中的点,都会导致名称被转义为 ~。这不会影响数据完整性,但会导致原始名称丢失。为避免这种情况,我开发了一个工具,可以递归地将当前目录中的所有文件/文件夹名称转换为小写,该工具可 在此处 下载。只需从要通过 NFS 共享的文件夹运行该工具,一切就绪!

NFS 服务器的修改后源代码副本可 在此处 下载。我修复了一个导致访问子目录出现问题的错误。另一个可以在 Mono 上运行并在 Linux 上工作的版本可 在此处 下载。在 Mono 版本中,路径分隔符已相应修改。

© . All rights reserved.