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





5.00/5 (2投票s)
如何使用 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.exe 和 xfskrnl.exe。修补后的可执行文件以及 hosts 和 init 文件以及用于启动客户端的批处理文件 (xfs.bat) 可以 在此处 下载。
接下来,我们需要找到一个与我们陈旧的 NFS 客户端兼容的 NFS 服务器。尽管现代 Linux 发行版仍然支持 NFS 进行文件共享,但 NFS 经过多年的升级,因此我们需要找到一个仍然使用 NFS v1 的轻量级服务器,因为 NFS v1 已知可以与 XFS191 配合使用。经过大量研究,我偶然发现了 Petebarber 的 NFS 服务器,它只是一个小的 Windows 可执行文件(可从 此处 下载)。只需运行它,您当前的硬盘驱动器就可以通过 NFS 访问了。
为了简化操作,请关闭新启动的 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: 已成功挂载的消息。
在某些机器上,即使已安装了数据包驱动程序,也可能会出现有关缺少数据包驱动程序的错误警告。只要挂载的驱动器可访问,就可以忽略这些消息。
现在访问共享文件夹变得轻而易举。
共享驱动器的卷标将与 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 版本中,路径分隔符已相应修改。