ホームページ  >  記事  >  システムチュートリアル  >  Linuxシステムで削除されたファイルを回復する方法

Linuxシステムで削除されたファイルを回復する方法

王林
王林転載
2024-01-14 18:48:05547ブラウズ
###導入### ユーザーがまだ必要なファイルを誤って削除した場合、ほとんどの場合、ファイルを取得または再構築する簡単な方法はありません。幸いなことに、ファイルを回復する方法があります。ユーザーがファイルを削除しても、ファイルは消えるのではなく、一定期間非表示になるだけです。

這裡將解釋它是如何運作的。在一個檔案系統中,有一個叫做 檔案分配表 的東西,這個表追蹤檔案在儲存單元(如硬碟, MicroSD 卡,隨身碟等等)中的位置。當一個檔案被刪除,檔案系統將會在檔案指派表中執行以下兩個任務之一:這個檔案在檔案指派表上的條目被標記為「自由空間」 或刪除檔案指派表裡這個檔案的條目,且將對應的空間標示為自由空間。現在,如果有一個新的檔案需要被放置在一個儲存單元上,作業系統將會把這個檔案放置到標記為空位的地方。在新檔案寫入這個空位後,被刪除的檔案就完全消失了。當需要恢復一個已經刪除的檔案時,使用者絕對不能再對任何檔案進行操作,因為假如該檔案對應的「空位」被佔用,這個檔案就永遠也不能恢復了。

怎样在 Linux 系统中恢复被删除文件

# 恢復軟體是如何運作的?

大多數的檔案系統(在刪除檔案時)只是標記空間為空白。在這些文件系統下,恢復軟體會查看文件分配表這個文件,然後複製被刪除的文件到另外的儲存單元。假如該檔案被複製到其它需要恢復的被刪除的儲存單元中,那麼用戶將有可能會失去該所需的刪除檔案。

檔案系統很少會擦除檔案指派表中的條目。假如檔案系統真的這樣做了, 這便是恢復軟體在恢復檔案了。恢復軟體在儲存單元中掃描檔案頭,所有檔案都擁有一個特殊的編碼字串,它們位於檔案的最前面,也被稱為 魔法數字。例如,一個編譯的 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 也可以鍵入 sudo apt-get install testdisk 來安裝。 TestDisk 有著許多的功能,但這篇文章將只專注於恢復檔案這個功能。

使用 root 權限從終端機開啟 TestDisk 可以透過鍵入 sudo testdisk 命令。

現在, TestDisk 命令列應用程式將會被執行。終端的顯示將會改變。 TestDisk 詢問使用者它是否可以保留日誌,這完全由使用者決定。如果一個使用者正從系統儲存中恢復文件,則不必保留日誌。可選擇的選項有「產生」、 「追加」 和 「無日誌」。如果使用者想要保留日誌,則日誌將會保留在該使用者的主目錄。

怎样在 Linux 系统中恢复被删除文件

#

