by fanxishu 2016-12-22
开始之前,先提供程序包的下载地址:
CSDN上的下载地址:
http://download.csdn.net/detail/fanxiushu/9719017
GITHUB上的下载地址:
https://github.com/fanxiushu/xFsRedir/raw/master/xFsRedir-1.0.0.1.zip
这个是1.0.0.1版本,如果寻找新版本,请关注:
https://github.com/fanxiushu/xFsRedir
或发送邮件 fanxiushu@163.com
如发现BUG,可在CSDN或者GitHUB上提出来,或者发送邮件 fanxiushu@163.com
开发这个软件的过程是曲折漫长的,也是当时研究文件过滤驱动时候的产生的想法。
同时也是为了解决自己在工作和娱乐中经常需要快速和方便的访问各类文件服务器的问题。
这个程序的基本功能是把对windows平台某个目录的所有访问重新定向到
网络上的另外一个机器的某个目录,实现基本的网络文件系统。
比如A机器的某个 'D:\\dir' 目录,经过本程序,
被定向到 B 机器的 'E:\\' 目录,A机器上的任何程序访问'D:\\dir'的
内容,实际上是在访问B机器的 'E:\\' 目录。
本程序的工作原理是在内核驱动层,拦截某个目录如'd:\\dir'的所有请求,
然后转发所有请求到程序的应用层,再通过网络转发到B机器服务端程序。
驱动程序 xfs_redir.sys 是本人自主开发,驱动中无任何开源代码参合,
驱动实现了windows Cache功能,同时是细化到某个目录来拦截请求,
这是市面上大部分类似驱动所没有的,大部分驱动都只能重定向到一个新的虚拟盘符,
比如NetDrive,WebDrive等许多类似软件,他们都只能虚拟到新盘符。
因此,你可以像linux挂载文件系统那样,随意在某个目录下挂载新的目录,
也可以多级的复杂挂载,
比如 'd:\\Path1' 挂载到S1服务器,'d:\\Path1\\Path2' 挂载到S2服务器等,
从而实现一个复杂的小型分布式文件系统。
断断续续的开发,以及断断续续的调试本驱动的BUG,延续的时间比较长,即便如此,
也不敢保证本驱动代码不存在BUG,以及在某些特殊应用程序调用特殊WIN32API
时候,不会造成本驱动蓝屏崩溃。
正如在CSDN上的文章所讲述的,
文章内容见如下连接:
http://blog.csdn.net/fanxiushu/article/details/43636575
http://blog.csdn.net/fanxiushu/article/details/43845699
http://blog.csdn.net/fanxiushu/article/details/44737171
http://blog.csdn.net/fanxiushu/article/details/52681705
以上连接都是阐述这个软件的核心原理,虽然后来的驱动版本改变比较大,
但是基本原理是一致的。
这篇文章应该算不上探讨技术的文章,而是描述这个软件如何使用,
以及它的工作原理。
开发过程其实是比较艰辛的,尤其是驱动,花了几乎绝大部分时间来调试和测试,
先做了个初始版本的驱动,结果使用起来问题挺多,然后再重新开发,改变某些结构,
增加功能,断断续续的进行。也有遇到许多问题,放弃某些功能之后,
过段时间再重新添加这些功能。
比如windows的Cache功能(对应驱动的Cc开头的函数库),开始时候没有做Cc处理,
后来添加了,因为理解不到位,问题多,驱动工作不起来,然后放弃。
再然后又不断的研究fastfat等代码中关于Cc函数库的使用情况,再添加进去,
Cc最难理解和调试的,就是它的两个资源锁Resource和PagingIoResource,
经常造成系统死锁。因为处理的是请求转发,跟fastfat处理方式又有些不同,不能完全照搬。
即便现在,有些功能也没实现。而且目前知道的有个功能不能正常使用,
就是被重定向的目录是不能作为windows共享文件夹使用的,什么原因暂时还没找到。
再来看看这个软件有何用处。
当我们使用windows操作系统作为工作利器的时候,往往会经常访问公司文件服务器,
或者访问自己多个云存储上的内容。
当然,可以使用一些通用的工具,比如FTP客户端,浏览器等等。
但是当要访问的文件服务器有点多,而且也挺杂,
比如FTP文件服务器,HTTP文件服务器,云存储服务器,windows的文件夹共享服务器等等。
每访问一个,就得做不同的切换,当你工作需要在各个文件服务器上处理数据的时候,
这种切换往往感觉很烦,因此,就希望有一个统一的东西,最好是把这些文件服务器目录
映射到自己电脑的某个目录下,然后可以随意操作,就跟访问本地目录一样。
再比如,当你在家使用windows平板或者笔记本看视频,家里有个NAS存储设备,可以存储很多的电视剧和电影,或者家里有个强大的PC机器,PC机器上的硬盘空间也很大,
有10几个TB,上边有很多数据,但是你的笔记本或者平板的硬盘空间非常有限。
很希望把PC机器的硬盘空间扩展到自己笔记本电脑中,当然可以使用windows文件夹共享方式来访问PC机器,但是这样达不到把PC机器硬盘和笔记本系统融合的效果。
以上的各种要求,自然还包括没提及的,就是本软件可以帮助解决的问题。
举个本人特殊使用的例子,
开发linux程序的时候,源代码基本都是在windows平台下编辑的,
利用windows平台提供的强大编辑功能,开发cpp,h,c等源代码,
然后上传到linux系统中,再gcc编译调试。
因为非常不习惯linux的界面环境和他的代码编辑环境。
所以最开始的做法,是在linux架设一个FTP服务端,windows再弄个FTP客户端,
每次修改好的源代码都拖到FTP客户端程序去上传,然后再linux编译。
有时嫌架设FTP麻烦,直接调用linux中的rz,sz命令来传输单个文件。
可能会问,为什么不使用cvs,svn,git等同步软件,当你要在多个平台编译,
而且源代码基本就是你一个人管理的时候,你会觉得这些同步软件就是累赘,
架设他们比架设简单的FTP服务端还麻烦。
现在有了这个目录重定向程序,这一切就变得非常方便,利用这个程序,直接通过sftp协议,
重定向linux的代码目录到本地一个目录中,然后windows中用编辑源代码的软件
直接打开这个目录中的源代码,编辑修改,然后保存,再回到linux上编译。一切就这么简单。
如果gcc编译指示某行出现编译错误,立马在windows平台中定位到这个源代码的那一行,
修改保存,接着再编译,可以说是非常的方便。
往往在程序开发中,各种源代码要在各个不同系统的机器上copy,
利用这个程序能帮我解决许多源文件复制的麻烦。
软件包中包含如下几个文件:
xfs_redir.sys (xfs_redir32.sys) 这个是驱动部分,负责核心的文件目录数据转发功能
xFsRedir.exe 处理驱动数据,并且通过各种网络通讯协议跟远端的文件服务器交互数据。
目前支持得通讯协议有PRIVATE, NSF, SMB, FTP ,SFTP, WEBDAV等7,8种。
xfs_rdsvr.exe这个是支持PRIVATE协议的windows服务端程序,
这个是可选的,如果能用其他网络文件协议,尽量使用其他的。
程序完全属于绿色软件,不需要安装,只需要把程序放到某个目录下,
驱动文件必须和xFsRedir.exe放在同一个目录中,直接运行xFsredir.exe,
开启服务并做些配置即可运行,配置也是很简单,无非就是添加一些需要被重定向的目录。
程序主界面如下:
一开始的时候,“状态”里边显示的驱动和服务,都是未安装的状态,
这个时候,点击“加载服务”的按钮,等到驱动和服务都显示Running状态,
这表明驱动和服务都已经正常运行了。这个时候软件就能正常使用了。
如果只是要卸载服务,点“卸载服务”按钮。如果要删除驱动并同时卸载服务,
点“卸载驱动”按钮。
如果驱动正在运行的话,需要重新启动系统,才能真正从系统卸载驱动。
之后就可以添加监控目录了, 点击“添加新监控目录”按钮,弹出如下界面:
“本地监控目录”,填写需要被重定向的目录,可以点击“浏览。。”按钮选择一个存在的目录,
也可以在编辑框中手工输入一个不存在的盘符和目录,比如K盘符不存在,可以在编辑框
输入 K:\ ,这个时候程序会创建一个虚拟磁盘K,并且整个虚拟磁盘都被重定向,
这个时候的功能就跟市面上大部分软件一样的效果:目录定向到一个新的虚拟磁盘。
或者输入 K:\DIR,这个时候,就只有 K盘下的 DIR目录被重定向。
然后就是选择通讯协议了。
目前程序列出来的协议有如下8种:
一,PRIVATE协议,这个是最初开发这个驱动的时候,没想到还能支持很多公开
的网络文件系统协议而自己定义的TCP层上的简单和方便的私有网络文件系统协议。
二,NFS协议,这个是广泛使用在UNIX操作系统之间的网络文件系统协议,
windows服务器版本支持NFS服务端,同时也有免费的windows平台的NFS服务程序。
三,SMB协议,这个就是大家非常熟悉的windows的文件夹共享,能在各个windows
系统或者linux,macOS系统直接进行文件共享,
四,SFTP协议,如果非常熟悉linux的ssh登录,会非常熟悉这个协议,凡是linux
系统,都会默认安装ssh。
五,FTP协议,古老而方便的文件协议。
六,WebDAV协议,目前有些网络云存储支持这个协议,比如坚果云或者box等。
七,Baidu PCS,这个是百度云存储接口,但是可惜不再提供支持,
当初开发的时候,从网上使用了别人的wp2pcs的授权,可惜开发完成后,
没用多少时间,就好像被百度屏蔽了,因此,是个鸡肋。
八,GitHUB,这个是国外比较出名的代码托管网站,之所以开发这个,因为偶尔会在
上边托管些程序,但是它的接口并不完全符合文件系统的API,
比如就没有rename等功能。
每个协议的服务端配置,相信熟悉这些协议的人都会配置,因此这里就不赘述。
举个例子,WebDAV的配置,比如坚果云得服务URL是:
https://dav.jianguoyun.com/dav在界面的“服务端IP或URL”填写这个URL,
然后填写上你在坚果云注册的用户和申请的WebDAV密码。
就能访问坚果云得云存储了。
这个是国内唯一支持WebDAV协议的云存储服务,不过有点可惜,
他并不怎么稳定,有时甚至无法访问。
当然可能包括我对他的webdav访问文件路径信息,没做长时间缓存,访问有点频繁。
因为本软件是把网络文件目录映射到本地目录,作为本地系统目录的一部分,
是需要网络通信畅通的,如果网络通信不太好,会造成访问效果十分差劲,
甚至影响本地操作系统的整体效率。
至于BaiduPCS,这个是当时开发时候,百度已经终止PCS了,只好借用了wp2pcs授权,
刚做好时候,感觉速度是挺快的,比坚果云快多了,毕竟是百度就是做搜索出身的,
有庞大的存储系统和较好的处理速度。可惜后来被屏蔽,没得访问了。
可能是运气不太好,我在接入这些云存储服务的时候,正是中国云盘大量倒闭的时候。
不过本软件不是为这些云存储开发的,主要目的是用来搭建自己的分布式网络文件系统。
开发GitHUB,主要是为了我方便把某些代码或程序,直接拖到监控目录,这样就能快速上传了。
不过大家也知道,国内访问这个网站,速度也是非常慢,也是有时也连接不上,
所以没事大家也不要用这个软件连接到GITHUB了。
再看看“路径缓存超时“,这个选项是因为windows文件系统中,
操作系统对文件属性的查询是非常频繁的,频繁到何种程度,
这么说吧,一个简单的打开操作,可能会查询文件属性5,6次之多。
因此不可能每次对文件属性信息查询都发送到服务端,总要缓存一下,直到超时为止。
这个就是这个“路径缓存超时”的由来。
当你的网络通信不太好,可以把这个值设置得稍微大一些。
但是缓存也有个弊端,比如如果在5秒内,别的机器的程序改变了服务端某个文件软件属性,
再这5秒内,本程序是无法知道文件属性已经改变了的。
“IO线城数“是开启的读写线程个数,5-10个就差不多了。
“服务器跟目录” 这个是可以把本地目录重定向到服务端的某个子目录之下。
“查询超时”和“读写超时”是发生的网络请求的超时时间值。
“服务端路径使用UTF8编码”这个对应的比如linux平台的服务端,
中文文件名都是采用UTF8编码的,而在windows是GBK编码的,因此这中间需要转码。
“服务端路径使用小写字母“ ,文件路径名会全部转成小写字母。
程序的使用就这些,配置好之后,可以直接关闭xFsRedir.exe程序,
反正都是后台服务在运行,等需要修改或者卸载的时候,再打开。