2010年9月26日 星期日

電腦備份的兩三事 -- 漫談 Time Machine


一個多月前,有個朋友的電腦出問題,一些程式整個掛掉或是出現異常,於是我就去她家裡幫她看看。想當然耳,電腦裡面的東西亂放是一定的,防毒軟體過期好幾個月、掛掉的程式就算重灌也沒用 ..... 又因為很多人的通病,把重要檔案都放在 C 槽、謎版程式沒光碟而且灌在 D 槽 .... 所以我也不能直接重灌系統,搞到最後根本沒做什麼就回家了。Windows 的登錄檔及 dll 檔全部雜在一起,而且牽扯甚深,不重灌根本治不好,但諷刺的是,Windows 明明就是一個很需要重灌的系統,但卻很落後地要把整個磁碟分區幹掉才能重灌,而系統預設的檔案存檔路徑都是指向系統槽,使得情況更加惡化,讓重灌這個 "最後手段" 變得難以進行。

後來過了一段時間,那個朋友跟我說她家電腦的 power 燒掉了,現在什麼都沒了,硬碟要拿去給資料救援的公司看,可是超貴 ........ 我就問她說 "妳電腦裡的資料完全沒有備份嗎 ?",她冷冷地回我 "你覺得我們有可能做這種事嗎 ?"。

就是上面這句話,造成 Time Machine 的誕生。事實上,不管是哪一國,不懂電腦的人絕對比懂電腦的人多得太多了。但這也不奇怪,因為電腦只是個工具,並沒有了解它的必要,只要它能好好地完成工作就好了,就像個家電,你會想知道電鍋內部的電路是怎麼接,以致於它可以煮飯嗎 ? [1] 而一般人若沒有基本的電腦常識,根本不會安裝備份軟體,而且就算裝了也很容易忘記用它,或者是懶得去用。有些軟體廠商會把該公司生產的備份軟體在安裝時加入背景執行,可是這樣非常耗資源,而且如何處理備份的檔案是一大問題。手動的備份軟體沒有問題,反正就是把最新一版的檔案打包起來,可是如果是在背景執行的備份軟體,每次這樣打包沒過多久就把硬碟灌爆了,別忘了硬碟是一直在新增 / 移除檔案的。要解決上述的問題,就是要能找出檔案的刪減情形,要馬就定期掃描全系統,可是這樣更耗系統資源 (spotlight 做 index 時有多 lag 應該時有所聞吧,這裡的意思就差不多那樣);不然就是從 Kernel 控制硬體的 I/O 下手,可是這樣會讓每一個動作都花兩倍的時間,因為備份軟體時時在運作。最後,備份檔案有沒有其它的用途 ? 只能拿來做系統或資料還原嗎 ?

從上面那些顧慮來看,備份軟體真的是一大學問,但這也看出 Time Machine 的設計有多麼傑出。
  1. 設定的介面很簡單,設定好之後,插上備份用的外接硬碟就自動幫你備份
  2. 若一直接著備份硬碟 (也許是內建硬碟的另一磁區),會自動幫你定時備份
  3. 自動找出與前一次備份的差異,只備份不同的地方,不會重複備份。
  4. Time Machine 本身的使用者界面提供使用者去備份檔裡找以前刪掉的資料,以及備份的系統檔提供系統還原的功能
沒有做資料備份的人在出事後最常說的話就是 "我知道要做備份阿 .... 可是我沒做 ...." 上述四點不僅道出 Time Machine 在功能上的優異之處,而且也證明 Apple 想簡化 "資料備份" 這個動作的用心,只要做一次簡單的設定,之後插上備份碟就是了,想去備份碟裡撈舊資料也有專門的界面可以用。先來看看 Time Machine 的介紹影片 :


看起來真的很神奇,但它是怎麼辦到的呢 ? 為何 Tiger 不能用 ? 主要的重點有兩個 :