在接著的畫面中,儲存裝置以 /dev/*的方式被羅列出來。對於我的系統,系統的儲存單元為 /dev/sda,這意味著我的儲存單元為 一個 SATA硬碟(sd)且它是第一個硬碟(a)。每個儲存單元的容量以 Gigabyte(千兆位元組)為單位顯示的。使用上下鍵來選擇一個儲存設備然後點擊進入。

怎样在 Linux 系统中恢复被删除文件

#

下一畫面顯示出一個列有分區表(也叫做分區對映表)的清單。正如文件有文件配置表,分區有著分區表。分區是儲存設備上的分段。例如在幾乎所有的 Linux 系統中,至少有兩種分割類型 - EXT3/4 和 Swap 。每一個分區表將會在下面被簡要地描述。 TestDisk 並不支援所有類型的分割表,所以這不是完整的清單。

怎样在 Linux 系统中恢复被删除文件

#
  • 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 依照使用者的選擇執行,則它可能猜測錯誤。 (下面的圖片顯示的是當分區表類型錯誤時的輸出)

怎样在 Linux 系统中恢复被删除文件

#

當使用者為他們的裝置選擇了正確的選項,則在下一畫面中,選擇 “進階” 選項。

怎样在 Linux 系统中恢复被删除文件

#

現在,使用者將看到一個列有使用者儲存設備中所有的檔案系統或分割區的清單。假如使用者選擇了錯誤的分區映射表,則在這一步驟中使用者就將會知道他們做了錯誤的選擇。假如沒有錯誤,透過移動文字遊標來高亮選擇含有被刪除檔案的分割區。使用 左右鍵來高亮位於終端底部的 “列表”。接著,按下回車確認。

怎样在 Linux 系统中恢复被删除文件

#

新的一屏便會呈現出列有檔案和目錄的清單。那些白色的文件名就是未被刪除的文件,而紅色的文件名是那些已被刪除的文件。最右邊的一列是檔案的名稱,從右到左方向的接著一列是檔案的建立日期,再往左的一列是檔案的大小(以byte/ 位元為單位),最左邊帶有“-”,“ d” ,“r”, “w” 和"x"的一列則代表的是檔案的權限狀況。 「d」 表示該檔案為目錄,其他的權限術語與本文關係不大。在清單的最頂端以「.」代表的一項表示目前目錄,第二行以".."代表的一項表示目前目錄的上級目錄,所以使用者可以透過選擇目錄所在行到達該目錄。

舉個例子,我想進入"Xaiml_Dataset" 目錄,該目錄基本上由被刪除的檔案組成。透過按下鍵盤上的 "c"鍵,我將恢復檔案 "computers.xaiml",接著我被詢問選擇一個目標目錄,當然,我應該放置該檔案到另一個分割區。現在,當我在我的家目錄時,按下了“c”鍵。 (選擇目標目錄時)哪個目錄被亮起來並沒有什麼影響,目前目錄就是目標目錄,在螢幕的上方,會顯示「複製完成」的訊息。在我的家目錄中便會有一個名為"Xaiml_Dataset"的目錄,裡面有一個 Xaiml 檔案。假如我在更多的已刪除檔案上按「c」 鍵,則這些檔案將會被放置到新的資料夾中而無需再向我詢問目標目錄。

當這些步驟完成後,重複按下「q」鍵直到看到正常的終端模樣。目錄"Xaiml_Dataset" 只能被 root 使用者存取。為了解決這個問題,使用 root 權限來改變該目錄及其子目錄的權限。做完這些後,文件便被恢復了且用戶可以存取它們。

特別的 ReiserFS:

為了從 ReiserFS 文件系統中恢復一個文件,首先需要將分區中的所有文件做一個備份。因為如果發生某些錯誤, 這個方法可能會造成檔案遺失。接著執行下面的命令,其中 DEVICE指的是那些以 sda2 形式命名的設備。有些檔案將會被放入 lost found 目錄而其他則會儲存到原先被刪除的位置。

reiserfsck --rebuild-tree --scan-whole-partition /dev/DEVICE
恢復被某個程式開啟的刪除檔案:

假設使用者意外地刪除了一個文件,並且該文件被某個程式打開。雖然在硬碟中該檔案被刪除了,但這個程式正使用位於 RAM 中的該檔案的副本。幸好,我們有兩種簡單的解決方法來恢復該文件。

假如這個軟體有保存功能,如文字編輯器,則使用者可以重新儲存該文件,這樣,文字編輯器可以將該文件寫入硬碟中。

假設在音樂播放器中有一個 MP3 文件,而該音樂播放器並不能保存該 MP3 文件,則這種情況下需要比先前花更多的時間來恢復文件。不幸的是,這種方法並不能保證在所有的系統和應用中都有效。首先,鍵入下面的命令。

lsof -c smplayer | grep mp3

上面的指令會列出所有由 smplayer 使用的文件,這個清單由 grep 指令透過管道搜尋 mp3 。命令的輸入類似於下面:

smplayer  10037 collier  mp3    169r      8,1  676376  1704294 /usr/bin/smplayer

現在,鍵入下面的命令來直接從 RAM(在 Linux 系統中,/proc/映射到 RAM)中恢復文件,並複製該文件到選定的資料夾中。其中cp 指的是複製指令,輸出中的數字10037 來自於行程數,輸出中的數字169 指的是檔案描述符,"~/Music/"為目標目錄,最後的"music.mp3" 為使用者想恢復的檔案的名稱。

cp /proc/10037/fd/169 ~/Music/music.mp3
真正的刪除:

為確保一個檔案不能被恢復,可以使用一個指令來 「擦除」 硬碟。擦除硬碟實際上是向硬碟中寫入無意義的資料。例如,許多擦除程式向硬碟寫入零,隨機字母或隨機資料。不會有空間被佔用或遺失,擦除程式只是對空位進行重寫覆蓋。如果儲存單元被檔案佔滿而沒有空餘空間,則所有先前被刪除的檔案將會消失而無法恢復。

擦除硬碟的目的是確保隱私資料不被他人看見。舉個例子,一家公司可能預訂了一些新的電腦,總經理決定將舊的電腦賣掉,然而,新的電腦擁有者可能會看到公司的一些機密或諸如信用卡號碼,地址等顧客資訊。幸好,公司的電腦技術人員可以在賣掉這些舊電腦之前,先擦除這些硬碟。

為了安裝擦除程式 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

假如電腦實際去清除那些刪除的文件,那麼就需要花更長的時間去執行刪除任務。將某些空間標記為空位是快速且容易的,但使得檔案永遠消失需要花費一定的時間。例如,擦除一個儲存單元,可能需要花費幾個小時的時間(根據磁碟容量大小)。總之,現在的系統工作的就挺好,因為即便用戶清空了垃圾箱,他們仍然有另一個機會來改變他們當初的想法(或錯誤)。


以上がLinuxシステムで削除されたファイルを回復する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。