除非你用shred之等工具把它擦除掉,否则数据仍然会在你的磁盘上,而恢复被删除文件的最好工具之一testdisk可以帮助你拯救它。虽然testdisk具有广泛的功能,包括恢复丢失或损坏的分区和使非启动磁盘再次启动,它也经常被用来恢复被误删除的文件。
在这篇文章中,我们就来看看如何使用testdisk恢复已删除的文件,以及这个过程中的每一步是怎样的。由于这个过程需要不少的步骤,所以当你做了几次之后,你可能会觉得运行起来更加得心应手。
1、安装testdisk
使用apt install testdisk或yum install testdisk等命令安装testdisk。有趣的是,它不仅是一个Linux工具,而且还适用于MacOS、Solaris和Windows。
2、恢复文件
首先,你必须以root身份登录或者有sudo权限才能使用testdisk。如果你没有sudo访问权限,你会被踢出。
当你用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)。
下一步是选择存储被删除文件的磁盘分区(如果没有突出显示)。根据需要使用上下方向键移动到它。然后点两次右箭头,当 "继续 "突出显示时按回车键。
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 / <== starting point
>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 <== recovery location
一旦你看到绿色的"Copy done! 1 ok, 0 failed ",表示文件已经恢复了。
本例中的文件被留在了/home/recovery/shs(起始目录,附加所选目录)。
在把文件移回原来的位置之前,你可能应该先验证恢复的文件看起来是否正确。确保你也恢复了原来的所有者和组,因为此时文件将由root拥有。
注意:对于文件恢复过程中的许多点,您可以使用退出(q或[Quit])来备份一个步骤。你也可以选择退出选项一直回到过程中的第一步,或者选择^c立即退出。
使用testdisk恢复文件相对轻松,但有些复杂。可以在出现此类状况前先练习下,以免在真正出现问题的时候手忙脚乱。A5互联https://www.a5idc.net/