2

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

我创建了两个文件夹,“顶部”和“底部”,并尝试操纵 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. 找到top inode的inode table entry(entry 12),看它指向block 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. 和往常一样的错误

我意识到 inode 条目中的 inode 和范围树具有哈希和,但我的理解是步骤 1 到 3 不应使这些哈希值中的任何一个无效。我对内部工作的理解ls可能很低,无法找出我在这里做错了什么。

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

4

1 回答 1

1

好吧,我终于弄清楚问题所在了。

在系统日志中环顾四周,我发现每当浏览目录时,我都会收到以下消息:

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

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

"/"
 |--"top_1"
 |   \--"bottom_1" --> "top_2"
 | 
 \--"top_2"
     \--"bottom_2" --> "top_1"
于 2013-12-12T15:04:56.740 回答