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
或發送郵件 [email protected]
如發現BUG,可在CSDN或者GitHUB上提出來,或者發送郵件 [email protected]
開發這個軟件的過程是曲折漫長的,也是當時研究文件過濾驅動時候的產生的想法。
同時也是爲了解決自己在工作和娛樂中經常需要快速和方便的訪問各類文件服務器的問題。
這個程序的基本功能是把對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程序,
反正都是後臺服務在運行,等需要修改或者卸載的時候,再打開。