在*nix挂载Windows下的文件夹

最初是为了学习Unix程序设计的时候,能够更加方便地使用虚拟机:因为我将NetBSD系统安装在虚拟机中。这样的话虽然能够通过FTP等方式传文件,但总之不是那么方便。如果能直接在Windows下共享这个文件夹,然后虚拟机里面用mount挂载的话,就方便很多,文件啥的全就都在Windows下了,平时日常用的是Windows,所以对我来说是方便。

1、NFS

最初最初我考虑的是NFS。因为在类Unix系统下,比起Samba来说NFS才是正统一点的办法吧。到网上搜NFS服务器,能搜出一些,试过的有FreeNFSd和WinNFSd。这两个无一例外都正常安装正常启动,还有一个相同点就是都在虚拟机里的NetBSD上挂载不起来。

我:mount_nfs 192.168.61.1:/ /root/host
它:Authentication error.

但是事实上不管是FreeNFSd还是WinNFSd,都没有任何给你设置身份认证的地方……就因为这个,昨天晚上trial and error持续到凌晨三点,最终支持不住放弃了。总之简单说就是,没搞成功。


2、Samba

搞不起NFS那就用Windows自带的共享吧。Windows自带共享其实也挺够呛的,因为这东西能设置的地方又很多,我又不熟。

除了对着文件夹右键选属性以外,在 开始——控制面板——系统和安全——管理工具——计算机管理 打开的对话框里面,找到 系统工具——共享文件夹——共享,在里面可以空白处点右键选添加共享文件夹,这里看起来好像会专业一点,也能列出你共享的所有文件夹的列表。然后就是默认设置下,如果用来访问共享文件夹的账户没有密码,那么是不让访问的,所以如果不想给自己平时用的账户设置密码,那么还要重新创建一个用户。也是在这个对话框,系统工具——本地用户和组——用户 里面,可以空白处点右键选添加用户。用户添加之后,要确保这个用户可以通过网络访问共享文件夹,再回到刚才共享文件夹的地方,右键点击某个共享选属性,可以在“共享权限”页面里面的“组和用户名”里添加可以通过网络访问这个共享文件夹的用户,然后在“安全”那边允许这个用户访问此文件夹

这样搞过以后还不够,还要确认这样的共享可以远程访问。在 开始——控制面板——网络和Internet——网络和共享中心,左边选“更改高级共享设置”,检查一下对公用网络和家庭网络,“网络发现”和“文件和打印机共享”是不是允许,不允许的话也是没办法被虚拟机里挂载的。至于如果虚拟机所使用的网卡是公用网络但是不想在公用网络上开启共享(安全问题啊……),那么就把虚拟机的网卡改为私有网络即可。

更麻烦的事情是,虚拟机几张网卡在“未识别的网络”下,此时那个“公用网络”或者“家庭网络”是不能点的,所以改不了。网上找了一通,搜英文关键词的时候才搜出来。一个是这里( http://social.technet.microsoft.com/Forums/windows/en-US/7b0d5729-af12-4009-bec6-de877cd3fb2e/change-adapters-location-windows-7?forum=w7itpronetworking ),它说只有设置了默认网站的网卡才可以设置网络位置;一个是这里( http://www.sevenforums.com/tutorials/71408-unidentified-networks-set-private-public.html ),在控制面板——系统和安全——管理工具——本地安全策略 里面,找到“网络列表管理器策略”,可以直接把无法识别的网络的所属是公用还是私有给改了。不过这样就是一次性把所有“未识别网络”下面的网卡的位置改了。单个改的方法暂时还不知道……

这样搞完以后,Windows下访问自己的共享是没问题了,在虚拟机里的NetBSD里mount挂载的时候又开始trial and error。几经尝试找到了要怎么样才能挂载成功:mount参数里面那个server参数要用主机的NetBIOS名称,用IP地址行不通的。简单说就是,比如我电脑IP是192.168.61.1,主机名叫SoraYuki-PC,我在Windows用 \192.168.61.1\nfsshare 可以访问我的共享文件夹,用 \SoraYuki-PC\nfsshare 也可以访问。但是在NetBSD下挂载的时候,用 //sora@192.168.61.1/nfsshare 就挂不上,用 //sora@SoraYuki-PC/nfsshare 就能挂上。如果不放心那个SoraYuki-PC它能不能解析出来,直接用-I参数强制指定IP即可。比如这样:

mount_smbfs -I 192.168.61.1 //sora@SoraYuki-PC/nfsshare /root/host

关于NetBIOS计算机名,在开始——计算机点右键,选属性,然后左边的“高级系统设置”,在计算机名标签页可以设置和查看计算机名。

这条mount命令的-o里面不能像Linux下那样直接添加用户名密码的样子。不过可以在/etc/nsmb.conf 或者 ~/.nsmbrc 里面填入密码的样子,具体没试过,详细在 man mount_smbfs 里面可以看到。

在Debian下,要安装第一片DVD里的cifs.utils才能挂载,用的是mount.cifs,不知道为啥不是smb或者smbfs,也许在其他光盘里,或者联网在线安装smbfs的吧。我全程离线DVD安装,并且只下了DVD 1,最后装的是cifs.utils。具体挂载的时候因为不知道NetBSD下那个mount_smbfs的-I参数对应的是Linux下这个mount.cifs的什么参数,所以主机名直接往 /etc/hosts里面写了。

mount.cifs -o user=sora,password=aaabbb //SoraYuki-PC/nfsshare /root/host

user不能写在主机名前面,用 用户@主机名 的方式,会被当作主机名的一部分去解析。


3、SSHFS

虽然Samba搞成功了,但是折腾了这么久,还好麻烦。在饭否上被人一提醒,去搜了一下,才发现原来可以通过SSH挂载的。SSH有个SFTP协议,以前一直以为是FTP上加个安全的壳就像是HTTP和HTTPS的关系,再仔细分析不是这么回事。这货可以像NFS那样使用,于是就赶忙试了一下,下了一个FreeSSHd,添加用户、设置SFTP的home目录,在NetBSD下一挂就成功。命令行大概是这样

mount_psshfs sora@192.168.61.1:/ /root/host

一次就成功,感觉很省力。但是Debian的第一片DVDISO里面没有能挂载sftp的东西,要么在线安装要么去下其他ISO。而且这东西和samba不同,貌似不让你存一个密码在配置文件中的(Debian下不知道,NetBSD下是不行)。所以如果想要自动挂载,要通过public key / private key这种方式来。这种方式目前还没研究过,不太清楚整个过程。等之后有时间看看。

(FreeSSHd安装全程没看到有许可协议相关的东西出现,后来搜了一下发现确实是开源软件,不过和其他一些常见开源软件不同,它代码是要花钱买的)

发表评论