關於網路儲存空間的同步化


首先,這篇算是 Heresy 自己在找 Windows Live Mesh 這個檔案同步系統的取代方案的紀錄,主要算是針對 DropboxBox 的 Windows 同步軟體做了些測試、並記錄一些感想了。

前言

現在這個年代,喊「雲端」好像已經變成一種趨勢了?而也有不少公司,都有推出所謂的「雲端硬碟」,可以當作網路儲存空間來用。比較有名的,除了 Google 的「雲端硬碟」、微軟的 SkyDrive 外,還有像是 DropboxBox 都算是滿有名的~

基本上,由於 Heresy 在以前都算是微軟派的用戶,所以從很早期、SkyDrive 剛推出、只有 500MB 容量的時候,Heresy 就有在用了~而後來,微軟也陸續地在上面附加各式各樣的功能,包含了相簿的整合、Office Web Apps 的出現,也都算是幫她加值了不少。雖然在線上文件的編輯的部分,還是比不上 Google 文件改版過來的  Google 雲端硬碟,但是就顯示的部分、以及他和 Office 的良好整合,也算是滿實用的了。

而在和電腦的檔案同步方面,Heresy 則是使用微軟的「Windows Live Mesh」(本來叫「Windows Live Sync」、介紹);他雖然也算是 Windows Live 的一部分,但是儲存的空間卻不是和 SkyDrive 算在一起、而是另外獨立的。透過這個軟體,Heresy 可以很簡單地、把不同電腦上的許多個資料夾(例如:Windows Live Messenger 的對話紀錄、IE 的我的最愛等等)透過網路空間來做同步、維持檔案的一致性,算是相當方便的~

但是很可惜的,是前一陣子新推出的 Windows Essentials 2012 已經用功能弱到不行的 SkyDrive 專用的同步軟體,來取代本還算滿好用的 Windows Live Mesh 了…雖然目前 Windows Live Mesh 還是可以使用,但是以微軟最近的玩法來看,應該過不了多久,也會完全取消吧…


現有問題

也因此,Heresy 現在也開始尋找,可以取代 Windows Live Mesh 的替代方案了;基本上,Heresy 的需求其實滿簡單的,就是「可以同步電腦上不同的多個資料夾」。而 Heresy 試著去玩的,則包括了 Dropbox(因為感覺他好像最有名?)、以及 Box(因為 Sony Android 手機用戶可以有 50GB 的容量 XD)了;這兩者官方都有提供對應的同步軟體(DropboxBox Sync)可以使用,Heresy 也都是用官方的軟體來做測試的。

首先,如果單就這兩者的同步軟體來說,Heresy 覺得算是各有優缺點;不過基本上,都不能滿足 Heresy 的基本要求…因為,不管是 DropBox 或 Box Sync,都只能同步單一資料夾!他們的基本設計概念,就是把網路空間整個對應到電腦的某個特定資料夾,雖然可以設定那些資料夾要同步,但是基本上要同步的東西,都必須要放在單一資料夾下才行…相較之下,之前的 Windows Live Mesh 可以直接指定要同步電腦上的某些資料夾(註 1),Heresy 是覺得比較實用的…不過基本上,這點算是軟體設計定位上的不同了。


解決方法

如果沒辦法設定多個資料夾,那該怎麼辦呢?如果在網路上搜尋的話,可以發現有不少人也有類似的需求,所以也有不少相關的討論。而一般來說,解決的方案,就是透過檔案系統的「Symbolic Link」來做了!相關的解釋,可以參考維基百科

在 Windows Vista 以後的作業系統,都有內建 mklink 這個指令,可以用來建立 symbolic link 或 hard link(微軟的說明);基本上,Heresy 是覺得比較簡單的想法,是可以把它當成一種更底層、更通用的「捷徑」來看(註 2)。只要在要同步的資料夾下,建立其他外部資料夾的 symbolic link 之後,同步程式就可以針對 symbolic link 所指到的原始目錄進行同步了~他的指令基本上就是類似:

mklink /D C:\Users\Heresy\Dropbox\Test Z:\SyncData

