下一页 上一页 目录

11. 直接修改 inode

从表面上看,这种方法要容易得多。然而,正如上面提到的,它目前还无法处理超过 12 个块的文件。

对于您要恢复的每个 inode,您必须将使用计数设置为 1,并将删除时间设置为零。这可以通过 debugfs 中的 mi(修改 inode)命令来完成。以下是一些示例输出,修改上面提到的 inode 148003

debugfs:  mi <148003>
                          Mode    [0100644]
                       User ID    [503]
                      Group ID    [100]
                          Size    [6065]
                 Creation time    [833201524]
             Modification time    [832708049]
                   Access time    [826012887]
                 Deletion time    [833201524] 0
                    Link count    [0] 1
                   Block count    [12]
                    File flags    [0x0]
                     Reserved1    [0]
                      File acl    [0]
                 Directory acl    [0]
              Fragment address    [0]
               Fragment number    [0]
                 Fragment size    [0]
               Direct Block #0    [594810]
               Direct Block #1    [594811]
               Direct Block #2    [594814]
               Direct Block #3    [594815]
               Direct Block #4    [594816]
               Direct Block #5    [594817]
               Direct Block #6    [0]
               Direct Block #7    [0]
               Direct Block #8    [0]
               Direct Block #9    [0]
              Direct Block #10    [0]
              Direct Block #11    [0]
                Indirect Block    [0]
         Double Indirect Block    [0]
         Triple Indirect Block    [0]

也就是说,我将删除时间设置为 0,将链接计数设置为 1,然后对于其他每个字段都直接按了回车键。诚然,如果您要恢复大量文件,这会有点笨拙,但我认为您可以应付。如果您想要的是 chrome,您就会使用带有漂亮的“回收站”的图形化“操作系统”了。

顺便说一句:mi 输出中提到了 inode 中的“创建时间”字段。这是一个谎言!(或者至少是误导性的。)事实是,在 UNIX 文件系统中,您无法判断文件何时创建。struct statst_ctime 成员指的是“inode 更改时间”,即上次任何 inode 详细信息被更改的时间。今天的课程到此结束。

请注意,比我使用的版本更新的 debugfs 版本可能不包括上面列表中的某些字段(特别是 Reserved1 和(一些?)片段字段)。

一旦您修改了 inode,您就可以退出 debugfs 并输入

# e2fsck -f /dev/hda5

其思路是,每个已删除的文件都已被字面上地取消删除,但它们都没有出现在任何目录项中。e2fsck 程序可以检测到这一点,并将为文件系统 /lost+found 目录中的每个文件添加一个目录项。(因此,如果分区通常挂载在 /usr 上,则文件将在您下次挂载时出现在 /usr/lost+found 中。)所有剩下的工作就是从每个文件的内容中找出其名称,并将其返回到文件系统树中的正确位置。

当您运行 e2fsck 时,您将获得一些信息性输出,以及一些关于修复哪些损坏的问题。对于任何提及“摘要信息”或您已更改的 inode 的问题,请回答“yes”。其他任何事情都由您决定,尽管通常最好对所有问题都回答“yes”。当 e2fsck 完成后,您可以重新挂载文件系统。

实际上,除了让 e2fsck 将文件留在 /lost+found 中之外,还有另一种选择:您可以使用 debugfs 在文件系统中创建一个指向 inode 的链接。在您修改 inode 后,在 debugfs 中使用 link 命令

debugfs:  link <148003> foo.txt

这将在 debugfs 认为的当前目录中创建一个名为 foo.txt 的文件;foo.txt 将是您的文件。您仍然需要运行 e2fsck 来修复摘要信息和块计数等等。


下一页 上一页 目录