1. FSEvents
其實這個功能在 Tiger 中已經出現,位置在 /dev/fsevents 裡,它的功用就是觀察 kernel 所掌管的所有 I/O 狀況,像個電腦螢幕不斷地把資訊呈現出來,但不做任何處理。Tiger 裡的 Spotlight 就使用這些資料來建立檔案的 index,但是硬碟的讀寫常常比想像中還要頻繁,所以 Spotlight 在用 fsevents 的資料時常常會造成 kernel 處理過程的大塞車,不好好管一管就會當掉,因此有時會發現剛建立好的檔案無法被 Spotlight 找到,除了 Spotlight 本身反應不夠快之外,主要是因為那個資料的 index 過程在塞車中被遺棄了,要等下次開機才會重新建立當初遺漏的 index。

在 10.5 Leopard 中,Time Machine 不用上述的方法,因為它不需要時時刻刻地備份檔案,只要 "定時" 即可,故 Apple 在 Leopard 中安排一個 daemon "fseventsd",專門將 fsevents 的資料寫成 log 檔,之後再定時依照 log 檔的記錄,在背景啟動 Time Machine 進行備份。是的,就差在這個簡單的 daemon,做的事情也不過是寫個 log 檔,卻把所有該解決的問題都解決了,而且也避免 Time Machine 有像 Spotlight 一樣遇到塞車就會漏東西的缺陷。

2. Hot link
這是在 Time Machine 備份磁區中,儲存檔案的方法,先看看下面這張圖 :


你會發現備份檔案排列地非常整齊,是以時間來分資料夾的,裡面有當下全部的檔案 !!! 可是神奇的是,檔案並沒有重複地儲存在硬碟裡,而是以 hot link 的形式散布在各個資料夾中。hot link 是 Unix 系統中的一種檔案連結功能,與 soft link 與 alias (替身) 不同,本身並不是一個獨立的檔案 (soft link 及 alias 至少還有個幾 KB ....),只是將檔案中的資料部份指向不同的路徑跟檔名,換句話說,某些檔案出現在好幾個資料夾中,若它們是以 hot link 連結,那它們在硬碟中所佔用的區塊都是同一個,沒有多耗費不必要的硬碟空間。

有個終端機指令 "ls -l" 可以查詢檔案的 hot link,下面是個例子 :

-rw-r--r--   2 Chris 894 Oct 18 10:04 fileA
-rw-r--r--   1 Chris 897 Oct 18 10:06 fileB

帳號前面的數字代表 hot link 的數目,一般的檔案都是 1,像 fileB;若是 2 則代表同樣的資料指向兩個不同的路徑或檔名,fileA 是其中一個。而我之前逛網時看到的一篇文章 "刪除 Time machine 舊的備份資料" 就是將其中一個日期的檔案殺掉,但其實騰不出多少硬碟空間,因為刪除的時候只是將 hot link 的連接數減 1 而已,要減到 0 才是真的砍掉該檔。

==================================

Time Machine 是一個很難得的備份工具,充滿了設計者跟工程師的巧思,即使它還有不小的改進空間,但還是瑕不掩瑜。建議所有使用 Mac OSX 10.5 later 的人都使用它來備份系統,Apple 特地為使用者設計了一個簡單易用的備份系統,不用真的太可惜。

話說從 Vista 開始,Win 也有內建一個備份軟體,我實在無法評論它,因為我根本沒聽過有人在用,到現在還是不知道它有什麼功能 ......


附註
1. 想當年我看過一個廣告,裡面的廣告詞是這樣的 "我才不管電腦怎麼工作,我只要它好好地為我工作 !" 十分貼切,數位生活就該進步到這樣,這也是 Linux 一直推不起來的原因。

2 則留言:

  1. 推! 網上查了很多Time Machine的資料,難得有像這篇,細究其中原理的。

    這才知道TM厲害在那裡。

    回覆刪除
  2. 感謝支持阿 ~ :P

    這篇文章參考了國外網站的技術文章,以及一些使用者的經驗分享,除了內部的技術原理很有趣之外,也順便讓此類枯燥主題的文章更貼近生活。我個人認為這樣的文章看起來比較輕鬆,且不會流於內容空洞。 :D

    回覆刪除