本文链接:http://codingstandards.iteye.com/blog/816441 ? (转载请注明出处)
?
本文内容包括:
1?NFS概述及实例
2?Linux下NFS服务端的设置
3?Linux下NFS客户端的设置
4?Windows下NFS客户端的安装及设置
?
?
在Windows上使用NFS客户端,需要把nfs共享目录映射到一个驱动器。此处假定为映射的驱动器为N:,而nfs共享目录为192.168.6.55:/vmsnfs。
?
?
Windows?Services?for?UNIX?3.5?提 供支援充分和整合完全的跨平台網路服務,適應需要?Windows?和?UNIX?基礎環境之間交互操作性的企業客 戶。?Windows?Services?for?UNIX?3.5?為企業客戶提供儲存在多個平台的資訊之緊密存取,統一了跨平台的網路管理,並且重複 使用?UNIX?應用程式和?Windows?上的指令碼。其中包括支援網路檔案系統?(NFS)。
?
下载Microsoft?Windows?Services?for?UNIX
地址: http://www.microsoft.com/taiwan/windows/sfu/
安装程序: SFU35SEL_EN.exe ?217?MB?(228,178,504?字节)
?
安装Microsoft?Windows?Services?for?UNIX
注意与NFS有关的两个组件是一定要安装的
NFS->Client?for?NFS
Authentication?tools?for?NFS->Server?for?PCNFS
?
安装过程比较简单,此处略过。
?
?
打开Services?for?UNIX?Administration配置用户名
点 “开始菜单”->“所有程 序”->“Windows?Services?for?UNIX”->“Services?for?UNIX?Administration”, 会弹出一个名为“Services?for?UNIX?Administration”的窗口。
左边栏切到Server?for?PCNFS。
右边栏切到Groups,添加Group?Name为root,Group?ID(GID)为0的组。
右边栏切到Users,添加User?name为root,User?logon?name为root,Primary?group?name为root,User?ID(UID)为0的用户,密码不必与Linux系统的密码相同。
点击右上角的Apply保存。
?
映射网络驱动器到NFS共享目录(界面操作方式,不推荐)
在“网上邻居”上按右键,选择“映射网络驱动器”,会弹出映射网络驱动器对话框。
选择盘符,比如N:
输入网络资源路径:192.168.6.55:/vmsnfs
点 “确定”。会弹出一个NFS?login?successful的信息框,注意检查显示的UID和GID的值(一般为-2),点“否”,会弹出 Client?for?NFS?Drive?N:对话框。选中Login?using?PCNFS?authentication对话框,在 Server?name中填入localhost,在User?name中填入root,在Password中填入前面设定的密码,点“确定”,会再次弹 出NFS?login?successful的信息框,此次会显示UID和GID均为0,点“确定”。
这时打开“我的电脑”,会看到增加了一个盘符N:。在其上按右键打开属性对话框,切换到NFS?Attributes页,会看到权限,切换到NFS?Mount?Options,会看到UID和GID等信息。注意确认一下UID和GID一定要为0。
?
映射网络驱动器到NFS共享目录(批处理脚本方式,推荐)
上 面这段挺费劲的,但我不推荐使用这种方式来设置,因为一旦重新启动机器,你再打开“我的电脑”,在NFS对应的盘符N:属性就会看到UID和GID由还原 成了-2。还得先把它断开,然后重新设置,挺麻烦的。所幸微软提供了类似Unix下的命令行工具mount.exe,可以编写如下内容的批处理脚本并保存 为nfs.bat。其中第一行是用来记录操作日志的,第二行启动Server?for?PCNFS,第三行是避免mount命令出错,第四行是把nfs共 享目录挂载到N:(注意-p:xxx要设置成前面设定的密码),第五行列出N:下的文件和目录。
?
?
echo mount nfs at %date% %time% >>c:\nfs.log net start pcnfsd >>c:\nfs.log net use /pers:no >>c:\nfs.log mount -o mtype=hard -o pcnfs=localhost -u:root -p:xxx 192.168.6.55:/vmsnfs N: >>c:\nfs.log dir N: >>c:\nfs.log
?
双击执行nfs.bat,然后打开“我的电脑”就可以看到N:了,然后打开c:\nfs.log看一下。
?
mount nfs at 2010-11-19 星期五 11:33:39.15 命令成功完成。 N: is now successfully connected to 192.168.6.55:/vmsnfs The command completed successfully. mounted
?
如果看到successully之类的关键字眼,就表明mount成功了。
?
?
Q:在挂载nfs共享目录时,mount.exe报1326错误,是什么原因?
Network?Error?-?1326
Type?'NET?HELPMSG?1326'?for?more?information.
A:根据提示,使用net helpmsg看一下,如下所示:
C:\>net?helpmsg?1326
登录失败:?未知的用户名或错误密码。
这时,需要检查一下mount命令后面的-u:user和-p:password这两部分是否正确了。
?
Q:在挂载nfs共享目录时,mount.exe报85错误,是什么原因?
Network?Error?-?85
Type?'NET?HELPMSG?85'?for?more?information.
A:根据提示,使用net helpmsg看一下,如下所示:
C:\>net?helpmsg?85
本地设备名已在使用中。
这是由于对同一个驱动器重复执行mount命令造成的,确认驱动器选择是否正确。
?
Q:创建目录或文件时报“拒绝访问”,怎么办?
A:首先打开“我的电脑”,在NFS映射的驱动器上按右键,打开属性对话框。切换到NFS?Mount?Options页,看显示的UID和GID是否为0,可能你看到的是-2。关闭属性对话框之后,在驱动器上按右键,选择“断开”,然后参照上一节重新设置。
如果看到NFS?Mount?Options页显示的UID和GID都为0,那么就要到NFS服务端去查找原因了。比如,检查一下共享目录的属主和组是否为nfsnobody,参见前面的章节。
?
Q:怎样做到登录Windows之后自动启动NFS?
A:按照4.2创建nfs.bat脚本,然后复制到“启动”目录(我的XP系统是“C:\Documents?and?Settings\Administrator\「开始」菜单\程序\启动”目录)。在登录之后就会自动挂载nfs共享目录。如果需要确认是否成功,打开c:\nfs.log看一下。
?
Q:怎样做到启动Windows之后自动挂载NFS,而不管是否登录?
A:这个就有点难了。本人试验了如下两种方式,都无法成功的挂在nfs共享目录。(奇怪,手工直接执行nfs.bat就能成功)
(1)安装Windows Resource Kits,里面有instsrv.exe和srvany.exe两个程序,制作了系统服务MountNFS,用来执行nfs.bat脚本。
(2)设置“任务计划”,执行文件为nfs.bat,触发条件为“计算机启动时”。
最后,只能将XP系统设置为自动登录才得以解决,不算很完美。具体如下:
先按照上一个问题中所述,将nfs.bat复制到“启动”目录。
然后执行“rundll32 netplwiz.dll,UsersRunDll ”,在弹出的用户账户对话框中,把“要使用本机,用户必须输入用户名和密码(E)”前面的钩去掉,然后点“确定”。这时,会提示输入账号和密码,输入好之后保存就行了。下次启动机器就会直接登录,而无需手工输入账号和密码了。
因为自动登录Windows之后会自动去执行“启动”目录的nfs.bat脚本,也就会挂载nfs共享目录了。
?
Q:怎样才能在Windows下用程序访问文件服务器上的文件?
A:在Linux下文件/vmsnfs/subdir/file.wav,可以直接访问,在Windows下在路径前面加上N:无法访问N:/vmsnfs/subdir/file.wav,必须要把路径里面的vmsnfs去掉,变成N:/subdir/file.wav才能访问。这样程序处理起来稍微有点麻烦。
如果在Linux文件服务器的共享目录上创建一个名为vmsnfs符号链接,就可以用N:/vmsnfs/subdir/file.wav来访问了,具体做法如下:
cd /vmsnfs
ln -s . vmsnfs
?
Q:文件服务器重启之后,Windows上mount的nfs共享目录还能继续正常访问吗?
A:有待试验。
?
点击下面的链接查看本文其他部分内容:
1?NFS概述及实例
2?Linux下NFS服务端的设置
3?Linux下NFS客户端的设置
4?Windows下NFS客户端的安装及设置
?
END.
?