當用戶意外地刪除了一個仍然需要的文件時,大多數情況下,是沒有簡便的方法可以重新找回或重建這個文件。不過,幸運的是文件是可以通過一些方法恢復的。當用戶刪除了一個文件,該文件並沒有消失,只是被隱藏了一段時間。
這裡將解釋它是如何工作的。在一個文件系統中,有一個叫做 文件分配表 的東西,這個表跟蹤文件在存儲單元(如硬盤, MicroSD 卡,閃存驅動器等等)中的位置。當一個文件被刪除,文件系統將會在文件分配表中執行以下兩個任務之一:這個文件在文件分配表上的條目被標記為 “自由空間” 或刪除文件分配表裡這個文件的條目,且將相應的空間被標記為自由空間 。現在,如果有一個新的文件需要被放置在一個存儲單元上,操作系統將會把這個文件放置到標記為空位的地方。在新文件被寫入到這個空位後,被刪除的文件就徹底消失了。當需要恢復一個已經刪除的文件時,用戶絕對不能再對任何文件進行操作,因為假如該文件對應的“空位”被占用,這個文件就永遠也不能恢復了。
恢復軟件是如何工作的?
大多數的文件系統(在刪除文件時)只是標記空間為空白。在這些文件系統下,恢復軟件查看文件分配表這個文件,然後復制被刪除的文件到另外的存儲單元中。假如該文件被復制到其它需要恢復的被刪除的存儲單元中,那麼用戶將有可能會失去那個所需的刪除文件。
文件系統很少會擦除文件分配表中的條目。假如文件系統真的這樣做了, 這便是恢復軟件在恢復文件了。恢復軟件在存儲單元中掃描文件頭,所有文件都擁有一個特殊的編碼字符串,它們位於文件的最前面,也被叫做 魔法數字。例如,一個編譯的 JAVA 類文件的魔法數字在十六進制中是“CAFEBABE”。所以,假如要恢復該類型的文件,恢復軟件會查找 “CAFEBABE” 然後復制文件到另一個存儲單元。一些恢復軟件可以查找某種特殊的文件類型。若用戶想恢復一個 PDF 文件,則恢復軟件將會查找十六進制的魔法數字 “25504446”,這恰恰是 ASCII 編碼中的 “%PDF”。恢復軟件將會查找所有的魔法數字,然後用戶可以選擇恢復哪個已刪除的文件。
假如一個文件的部分被覆寫了,則整個文件就會被損壞。通常這個文件可以被恢復,但是其中的內容可能已經沒有什麼用處。例如,恢復一個已損壞的 JPEG 文件將會是無意義的,因為圖片查看器不能從這個損壞的文件產生一幅圖片。因此,即使用戶擁有了這個文件,該文件也將毫無用處。
設備的位置:
在我們繼續之前,下面的一些信息將會對指引恢復軟件找到正確的存儲單元起到一定的幫助。所有的設備均掛載在 /dev/ 目錄下。操作系統賦予每個設備的名稱(並不是管理員給予每個分區或設備的名稱)遵循一定的命名規律。
第一個 SATA 硬盤的第二個分區的名稱將會是 sda2。名稱的第一個字母暗示了存儲類型,在這裡指的是 SATA,但字母 “s” 也可能指的是 SCSI、 FireWire(火線端口)或 USB。第二個字母 “d” 指的是 disk(硬盤)。第三個字母指的是設備序數,即字母 “a” 指的是第一個 SATA 而 “b” 指的是第二個。最後的數字代表分區。沒有分區數字的設備名代表該設置的所有分區。對於上面的例子,對應的名稱為 sda 。作為命名的第一個字母還可能是 “h” ,這對應 PATA 硬盤(IDE)。
以下為命名規律的一些例子。假如一個用戶有一個 SATA 硬盤(sda),這個設備有 4 個分區- sda1、 sda2、 sda3 和 sda4 。該用戶刪除了第三個分區,但直到格式化第四個分區之前,第四個分區名 sda4 都將保留不變。然後該用戶插入了一個帶有一個分區 - 即sdb1- 的 usb 存儲卡(sdb),又增加了一個帶有一個分區 -hda1- 的 IDE 硬盤 ,接著該用戶又增加了一個 SCSI 硬盤 - sdc1 。接著用戶移除了 USB 存儲卡(sdb)。現在,SCSI 硬盤的名稱仍然為 sdc,但如果這個 SCSI 被移除接著再被插入,則它的名稱將變為 sdb。雖然還有其他的存儲設備存在, 那個 IDE 硬盤的名稱仍會有一個 “a”, 因為它是第一個 IDE 硬盤,IDE 設備的命名與 SCSI、 SATA、 FireWire 和 USB 設備要分開計數。
使用 TestDisk 進行恢復:
每個恢復軟件有其不同的功能,特征及支持的不同文件系統。下面是一些關於 使用 TestDisk 在各種文件系統中恢復文件的指南。
FAT16、 FAT32、 exFAT (FAT64)、 NTFS 以及 ext2/3/4:
TestDisk 是一個運行在 Linux、 *BSD、 SunOS、 Mac OS X、 DOS 和 Windows 等操作系統下的開源的自由軟件。 TestDisk 可以從下面的鏈接中找到 :http://www.cgsecurity.org/wiki/TestDisk。TestDisk 也可以通過鍵入 sudo apt-get install testdisk 來安裝。TestDisk 有著許多的功能,但這篇文章將只關注恢復文件這個功能。
使用 root 權限從終端中打開 TestDisk 可以通過鍵入 sudo testdisk 命令。
現在, TestDisk 命令行應用將會被執行。終端的顯示將會改變。TestDisk 詢問用戶它是否可以保留日志,這完全由用戶決定。假如一個用戶正從系統存儲中恢復文件,則不必保留日志。可選擇的選項有“生成”、 “追加” 和 “無日志”。假如用戶想保留日志,則日志將會保留在該用戶的主目錄。
在接著的屏幕中,存儲設備以 /dev/*的方式被羅列出來。對於我的系統,系統的存儲單元為 /dev/sda,這意味著我的存儲單元為 一個 SATA硬盤(sd)且它是第一個硬盤(a)。每個存儲單元的容量以 Gigabyte(千兆字節)為單位顯示的。使用上下鍵來選擇一個存儲設備然後點擊進入。
下一屏顯示出一個列有分區表(也叫做分區映射表)的清單。正如文件有文件配置表,分區有著分區表。分區是存儲設備上的分段。例如在幾乎所有的 Linux 系統中,至少存在兩種分區類型 - EXT3/4 和 Swap 。每一個分區表將會在下面被簡要地描述。TestDisk 並不支持所有類型的分區表,所以這並不是完整的列表。
Intel - 這類分區表在 Windows 系統和許多的 Linux 系統中非常普遍,它也常常稱作 MBR 分區表。
EFI GPT - 這種類型的分區表通常用在 Linux 系統中。對於 Linux 系統,這種分區表是最為推薦的, 因為邏輯分區或擴展分區的概念並不適用於 GPT (GUID Partition Table) 分區表。 這意味著,如果每個分區中有一個 Linux 系統,一個 Linux 用戶可以從多種類型的 Linux 系統中進行多重啟動。當然使用 GPT 分區表還有其他的優勢,但那些已超出了本文的討論范圍。
Humax - Humax 分區映射表適用於韓國公司 Humax 生產的設備。
Mac - Apple 分區映射表 (APM) 適用於 Apple 的設備。
None - 某些設備並沒有分區表。例如,許多 Subor 游戲控制台不使用分區映射表。如果一個用戶試圖以其它分區表類型從這類設備中恢復文件,用戶就會困擾 TestDisk 為何找卟到任何的文件系統或者文件。
Sun - Sun 分區表適用於 Sun 系統。
Xbox -Xbox 適用於使用 Xbox 分區映射表的存儲設備。
假如用戶選擇了 “Xbox” ,盡管他的系統使用了 GPT 分區表, 那麼 TestDisk 將不能找到任何分區或文件系統。假如 TestDisk 按照用戶的選擇執行,則它可能猜測錯誤。(下面的圖片顯示的是當分區表類型錯誤時的輸出)
當用戶為他們的設備選擇了正確的選項,則在下一屏中,選擇 “高級” 選項。
現在,用戶將看到一個列有用戶存儲設備中所有的文件系統或分區的列表。假如用戶選擇了錯誤的分區映射表,則在這一步中用戶就將會知道他們做出了錯誤的選擇。假如沒有錯誤,通過移動文字光標來高亮選擇含有被刪除文件的分區。使用 左右鍵來高亮位於終端底部的 “列表”。接著,按下回車確認。
新的一屏便會呈現出列有文件和目錄的列表。那些白色的文件名就是未被刪除的文件,而紅色的文件名是那些已被刪除的文件。最右邊的一列是文件的名稱,從右到左方向的接著一列是文件的創建日期,再往左的一列是文件的大小(以 byte/ 比特為單位),最左邊帶有“-”,“d” ,“r”, “w” 和"x"的一列則代表的是文件的權限情況。“d” 表示該文件為一個目錄,其他的權限術語與本文關系不大。在列表的最頂端以&ldqu