當(dāng)用戶意外地刪除了一個(gè)仍然需要的文件時(shí),大多數(shù)情況下,是沒有簡(jiǎn)便的方法可以重新找回或重建這個(gè)文件。不過(guò),幸運(yùn)的是文件是可以通過(guò)一些方法恢復(fù)的。當(dāng)用戶刪除了一個(gè)文件,該文件并沒有消失,只是被隱藏了一段時(shí)間。
這里將解釋它是如何工作的。在一個(gè)文件系統(tǒng)中,有一個(gè)叫做 文件分配表 的東西,這個(gè)表跟蹤文件在存儲(chǔ)單元(如硬盤, MicroSD 卡,閃存驅(qū)動(dòng)器等等)中的位置。當(dāng)一個(gè)文件被刪除,文件系統(tǒng)將會(huì)在文件分配表中執(zhí)行以下兩個(gè)任務(wù)之一:這個(gè)文件在文件分配表上的條目被標(biāo)記為 “自由空間” 或刪除文件分配表里這個(gè)文件的條目,且將相應(yīng)的空間被標(biāo)記為自由空間 。現(xiàn)在,如果有一個(gè)新的文件需要被放置在一個(gè)存儲(chǔ)單元上,操作系統(tǒng)將會(huì)把這個(gè)文件放置到標(biāo)記為空位的地方。在新文件被寫入到這個(gè)空位后,被刪除的文件就徹底消失了。當(dāng)需要恢復(fù)一個(gè)已經(jīng)刪除的文件時(shí),用戶絕對(duì)不能再對(duì)任何文件進(jìn)行操作,因?yàn)榧偃缭撐募?duì)應(yīng)的“空位”被占用,這個(gè)文件就永遠(yuǎn)也不能恢復(fù)了。
恢復(fù)軟件是如何工作的?
大多數(shù)的文件系統(tǒng)(在刪除文件時(shí))只是標(biāo)記空間為空白。在這些文件系統(tǒng)下,恢復(fù)軟件查看文件分配表這個(gè)文件,然后復(fù)制被刪除的文件到另外的存儲(chǔ)單元中。假如該文件被復(fù)制到其它需要恢復(fù)的被刪除的存儲(chǔ)單元中,那么用戶將有可能會(huì)失去那個(gè)所需的刪除文件。
文件系統(tǒng)很少會(huì)擦除文件分配表中的條目。假如文件系統(tǒng)真的這樣做了, 這便是恢復(fù)軟件在恢復(fù)文件了?;謴?fù)軟件在存儲(chǔ)單元中掃描文件頭,所有文件都擁有一個(gè)特殊的編碼字符串,它們位于文件的最前面,也被叫做 魔法數(shù)字。例如,一個(gè)編譯的 JAVA 類文件的魔法數(shù)字在十六進(jìn)制中是“CAFEBABE”。所以,假如要恢復(fù)該類型的文件,恢復(fù)軟件會(huì)查找 “CAFEBABE” 然后復(fù)制文件到另一個(gè)存儲(chǔ)單元。一些恢復(fù)軟件可以查找某種特殊的文件類型。若用戶想恢復(fù)一個(gè) PDF 文件,則恢復(fù)軟件將會(huì)查找十六進(jìn)制的魔法數(shù)字 “25504446”,這恰恰是 ASCII 編碼中的 “%PDF”?;謴?fù)軟件將會(huì)查找所有的魔法數(shù)字,然后用戶可以選擇恢復(fù)哪個(gè)已刪除的文件。
假如一個(gè)文件的部分被覆寫了,則整個(gè)文件就會(huì)被損壞。通常這個(gè)文件可以被恢復(fù),但是其中的內(nèi)容可能已經(jīng)沒有什么用處。例如,恢復(fù)一個(gè)已損壞的 JPEG 文件將會(huì)是無(wú)意義的,因?yàn)閳D片查看器不能從這個(gè)損壞的文件產(chǎn)生一幅圖片。因此,即使用戶擁有了這個(gè)文件,該文件也將毫無(wú)用處。
在我們繼續(xù)之前,下面的一些信息將會(huì)對(duì)指引恢復(fù)軟件找到正確的存儲(chǔ)單元起到一定的幫助。所有的設(shè)備均掛載在 /dev/ 目錄下。操作系統(tǒng)賦予每個(gè)設(shè)備的名稱(并不是管理員給予每個(gè)分區(qū)或設(shè)備的名稱)遵循一定的命名規(guī)律。
第一個(gè) SATA 硬盤的第二個(gè)分區(qū)的名稱將會(huì)是 sda2。名稱的第一個(gè)字母暗示了存儲(chǔ)類型,在這里指的是 SATA,但字母 “s” 也可能指的是 SCSI、 FireWire(火線端口)或 USB。第二個(gè)字母 “d” 指的是 disk(硬盤)。第三個(gè)字母指的是設(shè)備序數(shù),即字母 “a” 指的是第一個(gè) SATA 而 “b” 指的是第二個(gè)。最后的數(shù)字代表分區(qū)。沒有分區(qū)數(shù)字的設(shè)備名代表該設(shè)置的所有分區(qū)。對(duì)于上面的例子,對(duì)應(yīng)的名稱為 sda 。作為命名的第一個(gè)字母還可能是 “h” ,這對(duì)應(yīng) PATA 硬盤(IDE)。
以下為命名規(guī)律的一些例子。假如一個(gè)用戶有一個(gè) SATA 硬盤(sda),這個(gè)設(shè)備有 4 個(gè)分區(qū)- sda1、 sda2、 sda3 和 sda4 。該用戶刪除了第三個(gè)分區(qū),但直到格式化第四個(gè)分區(qū)之前,第四個(gè)分區(qū)名 sda4 都將保留不變。然后該用戶插入了一個(gè)帶有一個(gè)分區(qū) - 即sdb1- 的 usb 存儲(chǔ)卡(sdb),又增加了一個(gè)帶有一個(gè)分區(qū) -hda1- 的 IDE 硬盤 ,接著該用戶又增加了一個(gè) SCSI 硬盤 - sdc1 。接著用戶移除了 USB 存儲(chǔ)卡(sdb)?,F(xiàn)在,SCSI 硬盤的名稱仍然為 sdc,但如果這個(gè) SCSI 被移除接著再被插入,則它的名稱將變?yōu)?sdb。雖然還有其他的存儲(chǔ)設(shè)備存在, 那個(gè) IDE 硬盤的名稱仍會(huì)有一個(gè) “a”, 因?yàn)樗堑谝粋€(gè) IDE 硬盤,IDE 設(shè)備的命名與 SCSI、 SATA、 FireWire 和 USB 設(shè)備要分開計(jì)數(shù)。
使用 TestDisk 進(jìn)行恢復(fù):
每個(gè)恢復(fù)軟件有其不同的功能,特征及支持的不同文件系統(tǒng)。下面是一些關(guān)于 使用 TestDisk 在各種文件系統(tǒng)中恢復(fù)文件的指南。
FAT16、 FAT32、 exFAT (FAT64)、 NTFS 以及 ext2/3/4:
TestDisk 是一個(gè)運(yùn)行在?Linux、 *BSD、 SunOS、 Mac OS X、 DOS 和 Windows 等操作系統(tǒng)下的開源的自由軟件。 TestDisk 也可以通過(guò)鍵入 sudo apt-get install testdisk 來(lái)安裝。TestDisk 有著許多的功能,但這篇文章將只關(guān)注恢復(fù)文件這個(gè)功能。
使用 root 權(quán)限從終端中打開 TestDisk 可以通過(guò)鍵入 sudo testdisk 命令。
現(xiàn)在, TestDisk 命令行應(yīng)用將會(huì)被執(zhí)行。終端的顯示將會(huì)改變。TestDisk 詢問(wèn)用戶它是否可以保留日志,這完全由用戶決定。假如一個(gè)用戶正從系統(tǒng)存儲(chǔ)中恢復(fù)文件,則不必保留日志??蛇x擇的選項(xiàng)有“生成”、 “追加” 和 “無(wú)日志”。假如用戶想保留日志,則日志將會(huì)保留在該用戶的主目錄。
在接著的屏幕中,存儲(chǔ)設(shè)備以 /dev/*的方式被羅列出來(lái)。對(duì)于我的系統(tǒng),系統(tǒng)的存儲(chǔ)單元為 /dev/sda,這意味著我的存儲(chǔ)單元為 一個(gè) SATA硬盤(sd)且它是第一個(gè)硬盤(a)。每個(gè)存儲(chǔ)單元的容量以 Gigabyte(千兆字節(jié))為單位顯示的。使用上下鍵來(lái)選擇一個(gè)存儲(chǔ)設(shè)備然后點(diǎn)擊進(jìn)入。
下一屏顯示出一個(gè)列有分區(qū)表(也叫做分區(qū)映射表)的清單。正如文件有文件配置表,分區(qū)有著分區(qū)表。分區(qū)是存儲(chǔ)設(shè)備上的分段。例如在幾乎所有的 Linux 系統(tǒng)中,至少存在兩種分區(qū)類型 - EXT3/4 和 Swap 。每一個(gè)分區(qū)表將會(huì)在下面被簡(jiǎn)要地描述。TestDisk 并不支持所有類型的分區(qū)表,所以這并不是完整的列表。
Intel?- 這類分區(qū)表在 Windows 系統(tǒng)和許多的 Linux 系統(tǒng)中非常普遍,它也常常稱作 MBR 分區(qū)表。
EFI GPT?- 這種類型的分區(qū)表通常用在 Linux 系統(tǒng)中。對(duì)于 Linux 系統(tǒng),這種分區(qū)表是最為推薦的, 因?yàn)檫壿嫹謪^(qū)或擴(kuò)展分區(qū)的概念并不適用于 GPT (GUID Partition Table) 分區(qū)表。 這意味著,如果每個(gè)分區(qū)中有一個(gè) Linux 系統(tǒng),一個(gè) Linux 用戶可以從多種類型的 Linux 系統(tǒng)中進(jìn)行多重啟動(dòng)。當(dāng)然使用 GPT 分區(qū)表還有其他的優(yōu)勢(shì),但那些已超出了本文的討論范圍。
Humax?- Humax 分區(qū)映射表適用于韓國(guó)公司 Humax 生產(chǎn)的設(shè)備。
Mac?- Apple 分區(qū)映射表 (APM) 適用于 Apple 的設(shè)備。
None?- 某些設(shè)備并沒有分區(qū)表。例如,許多 Subor 游戲控制臺(tái)不使用分區(qū)映射表。如果一個(gè)用戶試圖以其它分區(qū)表類型從這類設(shè)備中恢復(fù)文件,用戶就會(huì)困擾 TestDisk 為何找卟到任何的文件系統(tǒng)或者文件。
Sun?- Sun 分區(qū)表適用于 Sun 系統(tǒng)。
Xbox?-Xbox 適用于使用 Xbox 分區(qū)映射表的存儲(chǔ)設(shè)備。
假如用戶選擇了 “Xbox” ,盡管他的系統(tǒng)使用了 GPT 分區(qū)表, 那么 TestDisk 將不能找到任何分區(qū)或文件系統(tǒng)。假如 TestDisk 按照用戶的選擇執(zhí)行,則它可能猜測(cè)錯(cuò)誤。(下面的圖片顯示的是當(dāng)分區(qū)表類型錯(cuò)誤時(shí)的輸出)
當(dāng)用戶為他們的設(shè)備選擇了正確的選項(xiàng),則在下一屏中,選擇 “高級(jí)” 選項(xiàng)。
現(xiàn)在,用戶將看到一個(gè)列有用戶存儲(chǔ)設(shè)備中所有的文件系統(tǒng)或分區(qū)的列表。假如用戶選擇了錯(cuò)誤的分區(qū)映射表,則在這一步中用戶就將會(huì)知道他們做出了錯(cuò)誤的選擇。假如沒有錯(cuò)誤,通過(guò)移動(dòng)文字光標(biāo)來(lái)高亮選擇含有被刪除文件的分區(qū)。使用 左右鍵來(lái)高亮位于終端底部的 “列表”。接著,按下回車確認(rèn)。
新的一屏便會(huì)呈現(xiàn)出列有文件和目錄的列表。那些白色的文件名就是未被刪除的文件,而紅色的文件名是那些已被刪除的文件。最右邊的一列是文件的名稱,從右到左方向的接著一列是文件的創(chuàng)建日期,再往左的一列是文件的大?。ㄒ?byte/ 比特為單位),最左邊帶有“-”,“d” ,“r”, “w” 和"x"的一列則代表的是文件的權(quán)限情況?!癲” 表示該文件為一個(gè)目錄,其他的權(quán)限術(shù)語(yǔ)與本文關(guān)系不大。在列表的最頂端以“.”代表的一項(xiàng)表示當(dāng)前目錄,第二行以".."代表的一項(xiàng)表示當(dāng)前目錄的上級(jí)目錄,所以用戶可以通過(guò)選擇目錄所在行到達(dá)該目錄。
舉個(gè)例子,我想進(jìn)入"Xaiml_Dataset" 目錄,該目錄基本上由被刪除的文件組成。通過(guò)按鍵盤上的 "c"鍵,我將恢復(fù)文件 "computers.xaiml",接著我被詢問(wèn)選擇一個(gè)目標(biāo)目錄,當(dāng)然,我應(yīng)該放置該文件到另一個(gè)分區(qū)中。現(xiàn)在,當(dāng)我在我的家目錄時(shí),按下了“c”鍵。(選擇目標(biāo)目錄時(shí))哪個(gè)目錄被高亮并沒有什么影響,當(dāng)前目錄就是目標(biāo)目錄,在屏幕的上方,將會(huì)顯示“復(fù)制完成”的消息。在我的家目錄中便會(huì)有一個(gè)名為"Xaiml_Dataset"的目錄,里面里有一個(gè) Xaiml 文件。 假如我在更多的已刪除文件上按“c” 鍵,則這些文件將會(huì)被放置到新的文件夾中而無(wú)需再向我詢問(wèn)目標(biāo)目錄。
當(dāng)這些步驟完成后,重復(fù)按“q”鍵直到看到正常的終端模樣。目錄"Xaiml_Dataset" 只能被 root 用戶訪問(wèn)。為了解決這個(gè)問(wèn)題,使用 root 權(quán)限改變?cè)撃夸浖捌渥幽夸浀臋?quán)限。做完這些后,文件便被恢復(fù)了且用戶可以訪問(wèn)它們。
特別的 ReiserFS:
為了從 ReiserFS 文件系統(tǒng)中恢復(fù)一個(gè)文件,首先需將分區(qū)中的所有文件做一個(gè)備份。因?yàn)槿绻l(fā)生某些錯(cuò)誤, 這個(gè)方法可能會(huì)引起文件丟失。接著執(zhí)行下面的命令,其中 DEVICE指的是那些以 sda2 形式命名的設(shè)備。一些文件將被放入 lost+found 目錄而其他則會(huì)保存到原先被刪除的位置。
reiserfsck --rebuild-tree --scan-whole-partition /dev/DEVICE
恢復(fù)被某個(gè)程序打開的刪除文件:
假設(shè)用戶意外地刪除了一個(gè)文件,且該文件被某個(gè)程序打開。雖然在硬盤中該文件被刪除了,但這個(gè)程序正使用著位于 RAM 中的該文件的副本。幸好,我們有兩種簡(jiǎn)單的解決方法來(lái)恢復(fù)該文件。
假如這個(gè)軟件有保存功能,如文本編輯器,則用戶可以重新保存該文件,這樣,文本編輯器可以將該文件寫入硬盤中。
假設(shè)在音樂播放器中有一個(gè) MP3 文件,而該音樂播放器并不能保存該 MP3 文件,則這種情形下需要比先前花更多的時(shí)間來(lái)恢復(fù)文件。不幸的是,這種方法并不能保證在所有的系統(tǒng)和應(yīng)用中有效。首先,鍵入下面的命令。
lsof -c smplayer | grep mp3
上面的命令會(huì)列出所有由 smplayer 使用的文件,這個(gè)列表由 grep 命令通過(guò)管道搜索 mp3 。命令的輸入類似于下面:
smplayer 10037 collier mp3 169r 8,1 676376 1704294 /usr/bin/smplayer
現(xiàn)在,鍵入下面的命令來(lái)直接從 RAM(在 Linux 系統(tǒng)中,/proc/映射到 RAM)中恢復(fù)文件,并復(fù)制該文件到選定的文件夾中。其中 cp 指的是復(fù)制命令,輸出中的數(shù)字 10037 來(lái)自于進(jìn)程數(shù),輸出中的數(shù)字 169 指的是文件描述符,"~/Music/"為目標(biāo)目錄,最后的 "music.mp3" 為用戶想恢復(fù)的文件的名稱。
cp /proc/10037/fd/169 ~/Music/music.mp3
真正的刪除:
為確保一個(gè)文件不能被恢復(fù),可以使用一個(gè)命令來(lái) “擦除” 硬盤。擦除硬盤實(shí)際上是向硬盤中寫入無(wú)意義的數(shù)據(jù)。例如,許多擦除程序向硬盤中寫入零,隨機(jī)字母或隨機(jī)數(shù)據(jù)。不會(huì)有空間被占用或丟失,擦除程序只是對(duì)空位進(jìn)行重寫覆蓋。假如存儲(chǔ)單元被文件占滿而沒有空余空間,則所有先前被刪除的文件將會(huì)消失而不能恢復(fù)。
擦除硬盤的目的是確保隱私數(shù)據(jù)不被他人看見。舉個(gè)例子,一個(gè)公司可能預(yù)訂了一些新的電腦,總經(jīng)理決定將舊的電腦賣掉,然而,新的電腦擁有者可能會(huì)看到公司的一些機(jī)密或諸如信用卡號(hào)碼,地址等顧客信息。幸好,公司的電腦技術(shù)人員可以在賣掉這些舊電腦之前,擦除這些硬盤。
為了安裝擦除程序 secure-delete,鍵入 sudo apt-get install secure-delete,這個(gè)命令將會(huì)安裝一個(gè)包含 4 個(gè)程序的程序集,用以確保被刪除的文件不能被恢復(fù)。
srm - 永久刪除一個(gè)文件。使用方法: srm -f ./secret_file.txt
sfill - 擦除空白空間。使用方法: sfill -f /mount/point/of/partition
sswap - 擦除 swap 空間。使用方法: sswap -f /dev/SWAP_DEVICE
假如電腦實(shí)際去清除那些刪除的文件,那么就需要花費(fèi)更長(zhǎng)的時(shí)間去執(zhí)行刪除任務(wù)。將某些空間標(biāo)記為空位是快速且容易的,但使得文件永遠(yuǎn)消失需要花費(fèi)一定的時(shí)間。例如,擦除一個(gè)存儲(chǔ)單元,可能需要花費(fèi)幾個(gè)小時(shí)的時(shí)間(根據(jù)磁盤容量大?。?傊?,現(xiàn)在的系統(tǒng)工作的就挺好,因?yàn)榧幢阌脩羟蹇樟死?,他們?nèi)匀挥辛硪淮螜C(jī)會(huì)來(lái)改變他們當(dāng)初的想法(或錯(cuò)誤)。
?
評(píng)論
查看更多