文件神秘地为空。选择恢复?


9

我看过几篇有关恢复已删除文件的文章,但是这种情况有所不同。我的妻子有一个名为Journal.odt的文件,其中保存了许多重要的个人信息,例如关于我们孩子的特殊记忆。前几天,当她试图在OpenOffice中打开它时,它抱怨该格式。我让她的命中取消并退出。当我cat将文件完全清空时。ls表示文件为0字节。

如果她不小心选择了文件中的所有文本,按了退格键并将其保存,则文件中仍然会有OpenOffice元信息。

我立即关闭她的笔记本电脑,以防止对磁盘进行更多更改,直到我想出办法去做。

我过去做过一些复杂的事情,例如dd用于从磁盘上恢复原始文本,但是我不知道该怎么做。由于odt文件不是纯文本,因此我不能仅通过grep将整个磁盘通过管道传输。

任何建议将不胜感激。

另外,如果有人对可能出了什么问题有任何见解,我也很乐意听到。

谢谢


1
如果不小心删除了文件或进行了其他操作,情况会有所不同,但是在文本编辑器等中保存文件时,通常会写“就地”,从而有效地擦除了可以通过法医强度恢复恢复的任何内容。如果您不立即关闭系统会更好,我敢打几下Control + z(在Open Office中内置“撤消”功能)可以解决此问题。
蒂姆(Tim)

@Tim我明白您的意思,但是很遗憾,该文件已在几天前清空。文件的上次修改时间是几天前。在我的描述中,当她在OO中打开它时,它已经是空的。不过谢谢
jcbwlkr 2012年

2
不要试图打败一匹死马,也不要试图摔倒一个男人,但是我怀疑这种经历会让您寻找备用解决方案。查看一个简单的Linux兼容备份应用程序的“ Areca Backup”。
蒂姆(Tim)

磁盘已满?检查df -h
jippie 2012年

@Tim如果文件为0字节,则它不是OO文档。Ctrl+Z不会做任何事情,因为该文件不是由OO保存的。@ Jacobwalker0814 ODT文件是zip文件,因此像testdisk这样的恢复工具有机会找到它们; 但是并不能保证,即使数据仍然存在,您也可能不得不浏览许多其他zip文件。为了将来,请备份!
吉尔(Gilles)'所以

Answers:


3

如果您正在使用ext3文件系统,请尝试遵循Carlo Wood的HOWTO

简而言之,

  • 使用ext3grep $ IMAGE --ls --inode 2 | grep your_file查找您要查找的文件(其中$ IMAGE是您的分区,例如/ dev / sda2)
  • 查找包含未分配空间日志的文件系统块。
  • 查找先前找到的所有引用块的日志描述符。
  • 用dd复制块。
  • 编辑文件以删除尾随零。
  • 随心所欲地整理文件

从来源:

“本章手动恢复示例

在下面的示例中,我们将手动恢复一个小文件。仅给出部分输出以节省空间并使示例更易读。

使用ext3grep $ IMAGE --ls --inode我们找到要恢复的文件的名称:

$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 Thu Feb 7 03:41:43 2008 drwxr-xr-x carlo

$ ext3grep $ IMAGE --ls --inode 195457 | grep'bin $'| 头-n 1 34 35 d 309540 D 1202352104 Thu Feb 7 03:41:44 2008 drwxr-xr-x bin

$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 Thu Feb 7 03:24:53 2008 rrwxr-xr-x start_azureus

显然,inode 309631已删除,并且我们没有此文件的块号:

$ ext3grep $ IMAGE --print --inode 309631 [...]未分配Inode组:19代ID:2771183319 uid / gid:1000/1000模式:rrwxr-xr-x大小:0链接数:0扇区: 0(-> 0个间接块)。

Inode时间:已访问:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified:1202351093 = Thu Feb 7 03:24:53 2008 Deleting time:1202351093 = Thu 2008年2月7日03:24:53

直接块:

因此,我们将尝试在日志中查找它的较旧版本。首先,我们找到包含该索引节点的文件系统块:

$ ext3grep $ IMAGE --inode-to-block 309631 | grep驻留在块622598中,inode 309631驻留在偏移量0xf00处。

然后,我们找到所有引用块622598的日志描述符:

$ ext3grep $ IMAGE --journal --block 622598 [...]引用块622598的日记语描述符:4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381350 31299 4381374 32718 4381707 1465 4381709 2132 4381755 2945 4381961 4606 4382137 6672 4382138 7536 4382139 7984 4382140 8931

这意味着序列号为4381294的事务在块26582中具有块622598的副本,依此类推。在底部,最大的序列号应该是写入磁盘的最后一个数据,因此,块8931应该与当前块622598相同。为了找到最后一个未删除的副本,应该从底部开始并开始工作向上。

