用 testdisk 恢復 Linux 上已刪除的文件
當你在 Linux 系統(tǒng)上刪除一個文件時,它不一定會永遠消失,特別是當你最近才剛剛刪除了它的時候。
除非你用 shred 等工具把它擦掉,否則數(shù)據(jù)仍然會放在你的磁盤上 —— 而恢復已刪除文件的最佳工具之一 testdisk 可以幫助你拯救它。雖然 testdisk 具有廣泛的功能,包括恢復丟失或損壞的分區(qū)和使不能啟動磁盤可以重新啟動,但它也經(jīng)常被用來恢復被誤刪的文件。
在本篇文章中,我們就來看看如何使用 testdisk 恢復已刪除的文件,以及該過程中的每一步是怎樣的。由于這個過程需要不少的步驟,所以當你做了幾次之后,你可能會覺得操作起來會更加得心應手。
安裝 testdisk
可以使用 apt install testdisk 或 yum install testdisk 等命令安裝 testdisk。有趣的是,它不僅是一個 Linux 工具,而且還適用于 MacOS、Solaris 和 Windows。
文檔可在 cgsecurity.org 中找到。
恢復文件
首先,你必須以 root 身份登錄,或者有 sudo 權(quán)限才能使用 testdisk。如果你沒有 sudo 訪問權(quán)限,你會在這個過程一開始就被踢出,而如果你選擇創(chuàng)建了一個日志文件的話,最終會有這樣的消息:
- TestDisk exited normally.
- jdoe is not in the sudoers file. This incident will be reported.
當你用 testdisk 恢復被刪除的文件時,你最終會將恢復的文件放在你啟動該工具的目錄下,而這些文件會屬于 root。出于這個原因,我喜歡在 /home/recovery 這樣的目錄下啟動。一旦文件被成功地還原和驗證,就可以將它們移回它們的所屬位置,并將它們的所有權(quán)也恢復。
在你可以寫入的選定目錄下開始:
- $ cd /home/recovery
- $ testdisk
testdisk 提供的第一頁信息描述了該工具并顯示了一些選項。至少在剛開始,創(chuàng)建個日志文件是個好主意,因為它提供的信息可能會被證明是有用的。下面是如何做的:
- 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
左邊的 > 以及你看到的反轉(zhuǎn)的字體和背景顏色指出了你按下回車鍵后將使用的選項。在這個例子中,我們選擇了創(chuàng)建日志文件。
然后會提示你輸入密碼(除非你最近使用過 sudo)。
下一步是選擇被刪除文件所存儲的磁盤分區(qū)(如果沒有高亮顯示的話)。根據(jù)需要使用上下箭頭移動到它。然后點兩次右箭頭,當 “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 應該已經(jīng)選擇了合適的分區(qū)類型。
- 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
接下來,查看選定的分區(qū)。
- Partition Start End Size in sectors
- > 1 P Linux filesys. data 2048 910155775 910153728 [drive2]
然后按右箭頭選擇底部的 “[ List ]”,按回車鍵。
- [ Type ] [Superblock] >[ List ] [Image Creation] [ Quit ]
請注意,它看起來就像我們從根目錄 / 開始,但實際上這是我們正在工作的文件系統(tǒng)的基點。在這個例子中,就是 /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
按回車鍵移動到該目錄,然后根據(jù)需要向下箭頭移動到子目錄。注意,如果選錯了,可以選擇列表頂部附近的 .. 返回。
如果找不到文件,可以按 /(就像在 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 <==
這時,你就可以在起始目錄內(nèi)選擇恢復該文件的位置了(參見前面的說明,在將文件移回原點之前,先在一個合適的地方進行檢查)。在這種情況下,/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” 的綠色字樣,你就會知道文件已經(jīng)恢復了。
在這種情況下,文件被留在 /home/recovery/shs 下(起始目錄,附加所選目錄)。
在將文件移回原來的位置之前,你可能應該先驗證恢復的文件看起來是否正確。確保你也恢復了原來的所有者和組,因為此時文件由 root 擁有。
注意: 對于文件恢復過程中的很多步驟,你可以使用退出(按 q 或“[ Quit ]”)來返回上一步。如果你愿意,可以選擇退出選項一直回到該過程中的第一步,也可以選擇按下 ^c 立即退出。
恢復訓練
使用 testdisk 恢復文件相對來說沒有痛苦,但有些復雜。在恐慌時間到來之前,最好先練習一下恢復文件,讓自己有機會熟悉這個過程。