许多局域网都是由大型主机和微机组成的。一般客户端微机采用Windows操作系统进行数据采集,主机系统则运行UNIX操作系统,完成数据处理。这样就不可避免地会遇到异种操作系统间的数据通信问题。
在这种环境中要实现数据共享,最方便的措施是采取硬盘映射技术,这在UNIX中可通过NFS来实现。遗憾的是,微软的各系列操作系统均不支持该协议。下面谈一谈如何使Windows操作系统成为NFS Server,从而使UNIX主机能够直接mount其硬盘和目录。
运行在Windows系统下的第三方NFS软件并不少,但大多需要另外购买。这里向大家推荐一免费软件——TrueGrid NFS Server。
TrueGrid NFS Server可使Windows 95/98/NT为操作系统的机器成为NFS服务器,通过硬盘映射方式实现异种操作系统之间的数据共享,从而达到数据通信对应用程序透明的目的,减轻编程强度,提高系统可靠性(见图1)。该软件的地址是http://www.truegrid.com/nfs.html。把下载的文件用WinZip等软件解压缩,存入一新建的目录,比如c:\nfs,就可进行安装了。这个软件大小还不到450KB,含十几个文件,其中与安装和配置有关的文件有Exports、rpc、Portmap、nfs等。
图1 NFS工作原理
现在可以安装软件了。安装之前,你必须确定你的Windows系统已经安装好TCP/IP协议,并能正常工作。
本文中凡涉及到UNIX和Windows NT的操作,均须以系统管理员的账号登录。
第一步,打开一个MS-DOS窗口,并把该软件所在目录设置为当前目录,命令为:cd c:\nfs
第二步,在Windows所在目录(Windows 95/98一般是C:\Windows,Windows NT则为C:\Winnt)中创建一个名为etc的子目录,并把软件提供的Exports文件和rpc文件复制到这个目录中。具体命令为:
mkdir %WINDIR%\ETC
copy exports %WINDIR%\ETC\exports
copy RPC %WINDIR%\ETC\RPC
第三步,如果未指定DNS,则修改(或创建)Hosts文件。为使WinSock能够转换机器名和IP地址,Windows操作系统必须有名为Hosts的文件。该文件是文本文件,每一行的格式如下:
IP地址机器名
一般第一行总是:
127.0.0.1 localhost
第二行则指明本机的IP地址和机器名,比如笔者的机器为:
129.0.0.65 wwj
其它各行则应包括本机所在局域网内各主机节点的IP地址和机器名,至少应包括将来拟共享本PC机文件系统的那些机器的IP地址和机器名。
对于Windows 95/98,本文件应存放在操作系统所在目录(文件全名一般是C:\Windows\Hosts);对于Windows NT,则在操作系统所在目录下的System32\Drivers\ETC子目录中(文件全名一般是C:\Winnt\System32\
Drivers\etc\Hosts)。值得一提的是,一般Windows 95/98提供一个例子文件,名为Hosts.sam,而Windows NT则原本就存有这个文件。
这一步完成后,可以用TrueGrid NFS Server提供的finfhost命令来验证。比如命令:findhost wwj或findhost 192.0.0.65
若能得到类似下面的响应:
Official Name:wwj
Address:192.0.0.65
就表明相应的机器名及其IP地址已经正确设置完毕。
第四步,修改相应UNIX主机的Hosts文件。UNIX主机的Hosts文件格式与上述相同,存放在root的etc目录中,换言之,它的全名是/etc/hosts。
准备共享PC文件系统的UNIX主机的Hosts文件中,都需包含该PC的IP地址和其机器名。比如:
129.0.0.65 wwj
129.0.0.66 sgi-o2
第五步,启动TrueGrid NFS Server。回到第一步所打开的MS-DOS窗口中,如果是Windows 95/98系统,使用下列命令启动TrueGrid NFS Server(见图2):
portmap
nfs
若使用Windows NT,则用下列命令启动:
PORTMAP add
NFS add
NFS start
请注意add和start要用小写。
图2 在Windows 95/98上运行时的任务列表
然后可以用该软件的rpcinfo -p和showmount -e命令验证程序是否已经启动,正常情况下两个命令的提示分别类似于:
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 790 mountd
100005 1 tcp 793 mountd
100003 2 udp 2049 nfs
和/c (everyone)
第六步,测试。以root登录到相应的UNIX主机,临时在根目录上建立一目录,如/pcdir,然后以mount命令把PC的C盘mount到/pcdir,命令如下:
mount wwj:/c /pcdir
随后进入/pcdir目录,就可以对PC机C盘的所有目录和文件直接进行读、写或复制、删除等操作了,与对本地目录操作完全相同。
测试完毕,可用umount命令停止共享,并把测试用目录/pcdir删除。PC机端则可以停止NFS Server的运行:对Windows 95/98而言,可用任务管理器关闭nfs;对Windows NT则可用nfs stop命令来停止NFS Server。
如何使软件自动启动呢?对于PC机端,如果运行Windows 95/98,则可把portmap.exe和nfs.exe先后加入“启动”程序组,注意顺序;若运行Windows NT,只要上述安装步骤是成功的就可以了。对于UNIX主机端,则在/etc/fstab中增加相应的控制语句即可。
对于日常维护和配置,我们介绍etc下的Exports文件:控制PC机的目录共享的有关参数文件。
Exports是一个文本文件,每一行对应输出一个本机的目录,供其它系统mount。各行格式:共享名 -选项
例如,TrueGrid NFS Server提供的缺省参数是:
/c -path=c:\
/d -path=d:\
表示该PC机的C:\和D:\目录可被任何机器mount,其muont名分别是/c和/d。
选项有多种,现介绍下面几种:
access=host:host...仅允许这些主机mount本行指定的目录;
path=path_name指定输出的目录,使用绝对路径;
ro=host:host...输出的目录对所列主机是只读的;
uid=n指定输出目录的各文件的uid;
gid=n指定输出目录的各文件的gid;
umask=m指定输出目录的各文件的umask;
dmask=m指定输出目录的各文件的dmask;
lc输出的目录和文件均映射为小写;
uc输出的目录和文件均映射为大写。
其它选项请参考软件提供的文档。
请注意该文件的语法:选项之间以逗号分开,但第一个选项前要加减号即:-。
比如我想把C:\jingzhi共享为文件系统jz,且该目录下的文件映射到UNIX下的访问权限置为rwxr-xr-x,可把如下一行加入etc中的Exports文件:/jz -umask=022,lc,path=c:\jingzhi
TrueGrid NFS Server可使Windows 95/98/NT操作系统的文件系统输出给所有支持NFS的UNIX操作系统。笔者在Windows 95/98/NT和新型SGI O2工作站及一台非主流小型机(1992年购置)上做试验,均取得良好效果。