上期,本欄的內容簡要的說明了硬碟「為何是個精巧脆弱的系統」──因為硬碟的「硬體架構」和「軟體架構」都挺複雜,而複雜架構的東西總是精巧但脆弱的,並且順帶簡介了必要的硬碟「硬體架構」。既然上期講過了「硬的」部份,那這期我們就來點「軟的」。

這期,我們要說明「檔案系統」的簡單概念。

首先,我們先談談你對檔案系統的要求:
● 檔案可以任意增、刪
● 高效能
● 可靠
● 有複雜的管理功能(像是資料夾的分類能力)
● 安全(可以限制非必要的檔案存取)
一開始我們的要求不用那麼高,假設我們先只要能夠任意增刪檔案即可。

超單純的四個檔案結構
為了能讓各位理解檔案系統的邏輯概念,我仍舊先採用一個「簡化的,單純的」檔案系統作為範例。請各位跟著筆者的說明,思考一下檔案系統的運作原理。

假設你有四個檔案,檔案名稱分別就是A、B、C、D,大小分別是8個磁簇、10個磁簇、3個磁簇和9個磁簇。這4個檔案加起來,共佔用硬碟上30個磁簇的空間。



所謂的磁簇,英文名稱為「cluster」,你不妨把它視為是「磁碟裝置上,存放檔案內容的單位空間」。

想像一下,如果你要「讀取C檔案的內容」,該怎麼做?

就這個簡單的狀況而言,磁頭只要跑到C檔案所在的位置,第19個磁簇,依序讀三個磁簇的內容就可以了,想像的流程大致是這樣的。

使用者(透過作業系統)下命令讀取C檔案—>硬碟磁頭移動到第19個磁簇—>依序讀取3個磁簇的內容—>結束。

不過,這裡面有一個嚴重的問題。

作業系統不是「人」,它可不知道C檔案是放在第19個磁簇開始。

你要讀取檔案B,作業系統要從第9個磁簇開始讀取檔案內容。你要讀取檔案D,作業系統要從第22個磁簇開始讀取檔案內容。當我講這些動作的時候,我的眼睛必須不時要看一下那張配置表,看看檔案藏在哪裡。

所以,我可以告訴你,光是一個這樣的檔案系統結構,是不夠的。

檔案系統的真實情況
剛才是「檔案的內容都是連續存放」時的狀況。問題是,如果檔案的內容屬於非連續的狀態怎麼辦?

舉例來說,如果使用者先刪除了B檔案和D檔案,另外又存入了E檔案(大小為5個磁簇)和F檔案(大小為14個磁簇),這時候F檔案就會被迫放在非連續的兩個地方。這在任何檔案系統中都無法避免,因為檔案的增刪可算是磁碟系統的基本能力(光碟系統除外,因為光碟系統的讀寫作業很多時候是WORM,Write Once Read Many)。

為了要解決這種「檔案內容離散」的問題,Microsoft早期在設計DOS的時候,提供了兩個機制,一個稱為「File Directory」,一個稱為「File Allocation Table」。

我把File Directory簡化成只有兩個東西:「檔名」和「檔案內容所在的第一個磁簇」,只有這兩樣。不過,第一個磁簇的編號同時也指向File Allocation Table(簡稱為FAT)的空間,這空間裡面儲存了下個檔案內容存放的磁簇編號。如果裡面的內容如果是一個奇怪的樣式(稱為EoF好了,End of File),就代表檔案內容到此結束。用文字敘述各位可能看不懂,我們以上面的範例,做個簡單的追蹤給大家看(請參考下圖)。



請注意看F檔案的狀況,在File Directory裡面,它的檔案內容第一個磁簇是14,然後FAT表中的第14個欄位,放置的是存放F檔案內容的下一個磁簇編號,和FAT表中的下一個欄位編號(15),15指向16……,一直到第18個欄位,才指向第22磁簇和第22欄位,直到檔案結束。

這種「FAT地圖」的雙重鍊結概念,是Windows檔案系統中最重要的概念。

真實的世界
不過,真實的世界要比這複雜多了。
● 檔案的數量不會只有4個
現代的電腦,裡面的檔案數量莫說是400個,4,000個、40,000或是400,000個都有可能,真實的情況可說是沒人能預料,因此堪用的檔案系統得考量的問題很多。

● File Allocation Table(檔案配置表)會隨著磁碟「磁簇」的數量增加而變大,無論是數目還是尺寸都是
因此,一個磁碟的磁簇數量不能無限增長(這概念不容易想通,但實情就是如此)。所以Microsoft在DOS 1.0時代是使用FAT12(給磁碟片用的檔案系統);後來推出FAT16,一直沿用到Windows 95;直到Windows 95 SR2才正式推出所謂的FAT32。所以,後來NTFS就使用了一些新的概念,設法解決硬碟容量(和檔案容量)越來越大的問題。