如果尝试打印这样的块,则ext3grep会识别出它是inode表中的一个块,并将在其中打印所有32个inode的内容。但是,我们只希望看到inode 309631;因此,我们使用了一个智能grep:

$ ext3grep $ IMAGE --print --block 8931 | grep -A15'Inode 309631'-------------- Inode 309631 -----------------------生成ID:2771183319 uid / gid:1000/1000模式:rrwxr-xr-x大小:0链接数:0扇区:0(-> 0个间接块)。

Inode时间:已访问:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified:1202351093 = Thu Feb 7 03:24:53 2008 Deleting time:1202351093 = Thu 2008年2月7日03:24:53

直接块:

这确实与我们在方框622598中看到的相同。接下来,我们看一下较小的序列号,直到找到一个删除时间为0的序列号。我们找到的第一个(自下而上)是块6073:

$ ext3grep $ IMAGE --print --block 6073 | grep -A15'Inode 309631'-------------- Inode 309631 -----------------------生成ID:2771183319 uid / gid:1000/1000模式:rrwxr-xr-x大小:40个链接:1个扇区:8个(-> 0个间接块)。

Inode时间:已访问:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified:1189688692 = Thu Sep 13 15:04:52 2007 Deleting time:0

直接块:645627

上面的代码是自动化的,可以通过命令行选项--show-journal-inodes更快地完成。此选项将找到该索引节点所属的块,然后在日志中查找该索引块的所有副本,然后仅从每个这些块中打印所请求的索引节点(如您所知,每个包含32个索引节点),从而消除重复项:

$ ext3grep $ IMAGE --show-journal-inodes 309631组数:75最小/最大日志块:1115/35026正在加载日志描述符...完成日志事务4381435绕回,此事务可能丢失了一些数据块。期刊中的描述符数量:30258;最小/最大序列号:4379495/4382264在日志中找到的inode 309631的副本:

-------------- Inode 309631 -----------------------生成ID:2771183319 uid / gid:1000/1000模式:rrwxr-xr-x大小:0链接数:0扇区:0(-> 0个间接块)。

Inode时间:已访问:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified:1202351093 = Thu Feb 7 03:24:53 2008 Deleting time:1202351093 = Thu 2008年2月7日03:24:53

直接块:

-------------- Inode 309631 -----------------------生成ID:2771183319 uid / gid:1000/1000模式:rrwxr-xr-x大小:40个链接:1个扇区:8(-> 0个间接块)。

Inode时间:已访问:1202350961 = Thu Feb 7 03:22:41 2008 File Modified:1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified:1189688692 = Thu Sep 13 15:04:52 2007 Deleting time:0

直接块:645627

该文件确实很小:只有一个块。如前所示,我们使用dd复制此块:

$ dd if = $ IMAGE bs = 4096 count = 1 skip = 645627 of = block.645627 1 + 0条记录在1 + 0条记录中复制出4096个字节(4.1 kB),0.0166104秒,247 kB / s

然后编辑文件以删除尾随零,或复制前40个字节(文件的给定大小):

$ dd if = block.645627 bs = 1 count = 40 of = start_azureus 40 + 0条记录在40 + 0条记录中复制出40个字节(40 B),0.000105397秒,380 kB / s

$ cat start_azureus cd / usr / src / azureus / azureus ./azureus&

已恢复!”


我很乐意对此进行研究,但该链接似乎已失效。
jcbwlkr 2012年

3
对我来说似乎并不死。
李斯特先生,2012年

是的,我也可以访问它。
java_xof

现在工作正常。肯定不是早。谁知道?谢谢,java。我看看。
jcbwlkr 2012年

没问题,希望对您有所帮助,没有冒犯,但我对互动妻子<->计算机有所了解;)
java_xof

2

尝试使用testdisk和photorec,但是据我所知,这可能是了解常规备份价值的艰难方法。另外,您可能希望从CD引导,以防止进一步更改硬盘。我个人对此很喜欢System Rescue Disk,但它很大程度上是基于命令行的。


1

使用Caine一种特殊的linux发行版进行数字取证。它是用于文件和硬盘恢复的大量工具。


谢谢。我将查看该发行版,看看它是否包含某些内容。您对解决此问题的特定工具或方法有什么建议?这里的问题是许多工具似乎都没有删除该文件。它只是失去了它的内容。
jcbwlkr 2012年

1
Open Office有时会创建一个包含先前保存的文档的隐藏文件。如果幸运的话,您可以尝试使用“ extundelete”或“ testdisk”来恢复它。cgsecurity.org/wiki/ TestDisk
PsyStyle 2012年

在〜/ .openoffice.org / 3 / user / backup /或〜/ .libreoffice.org / 3 / user / backup /中查找。我编写了一个脚本来清除这些目录,以使删除的敏感内容仍然不存在。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.