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