当用户不小心删除了一个仍然需要的文件时,在大多数情况下没有简单的方法来检索或重建该文件。不过,幸运的是,可以通过几种方式恢复文件。当用户删除一个文件时,该文件并没有消失,它只是隐藏了一段时间。这里解释了它是如何工作的。在文件系统中,有一个叫做文件分配表的东西,它记录文件在存储单元(如硬盘、MicroSD卡、闪存驱动器等)中的位置。当一个文件被删除时,文件系统执行文件分配表中的两个任务之一:文件在文件分配表中的条目被标记为“空闲空间”或者文件在文件分配表中的条目被删除,以及相应的空间被标记为可用空间。现在,如果需要在存储单元上放置新文件,操作系统会将文件放置在标记为空的空间中。新文件写入该槽后,删除的文件将完全消失。当需要恢复已删除的文件时,用户绝对不能对任何文件进行操作,因为如果文件对应的“空间”被占用,则文件永远无法恢复。恢复软件如何工作?大多数文件系统(删除文件时)只是将空间标记为空。在这些文件系统下,恢复软件查看文件分配表并将删除的文件复制到另一个存储单元。如果将该文件复制到其他需要恢复的已删除存储单元中,则用户很可能会丢失该想要的已删除文件。文件系统很少擦除文件分配表中的条目。如果文件系统这样做,则恢复软件正在恢复文件。恢复软件扫描存储单元中的文件头。所有文件都有一个特殊的编码字符串,它位于文件的顶部,也称为幻数。例如,已编译的JAVA类文件的幻数是十六进制的“CAFEBABE”。所以,如果你想恢复这种类型的文件,恢复软件会寻找“CAFEBABE”并将文件复制到另一个存储单元。一些恢复软件可以查找特定的文件类型。如果用户想要恢复PDF文件,恢复软件会寻找十六进制的幻数“25504446”,它恰好是ASCII编码的“%PDF”。恢复软件将查找所有幻数,然后用户可以选择要恢复哪个已删除的文件。如果文件的一部分被覆盖,整个文件将被损坏。通常可以恢复文件,但内容可能不再有用。例如,恢复损坏的JPEG文件将毫无意义,因为图片查看器无法从损坏的文件生成图片。因此,即使用户拥有该文件,该文件也是无用的。设备位置:在我们继续之前,以下信息将帮助引导恢复软件到正确的存储单元。所有设备都挂载在/dev/目录下。操作系统给每个设备起的名字(不是管理员给每个分区或设备起的名字)遵循一定的命名规则。第一个SATA硬盘驱动器上的第二个分区的名称将是sda2。名称的第一个字母暗示存储类型,在本例中指的是SATA,但字母“s”也可能指SCSI、FireWire(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设备分开命名。RecoverywithTestDisk:每个恢复软件都有不同的功能、特点,支持不同的文件系统。以下是使用TestDisk在各种文件系统上恢复文件的一些指南。FAT16、FAT32、exFAT(FAT64)、NTFS和ext2/3/4:TestDisk是一款开放源代码的免费软件,可在Linux、*BSD、SunOS、MacOSX、DOS和Windows上运行。可以在以下链接找到TestDisk:http://www.cgsecurity.org/wiki/TestDisk。也可以通过键入sudoapt-getinstalltestdisk来安装TestDisk。TestDisk有很多功能,但本文将只关注恢复文件的功能。通过键入sudotestdisk命令,从具有root权限的终端打开TestDisk。现在,将执行TestDisk命令行应用程序。终端显示将改变。TestDisk询问用户是否可以保留日志,这完全取决于用户。如果用户正在从系统存储中恢复文件,则无需保留日志。可用选项有生成、追加和无日志。如果用户想保留日志,日志将保存在用户的主目录中。在下一个屏幕中,存储设备列为/dev/*。对于我的系统,系统的存储单元是/dev/sda,也就是说我的存储单元是SATA硬盘(sd),是第一个硬盘(a)。每个存储单元的容量以Gigabyte(千兆字节)显示。使用上下键选择一个存储设备,点击进入。下一个屏幕显示分区表列表(也称为分区映射)。正如文件有文件配置表一样,分区也有分区表。分区是存储设备上的一个段。例如,在几乎所有的Linux系统中,至少有两种分区类型——EXT3/4和Swap。下面将简要描述每个分区表。TestDisk不支持所有类型的分区表,因此这不是完整列表。Intel——这种分区表在Windows系统和很多Linux系统上很常见,也常被称为MBR分区表。EFIGPT——这种类型的分区表在Linux系统中很常用。对于Linux系统来说,这个分??区表是最推荐的,因为逻辑分区或者扩展分区的概念并不适用于GPT(GUIDPartitionTable)分区表。这意味着如果每个分区中有一个Linux系统,则单个Linux用户可以从多种类型的Linux系统进行多重引导。使用GPT分区表当然还有其他优势,但这些超出了本文的范围。Humax-Humax分区图适用于韩国公司Humax制造的设备.Mac-适用于Apple设备的Apple分区图(APM)。无-一些设备没有分区表。例如,许多小霸王游戏机不使用分区图。如果用户尝试从具有其他分区表类型的此类设备恢复文件,用户会感到困惑,为什么TestDisk找不到任何文件系统或文件。Sun-Sun分区表用于Sun系统。Xbox-Xbox适用于使用Xbox分区图的存储设备。如果用户选择“Xbox”,即使他的系统使用GPT分区表,TestDisk也将无法找到任何分区或文件系统。如果TestDisk执行用户选择的操作,它可能会猜错。(下图显示分区表类型错误时的输出)当用户为他们的设备选择了正确的选项后,在下一个屏幕中,选择“高级”选项。用户现在将看到用户存储设备上所有文件系统或分区的列表。如果用户选择了错误的分区映射,在这一步用户将知道他们做出了错误的选择。如果没有错误,通过移动文本光标突出显示包含已删除文件的分区。使用左右键突出显示终端底部的“列表”。然后,按Enter确认。一个新屏幕将显示文件和目录列表。白色的是没有被删除的,红色的是已经被删除的。最右边一列是文件名,从右到左下一列是文件的创建日期,最左边一列是文件的大小(字节/位),最左边是“-”,"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-csmplayer|grepmp3上面的命令将列出smplayer使用的所有文件,该列表由grep命令通过管道搜索mp3。命令输入如下所示:smplayer10037colliermp3169r8,16763761704294/usr/bin/smplayer现在,键入以下命令直接从RAM中恢复文件(在Linux系统上,/proc/映射到RAM)并将文件复制到选定的文件夹。其中cp指的是复制命令,输出中的数字10037来自进程数,输出中的数字169指的是文件描述符,“~/Music/”是目标目录,最后一个“music.mp3”是用户想要的恢复文件的名称。cp/proc/10037/fd/169~/Music/music.mp3真正的删除:为确保文件无法恢复,可以使用命令“擦除”硬盘。擦除硬盘实际上是将无意义的数据写入硬盘。例如,许多擦除程序将零、随机字母或随机数据写入硬盘。没有空间被占用或丢失,橡皮擦只是覆盖空位。如果存储单元被文件填满而没有可用空间,则之前删除的所有文件都将消失且无法恢复。擦除硬盘的目的是确保私人数据不被他人看到。例如,一家公司可能订购了一些新电脑,而总经理决定出售旧电脑,然而,新电脑所有者可能会看到一些机密的公司或客户信息,如信用卡号、地址等。幸运的是,公司的计算机技术人员可以在出售旧计算机之前擦除硬盘驱动器。要安装wipersecure-delete,请键入sudoapt-getinstallsecure-delete,此命令将安装4个程序的程序集,以确保无法恢复已删除的文件。srm-永久删除文件。使用:srm-f./secret_file.txtsfill-擦除空白空间。用法:sfill-f/mount/point/of/partitionsswap-擦除交换空间。使用方法:sswap-f/dev/SWAP_DEVICE如果电脑真的清除了被删除的文件,执行删除任务的时间会更长。将一些空间标记为空既快速又容易,但让文件永远消失需要时间。例如,擦除存储单元可能需要几个小时(取决于磁盘的大小)。无论如何,当前系统运行良好,因为即使用户清空垃圾箱,他们仍然有另一个机会改变主意(或错误)。
