您是否曾经错误地删除过重要文件?谁不呢!好的,但是我可以恢复它们吗?在这篇文章中,您将了解如何使用不同文件系统上的各种程序在 Linux 上恢复已删除的文件。
您将了解如何从 SD 卡、HDD 和不同分区上的已删除分区恢复已删除的文件Linux 文件系统例如 EXT3、EXT4,甚至来自 Windows 文件系统(例如 FAT32 和 NTFS)。
从已删除的分区恢复文件
这是一个很大的问题。经常,Linux用户经常同时安装多个系统,在安装过程中可能会误删除某个分区。
但是,如何从已删除的分区中恢复文件呢?为此,我们需要使用名为 TestDisk 的工具来恢复分区。
Testdisk 是一款功能强大的分区分析和数据恢复实用程序。大多数 Linux 发行版(例如 Debian 和 Ubuntu)都附带 TestDisk。
另一方面,应用程序是跨平台的,支持Intel、MSDOS、Mac等大量分区表。这些是最流行的分区表。
此外,它还支持许多文件系统,例如 NTFS、EXT4 以及其他非流行文件系统,例如 BeOS 和 ReiserFS。
当您删除文件时,该文件占用的簇列表将被删除,标记这些扇区可供使用。如果簇未被覆盖,TestDisk 可以恢复文件。
首先,像这样启动应用程序:
$ testdisk
接下来,您可以选择为日志创建新文件。如果您想创建一个,请选择create选项并按 Enter 键。如果您不需要日志文件,请选择“无日志”选项。
接下来,将扫描系统识别的磁盘或分区。在这种特殊情况下,sda 是我们要恢复的分区。
TestDisk 可以识别各种类型的分区表。除非您使用专用的,否则通常是英特尔的。
在下一个屏幕中,您将看到该程序具有的一系列选项。对于这种特殊情况,我们需要选择“分析”选项。
使用此选项,程序将彻底分析磁盘以查找结构。
然后,它会询问您想要进行的搜索类型。通常,选择“快速搜索”选项。
如果幸运的话,您将看到被删除的分区。如果没有,您将不得不选择更深入的搜索。
然后,选择写入选项来写入分区表。完成后,重新启动系统,分区就恢复了!
请注意,在这些步骤中,可能需要很长时间。这取决于磁盘大小。
根据该分区可能具有的文件系统类型,将遵循特定的说明。稍后将详细介绍它们。
从外部驱动器恢复已删除的文件
现在让我们假设我们有一个外部闪存驱动器,并且您错误地从中删除了一些文件。如何恢复它们?
感谢 TestDisk,该过程变得与删除分区非常相似。但也存在一些差异。
要启动该程序,我们将使用 testdisk 命令。此外,我们可以将闪存驱动器添加为参数,如下所示:
$ sudo testdisk /dev/sdb
接下来,选择继续。然后,选择分区表类型。
然后,选择高级选项来恢复文件。
下一步是选择分区和取消删除选项。
然后,您将看到该分区上所有已删除的文件。
现在,选择目标文件夹来放置恢复的文件。您需要在第一个选项上按 C 键将文件放置在当前目录中。
最后,你会看到这样的消息:
恭喜!文件已恢复。
从 SD 卡恢复已删除的文件
通常,在 SD 卡上,人们很容易注意到它们用于存储多媒体文件。因此,建议对这些文件使用更专门的程序。
在本例中,我们将使用 TestDisk 中包含的名为 Photorec 的应用程序。
首先,将SD卡插入PC。接下来,以 root 身份运行 photorec:
$ sudo photorec [device]
然后,您将看到下图。选择媒体并继续,然后按 Enter。
接下来,选择分区。然后选择选项并按 Enter 键。
在那里您将看到恢复选项:
按 q 返回上一屏幕。有必要选择我们要恢复的文件类型。这是通过选择“文件选项”选项来实现的。
按 s 键选择和取消选择所有格式。您还可以使用右键选择要恢复的文件类型。要保存所选选项,请按 b 键。使用 q 键返回主菜单。
然后,在主菜单上选择“搜索”选项来启动该过程。并选择文件系统。
然后您将看到两个选项。自由而完整。通常,免费就足够了。如果您想进行深入分析,请选择“整体”,但请记住,这会减慢整个过程。
现在,需要选择保存文件的位置。为此,请按 c 键。
选择目的地后,恢复过程将开始。请记住,系统将崩溃并冻结。所以要有耐心。
最后,您将看到一条消息,通知您所发生的一切。
接下来,检查结果。
从 NTFS 恢复已删除的文件
NTFS 是一种 Windows 文件系统。如果您是计算机上使用这两个系统的人之一,那么您可能需要使用此文件系统从 Windows 分区恢复已删除的文件。
为此,我们有一个名为 ntfsundelete 的工具,它使用起来非常简单。
首先,您需要扫描磁盘或分区。例如:
$ sudo ntfsundelete /dev/sda1
然后,我们将能够使用以下命令恢复已删除的文件:
$ sudo ntfsundelete [HD_Or_partition] -u -m [filename]
恢复的文件现在属于 root 用户。最后一步是使用以下命令更改文件的权限和所有者chown命令.
从 FAT32 恢复文件
另一种常见的 Windows 文件系统是 FAT32。您可以使用 TestDisk 从 FAT32 恢复文件。
因此,再次以 root 用户身份运行 testdisk 并将磁盘作为参数传递:
$ sudo testdisk [partition/HD]
然后继续按照上述步骤恢复文件。
恢复内存文件(使用 inode)
如果删除了另一个进程正在使用的文件,可以使用 inode 从内存中恢复它。
必须建立一些初始条件。第一的,已删除的文件必须由另一个进程保持打开状态。然后你必须验证该进程并最终恢复它并更改其权限。
在本例中,我将使用 nano 编辑器创建一个名为 example.txt 的文件并添加一些文本:
$ nano example.txt
然后保存更改并打开另一个终端窗口并使用该文件。例如,与更少的命令.
$ less example.txt
打开另一个终端会话,删除该文件并确保它已被删除:
$ rm example.txt
$ ls example.txt
如您所见,该文件不再存在。但我们将能够恢复它。为此,我们获取与文件 inode 关联的进程号。
$ lsof | grep example.txt
您将注意到正在使用该文件的进程和命令(less 命令)。从该图像中,我们必须注意第二个和第四个值。它们分别是进程的 PID 和文件的描述符。
然后,使用以下命令恢复它:
$ ls -l /proc/2325/fd/4
然后将其复制到您想要的任何位置,这足以恢复它。
$ sudo cp /proc/2325/fd/4 .
接下来,检查结果并打开文件:
这样,我们就可以恢复仍在内存中并由具有 inode 的进程使用的已删除文件。
从 EXT4 恢复已删除的文件(使用 extundelete)
EXT4 是大多数 Linux 发行版上的默认文件系统。它速度相当快,并且具有 Linux 内核充分利用的技术特性。
从 EXT4 文件系统恢复文件所使用的工具之一是 extundelete。
Extundelete 是一个开源应用程序,允许从具有 EXT3 或 EXT4 文件系统的分区或磁盘恢复已删除的文件。它使用简单,并且默认安装在大多数 Linux 发行版上。
要恢复某个文件,只需使用以下命令:
$ sudo extundelete [device] -restore-file [pathfile]
例如:
$ sudo extundelete /dev/sdb1 -restore-file home/angelo/other.txt
如果要恢复文件夹中的所有文件,请使用通配符:
$ extundelete /dev/sda6 -restore-file home/angelo/*
但如果你想恢复分区或磁盘上的所有文件,下面的命令就足够了:
$ extundelete /dev/sda6 -restore-all
因此,恢复的文件将位于 RECOVERED_FILES 目录中。这样,您就可以使用extundelete恢复已删除的文件。
使用调试文件
还可以使用 debugfs 工具来恢复已删除的文件。该工具还使用已删除文件的索引节点号。但是,它仅适用于 EXT4 文件系统。
它的操作也非常简单。首先,您必须输入分区或设备。
$ debugfs [device]
例如,
$ sudo debugfs /dev/sdb1
然后,过一会儿,您就可以登录 debugfs 控制台来搜索最近删除的文件。
$ debugfs: lsdel
在第一列中,您将看到该设备中已删除文件的索引节点号。然后,使用以下命令恢复它:
$ debugfs mi <inode_number>
就是这样。这很容易。
使用 ext4magic
在具有 Ext4 文件系统的磁盘上恢复已删除文件的另一种方法是使用 Ext4magic。这个应用程序的使用也非常简单。
该应用程序最基本的语法如下:
$ sudo ext4magic [device] -f [folder_to_scan] -r -d [output_folder]
如果我想从名为 files 的文件夹中恢复已删除的文件,命令将类似于以下命令:
$ sudo ext4magic /dev/sdb1 -r -d files
这就是使用 ext4magic 的简单之处。这一切都归功于 Ext4 是一个社区和开源文件系统。
恢复被覆盖的文件(使用手术刀)
Scapel 是另一个开源工具,可让您从格式化的驱动器、覆盖的文件甚至损坏的驱动器中恢复文件。它以其速度和效率而闻名。从这个意义上说,它是作为一种可供考虑的替代方案而出现的。
手术刀雕刻文件无需文件系统的帮助。它尝试提取文件的页眉和页脚,并尝试使用一些精心设计的算法来猜测整个文件结构。
与 TestDisk 一样,它可以在大多数 Linux 发行版的官方存储库中找到。因此,它的安装减少到使用终端和发行版的包管理器。
使用 Scapel 最快、最简单的方法如下:
$ scalpel [device] -o [output_folder]
output_folder 指定 scapel 将放置所有恢复文件的位置。请注意,Scalpel 将自行创建输出目录。
但 Scapel 如何知道要恢复哪些文件呢?嗯,这是在应用程序配置文件中定义的。
该配置文件通常位于以下位置:
/etc/scalpel/scalpel.conf
您可以使用您喜欢的文本编辑器打开它,然后只需取消注释行即可定义要搜索的文件格式。
您取消注释的文件格式,Scalpel 将搜索它。
接下来,运行完整的 Scalpel 命令,在输出文件夹中,您将看到恢复的文件。
$ sudo scalpel /dev/sdb1 -o recovered_files1
有时,Scalpel 会恢复部分文件。这取决于驱动器的运行状况以及损坏的数据量。
此外,您可以使用许多渴望算法,但我们在这里讨论了渴望数据的基本方法。
从不可启动的系统恢复文件
这是一个微妙的情况,因为我们需要从 Ubuntu 或其他类似的 Linux 发行版的 Live CD 进行访问。启动后,我们可以使用 TestDisk 来尝试恢复数据。
在这种情况下,我们必须使用外部驱动器来保存数据。另一方面,如果TestDisk无法完成这项工作,我们也可以尝试extundelete或ext4magic,只要分区是Ext4即可。
如果它不起作用,您可以尝试使用 TestDisk 重新生成分区,如上所述。
结论
有可能意外删除文件。我们的想法是了解恢复这些文件的适当工具和技术。
在这篇文章中,我们介绍了可以帮助避免此类问题的几种情况和不同的文件系统。
继续回来。
谢谢。