Windows和Linux文件系統(tǒng)級別掛載

十年前,業(yè)界流行用samba/ftp/nfs互訪windows/linux

今天,可以通過ssh掛載任何Linux目錄,變成windows下一個native驅(qū)動器(驅(qū)動級加載,真正native,不是模擬出來的,其他方式的局限性下文解釋)

要實(shí)現(xiàn)掛載,windows上運(yùn)行一個程序即可(源碼/編譯好的程序見文末),而Linux上沒有任何要求( 因?yàn)閟sh是Linux標(biāo)配)

試想一個使用場景:2臺電腦,一個win一個linux, windows上visual studio, mingw, eclipse.../linux上openoffice,eclipse..

如果可以通過網(wǎng)絡(luò)2個環(huán)境可以像使用本地文件一樣,打開和編譯代碼、文檔,跨平臺代碼立馬編譯運(yùn)行,DEBUG,豈不妙哉?

一般性的解決方案無外乎這樣幾種:

  1. linux裝samba,變成windows共享目錄,需要裝很多包,若以后需要掛多臺LINUX,豈不是個個都要裝SAMBA?況且我另外一臺電腦是Gentoo,需要多很多包,意味著編譯很多代碼,可以達(dá)到目的但不符合我KISS風(fēng)格

  2. 用NFS互訪。 Linux上NFS開服務(wù),windows掛載成網(wǎng)絡(luò)驅(qū)動器,或者windows開NFS服務(wù),Linux直接mount。
    但是windows上native的方式是安裝file service組件(我的windows是2008 R2),做NFS服務(wù)器時windows是不支持UTF-8的,意味著linux下掛載的中文目錄文件名無法正確顯示,用haneWIN NFS Server可以解決這些,但是跟原有的file service組件不能同時存在,因?yàn)閚fs需要rpc,而rpc在file service是在windows服務(wù)注冊保護(hù)的,當(dāng)然,windows下的老鳥可以手動干掉bind 111端口的rpc服務(wù),不過這樣就把系統(tǒng)的nfs server搞殘了。從Linux掛到windows上沒問題,但反過來,windows上NFS掛Linux,總遇到權(quán)限問題,掛載但無法訪問,試過了注冊表修改nfs client anonymousUid等等,no luck

  3. 用sftp掛載驅(qū)動器到windows上,目前這樣最簡單,系統(tǒng)依賴最小。 對Linux來講,只需要SSH服務(wù)開啟,無需任何其他服務(wù)。

在開始折騰之前,先定需求:

  1. 速度快,幾千個文件/目錄列表,不要讓人等半天
  2. 可以save每個driver的profile,支持mount多個drivers
  3. 像模像樣的塊文件系統(tǒng),不要什么在EXPLORER EXTENSION出來,又或者M(jìn)OUNT成NETWORK MAPPING這樣的映射驅(qū)動器,因?yàn)槲乙肨RUECRYPT之類的驅(qū)動級工具,其他高層次的“驅(qū)動器”,在TRUECRYPT加載時是不可見的!

試用了無數(shù),靠譜的如下:

DirectNet Drive : 免費(fèi),驅(qū)動級,符合要求,sftp/ftp/webdav都支持,而且可以用http/socks代理,版本1.2.5(2010.11)后就不維護(hù)了,但問題是,我只需要用sftp,而且它的BUG是無論如何也不能指定sftp的目錄,統(tǒng)統(tǒng)是從/下mount
http://www.directnet-drive.net/

Sftp Net Drive : 免費(fèi),驅(qū)動級,功能非常強(qiáng)大,人家是專門做文件系統(tǒng)的,Net Drive只是個副產(chǎn)品,完全滿足需求,還有其他高級選項(xiàng)(加載成各種驅(qū)動器類型),但是免費(fèi)版只能加載一個驅(qū)動器,收費(fèi)版給錢才給提供下載,搜不到收費(fèi)版,更別說破解版了。
https://www.eldos.com/sftp-net-drive/

ExpanDrive,收費(fèi),應(yīng)用級,找了個2.4.0破解版,功能類似Sftp Net Drive般豐富,可惜速度慢(因?yàn)槲椅募夸洷容^多),在TRUECRYPT中不可見,不過一般應(yīng)用是沒問題,特別是有需要把s3/ftp等等映射成本地驅(qū)動器的,推薦使用。
http://www.expandrive.com

Dokan : 開源,fuse在windows上的一個實(shí)現(xiàn),驅(qū)動級。 有很大自由發(fā)揮余地。 但是其他文件系統(tǒng)模塊需要自己寫,比如需要sftp需要自己實(shí)現(xiàn),工作量大。 外圍有人寫了個DokanSSHFS,BUG比較多,刪除目錄時,竟然不能刪除子錄!
另外的實(shí)現(xiàn)win-sshfs,2012年5月提交一次代碼后就沒更新了,刪除文件目錄,而后刷新又出現(xiàn)了!
http://code.google.com/p/win-sshfs/
http://github.com/apaka/win-sshfs

由于暫時找不到替代品,只好把代碼check下來,修修補(bǔ)補(bǔ),現(xiàn)在可以用了。
ssh用的是.net的實(shí)現(xiàn) 雖然不是c而是csharp的,但性能應(yīng)該不會太差(比Expandrive用的python實(shí)現(xiàn)ssh好多了)。

老的win-sshfs用的SSH.NET Library是2010年的版本,讓我給換成最新代碼開發(fā)庫的rev 34720版本了
http://sshnet.codeplex.com/SourceControl/list/changesets

修復(fù)的BUG:
修復(fù)了缺少盤符“Z”
修復(fù)了git不能在映射盤上使用
修復(fù)了在目錄下右鍵不能創(chuàng)建其他文件

修復(fù)file locking相關(guān)API(ms office打開.doc文件/svn/hg需要調(diào)用LockFile/UnLockFilGetFileSecurity)

使用方法:

  1. Linux sftp服務(wù)器需要打開密碼驗(yàn)證,確保/etc/ssh/sshd_config中“PasswordAuthentication”為“yes”,重啟sshd
  2. 打開sshfs.exe,點(diǎn)add,新建一個profile,填寫IP,端口,用戶名,密碼,目錄,盤符,點(diǎn)保存
  3. 點(diǎn)Mount按鈕,如果順利的話系統(tǒng)就會增加一個驅(qū)動器,并且Mount按鈕會變成Unmount
    Enjoy!

項(xiàng)目源代碼:http://github.com/truthtracer/sshfs4win.git
編譯好的可執(zhí)行程序(csharp實(shí)現(xiàn)):http://download.csdn.net/detail/truthtracer/7071881 (CSDN更新資源不方便,建議自行編譯源代碼得到最新的版本)
Report Bus via : TruthTracer@gmail.com

【原文出處】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容