通过操作ext4创建目录循环

时间:2013-11-15 16:33:24

标签: linux filesystems ext4

出于学术目的,我正在搞乱一些文件系统。 我的目标之一是在每个文件系统中创建一个目录循环。 目前我遇到了ext4,由于某种原因,它不会像其他原因一样工作。

我创建了两个文件夹“top”和“bottom”,并尝试操作ext4的磁盘结构,从底部返回到顶部创建某种硬链接,从而产生无限循环。

问题是,当我用ls浏览文件系统时,它既不显示两个文件夹(虽然我只操纵了底层文件夹)或显示顶部,但在顶部,目录列表中断如下:

ls: Access to bottom not possible: I/O Error (freely translated from german)
total 2
drwxr-xr-x 3 root root 1024 Nov 14 15:49 .
drwxr-xr-x 4 root root 1024 Nov 14 15:48 ..
d????????? ? ?    ?       ?            ? bottom

到目前为止我采取的步骤是:

  1. 找到顶部inode的入口表条目(条目12),看它指向块3510
  2. 下一个inode表条目用于底部(条目13),看它指向块3511
  3. 转到方框3510,让。并且......未触动但是将底部的inode编号更改为12
  4. 尝试使用ls - >访问目录错误
  5. 转到方框3511,改变。到inode 12,..到inode 2(对于根目录)
  6. 尝试使用ls - >访问目录错误
  7. 更改inode表中的inode条目13,并让它指向块3510
  8. 与往常一样的错误
  9. 我意识到inode和inode条目中的树范围都有哈希,但我的理解是步骤1到3不应该使这些哈希值中的任何一个无效。 我对ls的内部工作的理解可能很低,以找出我在这里做错了什么。

    有人知道我做错了什么,或者有更好的方法来实现我想做的事情吗?非常感谢帮助,因为我需要学习论文的循环。

1 个答案:

答案 0 :(得分:1)

好的,我终于弄明白了问题所在。

在syslog中查看我发现每当浏览目录时,我都会收到以下消息:

ext4_lookup:1376: inode #12: comm ls: 'bottom' linked to parent dir

在互联网上搜索了一段时间并在IRC上询问了ext4开发人员后,我终于发现了this补丁,它是针对ext4文件系统代码的,它完全针对我试图做的事情。 不错的补丁,但无论如何你都可以做一个目录循环:

"/"
 |--"top_1"
 |   \--"bottom_1" --> "top_2"
 | 
 \--"top_2"
     \--"bottom_2" --> "top_1"