● 檔案系統還有其他實作上必須考量的功能
像是「資料夾」的檔案管理機制,檔案「即時壓縮」的能力。「檔案保全」的能力,「檔名長度」的問題,各種千奇百怪的使用者需求必須考慮。

總而言之,如果你能理解檔案系統這種「多層鏈結」的結構,大概就具備了「各種問題」的基礎處理能力了。我必須強調,檔案系統的實作,複雜度絕對比我所述複雜千萬倍,但我們既然不必撰寫一個什麼Recover Studio之類的工具,也就不用了解到那種程度。但是,當你有機會需要使用那一類的工具,上述的概念你一定要牢記在心。

刪除檔案的Q&A
Q:請問,在Windows作業時,不小心刪除檔案時,可以救回來嗎?
A:可以的,但要注意很多事情。


首先,當你刪除一個檔案時,實際上,你得記住,「作業系統不會去把檔案抹除掉」。

比方說,如果你刪掉前述系統中的E檔案,作業系統所作的,只不過是把E檔案File Directory項目給做個記號,並把FAT空間釋放出來。

為何這樣做?作業系統為何偷懶?不是應該「刪除了就是刪除了」?不是應該「曾經滄海難為水,除卻巫山不是雲」?好,扯遠了。倒不是作業系統愛偷懶,只是這樣才能讓檔案刪除的動作變快,而且這樣也才讓檔案被刪除後「也許還有機會得救」(當然也讓「某些人」有可乘之機就是)。

因此,只要你有辦法在該檔案釋放出來的空間還沒被占用前,先做出「反向」的還原動作,E檔案的內容還是可以被還原。請注意,因此,如果檔案被刪除,你發現了這是意外並打算「救援」,一定得準備一臺電腦或是空的硬碟,準備用來儲存被救回的檔案。

Format Q&A
Q:請問,把硬碟給「重新format」以後,是不是資料就一定會「安全的消失」?
A:不一定,但我會說「不會太安全」。


剛講過的檔案系統概念裡,如果你把硬碟重新分割,重新format,有時候破壞的只是「分割屬性表」或是「檔案配置表」。雖然這些結構姓的東西被破壞了,但是有些軟體還是可以設法搜尋硬碟的蛛絲馬跡,設法重建這些檔案系統的結構。

你問我「這些軟體是如何做到的?」我也不知道,但我肯定這種軟體是存在的。什麼?你問我為甚麼這麼肯定?難道?因為……嗯……啊……,這……。我只是猜的,猜的,絕對絕對絕對不是因為我偷過別人硬碟的檔案,最多最多最多就是我曾經幫忙拯救過別人的硬碟內容而已(有沒有越描越黑的感覺?如果有,那應該就是越描越黑了)。相信我,我和奇樂沒有關係,我和香港演藝圈唯一最接近的關係就只有……我看過香港版的壹周刊,如此而已。

不過,市面上有些工具,是可以真正的把硬碟的每個磁區內容填入0,讓資料真正歸零。這類工具就能夠比較保險的把資料消除,這種動作通常稱為「Wipe」而不是「Delete」,各位可以參考之前本刊的文章,有提過相關的工具。

不過,我也聽過一些「神蹟」,像是CIA有設備,可以把多微弱的磁力線軌跡給讀取出來……別想太多了,「24小時反恐任務」只是影集,千萬別當真。你以為總統承認醜聞會獲得民眾的諒解,最後還能當選喔!想太多了。就算真的有這種技術,也不是我們能用得到的。

本期結語:硬體受損,也許有救,但一定要花大錢Q:請問,如果硬碟的「硬體部份」受損,資料還能搶救嗎?
A:老實說,這也要看情形。


上期提過,硬碟的硬體結構也挺複雜,你壞掉的是電路板、磁頭、磁臂、磁碟片……,都會影響你是否能維修,以及維修後復原的程度,但是老實說,機會是有的。

不過,坊間「專業」的硬碟維修中心,收費不低,但非常專業,會有完整得報價和專業的無塵室,專門處理各種艱澀的維修問題。我個人曾經經手過的「例子」,修理了一臺碟片嚴重受損的硬碟,救回了70%的照片檔案,價格是33,000元。

你說划不划得來?我只是經手,要問那個修的人感覺是不是划得來。另外,我去的那專業硬碟維修公司,生意好得不得了就是了。

如果問我,我會使用兩種工具,同時處理輕微的磁區損壞和檔案系統損壞,但我這種就是「家裡敦級」的個人不專業硬碟維修,會用一些工具…這些工具不貴,自己要有一點概念,但是修不修得好,一切看情況,我個人的失敗率是「fifty-fifty」──一半一半啦!所以,嗯,我只能說,各位,即使是個人,使用RAID系統,並虛擬化你的磁碟系統,恐怕也是有其必要的。

我下期會介紹並示範一下這類軟體的用法,敬請期待。

熱門新聞

Advertisement