在本篇文章中,我們就來看看如何使用 testdisk 恢復已刪除的文件,以及該過程中的每一步是怎樣的。由於這個過程需要不少的步驟,所以當你做了幾次之后,你可能會覺得操作起來會更加得心應手。 |
當你在 Linux 系統上刪除一個文件時,它不一定會永遠消失,特別是當你最近才剛剛刪除了它的時候。
除非你用 shred 等工具把它擦掉,否則數據仍然會放在你的磁盤上 —— 而恢復已刪除文件的最佳工具之一 testdisk 可以幫助你拯救它。雖然 testdisk 具有廣泛的功能,包括恢復丟失或損壞的分區和使不能啟動磁盤可以重新啟動,但它也經常被用來恢復被誤刪的文件。
可以使用 apt install testdisk 或 yum install testdisk 等命令安裝 testdisk。有趣的是,它不僅是一個 Linux 工具,而且還適用於 MacOS、Solaris 和 Windows。
文檔可在 cgsecurity.org 中找到。
首先,你必須以 root 身份登錄,或者有 sudo 權限才能使用 testdisk。如果你沒有 sudo 訪問權限,你會在這個過程一開始就被踢出,而如果你選擇創建了一個日志文件的話,最終會有這樣的消息:
TestDisk exited normally. jdoe is not in the sudoers file. This incident will be reported.
當你用 testdisk 恢復被刪除的文件時,你最終會將恢復的文件放在你啟動該工具的目錄下,而這些文件會屬於 root。出於這個原因,我喜歡在 /home/recovery 這樣的目錄下啟動。一旦文件被成功地還原和驗證,就可以將它們移回它們的所屬位置,並將它們的所有權也恢復。
在你可以寫入的選定目錄下開始:
$ cd /home/recovery $ testdisk
testdisk 提供的第一頁信息描述了該工具並顯示了一些選項。至少在剛開始,創建個日志文件是個好主意,因為它提供的信息可能會被證明是有用的。下面是如何做的:
Use arrow keys to select, then press Enter key: >[ Create ] Create a new log file [ Append ] Append information to log file [ No Log ] Don’t record anything
左邊的 > 以及你看到的反轉的字體和背景顏色指出了你按下回車鍵后將使用的選項。在這個例子中,我們選擇了創建日志文件。
然后會提示你輸入密碼(除非你最近使用過 sudo)。
下一步是選擇被刪除文件所存儲的磁盤分區(如果沒有高亮顯示的話)。根據需要使用上下箭頭移動到它。然后點兩次右箭頭,當 “Proceed” 高亮顯示時按回車鍵。
Select a media (use Arrow keys, then press Enter): Disk /dev/sda - 120 GB / 111 GiB - SSD2SC120G1CS1754D117-551 >Disk /dev/sdb - 500 GB / 465 GiB - SAMSUNG HE502HJ Disk /dev/loop0 - 13 MB / 13 MiB (RO) Disk /dev/loop1 - 101 MB / 96 MiB (RO) Disk /dev/loop10 - 148 MB / 141 MiB (RO) Disk /dev/loop11 - 36 MB / 35 MiB (RO) Disk /dev/loop12 - 52 MB / 49 MiB (RO) Disk /dev/loop13 - 78 MB / 75 MiB (RO) Disk /dev/loop14 - 173 MB / 165 MiB (RO) Disk /dev/loop15 - 169 MB / 161 MiB (RO) >[Previous] [ Next ] [Proceed ] [ Quit ]
在這個例子中,被刪除的文件在 /dev/sdb 的主目錄下。
此時,testdisk 應該已經選擇了合適的分區類型。
Disk /dev/sdb - 500 GB / 465 GiB - SAMSUNG HE502HJ Please select the partition table type, press Enter when done. [Intel ] Intel/PC partition >[EFI GPT] EFI GPT partition map (Mac i386, some x86_64...) [Humax ] Humax partition table [Mac ] Apple partition map (legacy) [None ] Non partitioned media [Sun ] Sun Solaris partition [XBox ] XBox partition [Return ] Return to disk selection
在下一步中,按向下箭頭指向 “[ Advanced ] Filesystem Utils”。
[ Analyse ] Analyse current partition structure and search for lost partitions >[ Advanced ] Filesystem Utils [ Geometry ] Change disk geometry [ Options ] Modify options [ Quit ] Return to disk selection
接下來,查看選定的分區。
Partition Start End Size in sectors > 1 P Linux filesys. data 2048 910155775 910153728 [drive2]
然后按右箭頭選擇底部的 “[ List ]”,按回車鍵。
[ Type ] [Superblock] >[ List ] [Image Creation] [ Quit ]
請注意,它看起來就像我們從根目錄 / 開始,但實際上這是我們正在工作的文件系統的基點。在這個例子中,就是 /home。
Directory / <== 開始點 >drwxr-xr-x 0 0 4096 23-Sep-2020 17:46 . drwxr-xr-x 0 0 4096 23-Sep-2020 17:46 .. drwx——— 0 0 16384 22-Sep-2020 11:30 lost+found drwxr-xr-x 1008 1008 4096 9-Jul-2019 14:10 dorothy drwxr-xr-x 1001 1001 4096 22-Sep-2020 12:12 nemo drwxr-xr-x 1005 1005 4096 19-Jan-2020 11:49 eel drwxrwxrwx 0 0 4096 25-Sep-2020 08:08 recovery...
接下來,我們按箭頭指向具體的主目錄。
drwxr-xr-x 1016 1016 4096 17-Feb-2020 16:40 gino >drwxr-xr-x 1000 1000 20480 25-Sep-2020 08:00 shs
按回車鍵移動到該目錄,然后根據需要向下箭頭移動到子目錄。注意,如果選錯了,可以選擇列表頂部附近的 .. 返回。
如果找不到文件,可以按 /(就像在 vi 中開始搜索時一樣),提示你輸入文件名或其中的一部分。
Directory /shs <== current location Previous ... -rw-rw-r— 1000 1000 426 8-Apr-2019 19:09 2-min-topics >-rw-rw-r— 1000 1000 24667 8-Feb-2019 08:57 Up_on_the_Roof.pdf
一旦你找到需要恢復的文件,按 c 選擇它。
注意:你會在屏幕底部看到有用的說明:
Use Left arrow to go back, Right to change directory, h to hide deleted files q to quit, : to select the current file, a to select all files C to copy the selected files, c to copy the current file <==
這時,你就可以在起始目錄內選擇恢復該文件的位置了(參見前面的說明,在將文件移回原點之前,先在一個合適的地方進行檢查)。在這種情況下,/home/recovery 目錄沒有子目錄,所以這就是我們的恢復點。
注意:你會在屏幕底部看到有用的說明:
Please select a destination where /shs/Up_on_the_Roof.pdf will be copied. Keys: Arrow keys to select another directory C when the destination is correct Q to quit Directory /home/recovery <== 恢復位置
一旦你看到 “Copy done! 1 ok, 0 failed” 的綠色字樣,你就會知道文件已經恢復了。
在這種情況下,文件被留在 /home/recovery/shs 下(起始目錄,附加所選目錄)。
在將文件移回原來的位置之前,你可能應該先驗證恢復的文件看起來是否正確。確保你也恢復了原來的所有者和組,因為此時文件由 root 擁有。
注意: 對於文件恢復過程中的很多步驟,你可以使用退出(按 q 或“[ Quit ]”)來返回上一步。如果你願意,可以選擇退出選項一直回到該過程中的第一步,也可以選擇按下 ^c 立即退出。
使用 testdisk 恢復文件相對來說沒有痛苦,但有些復雜。在恐慌時間到來之前,最好先練習一下恢復文件,讓自己有機會熟悉這個過程。