在上面的例子裡,「Z:\SyncData」就是要進行同步的資料夾,而「C:\Users\Heresy\Dropbox\Test」則是要建立的 Symbolic Link;前面的參數 /D,則是告訴系統這是一個資料夾。不過這邊要注意的是,mklink 這個指令似乎是需要系統管理員權限才能執行的~

雖然這樣做之後,好像可以同步了?但是似乎是 symbolic link 的資料夾在 Windows 下和一般的資料夾還是有些運作模式上的不同,所以基本上,symbolic link 的資料夾內的變更,基本上都不會被 DropBox 或 Box Sync 這種同步程式偵測到…也因此,雖然在建立之後,同步軟體會把 Z:\SyncData 都做同步、傳到網路空間上,但是之後的變更…基本上似乎只有在重開機的時候,才會被自動偵測到、而進行同步。

其中,Box Sync 是就算自己知道有變動,手動去要求強制同步也不會更新,完全不知道該怎麼辦…而 DropBox 則稍微好一點(註 3),它雖然沒有強制更新的功能,但是可以透過先停止同步、再重新開啟,來同步有變化的檔案;不過有的時候停止後似乎會再起不能,要把整個程式關掉重開才行。認真講,這樣的同步也就只是半調子了…

而要怎麼解決無法自動同步的問題呢?基本上,一般看到的建議解決方法,就是:「把要同步的資料夾搬到同步資料夾內,然後在本來的地方建立 symbolic link」。基本上,目前也已經有一套叫做「Dropbox Folder Sync addon」的軟體,可以幫助 DropBox 的用戶、來自動完成這樣的設定了。

雖然這樣的確可以解決無法自動同步的問題,但是說實話…Heresy 還是覺得這個解法不是很漂亮就是了。因為某方面來說,他有可能會破壞本身的檔案布局啊…不過,在沒有其他解法的情況下,似乎也只能這樣玩了?


後話

Heresy 自己也在想,不知道有沒有什麼第三方軟體可以符合 Heresy 這樣的需求,達成 Heresy 的目標?不過目前似乎沒發現…

另一方面,Heresy 也有在考慮,要不要自己透過 DropBox 或 Box 提供的 API(DropBox REST APIBox API)、試著寫一個符合自己需求的程式出來?不過由於真要寫的話,要考慮的事情還滿多的(註 4),所以總覺得…真得下去寫的機率應該有點低就是了…


註解

  1. Box Sync 的資料夾同步設定,基本上是設定在 Web 端,所有電腦會同步相同的資料夾,不能個別進行設定;相較之下,DropBox 則可以在每台電腦各自設定要同步那些資料夾,自由度比較高。

  2. 有不少程式都只會把 Windows 的「捷徑」當作一個附檔名為 lnk 的「檔案」來看,像是 DropBox 或 Box Sync 這類的同步程式,也會因此無法對此做檔案的同步;但是如果是 symbolic link 的話,大部分的程式都會把它當作一般的檔案或資料夾來做處理。不過,似乎還是有少部分的程式可能會無法正確處理 symbolic link 的檔案。

  3. 不過,在 Heresy 測試的時候,DropBox 在第一次建立的時候,衝突的狀況相當嚴重…明明已經有對應的資料夾了,他都會當作衝突的、然後強制改名,當作兩個不同的資料夾來做同步;雖然不是無法解蹶,但是要處理起來很麻煩…相較之下,Box Sync 在這方面的處理就比較好了。

  4. 其一是如果要寫的話,Heresy 會想用標準的 C++,來寫跨平台的版本。但是就算先跳過圖形介面,檔案變動監控的部分,不管是 STL 或 Boost 裡,似乎都沒有跨平台的方案;當然啦~也不是這樣就無解了,如果是要用 Nokia Qt 當圖形介面的話,他的 Core 裡就有提供 QFileSystemWatcher文件)可以用;而在 Google Code 上,也可以找到 simplefilewatcher 這個相對單純的跨平台檔案監控方案可以用。

對「關於網路儲存空間的同步化」的想法

  1. sugarsync可以自定好多個同步的資料,可惜,我免費玩了1年多,今年要收費了,我不玩了

    • 以本機的同步軟體來說,Heresy 用的是 AllwaySync,可以在有限制的情況下免費使用。
      而且他也有支援 DropBox 和 Box 等網路空間。

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料