【发布时间】:2011-04-22 14:49:03
【问题描述】:
如何在 ext3 文件系统中创建文件 具有特定的 inode 编号? (例如:我想创建一个 inode-number = 12253 的文件)
【问题讨论】:
-
+1 个有趣的问题!
-
如果那个inode号被占用了怎么办?
标签: ext3
如何在 ext3 文件系统中创建文件 具有特定的 inode 编号? (例如:我想创建一个 inode-number = 12253 的文件)
【问题讨论】:
标签: ext3
我认为在从用户空间创建文件时,没有任何编程方式可以请求特定的 inode 编号。除了在stat() 结果中可见之外,inode 编号在用户空间中没有任何意义;它们是文件系统内部簿记数据的一部分,就像分配文件内容的块号一样。
您可以使用debugfs 来“更改”现有文件的inode 编号,方法是将一个inode 的内容复制到另一个inode,然后更新任何目录条目以指向新inode 并释放旧inode。因此,您可以使用任何 inode 编号创建文件,然后将其“更改”为所需的。但是,这必须非常小心,因为错误可能会导致文件系统损坏和数据丢失。您还必须考虑到您所需的 inode 编号已被另一个文件使用的可能性。
【讨论】:
debugfs打开卷,指定-w将其打开为可写2)@ 987654326@ 3) seti <5> 4) sif <5> mode 0x81FF 5) ln <5> BootFile 6) sif <5> links_count 1 (ln 不会改变这个字段) 7) 关闭debugfs 8) 挂载卷 9) 编辑BootFile: )
EXT2_BOOT_LOADER_INO。此外,我是在受控环境(非关键 SD 卡)中进行此操作的。
这是一个相当低的数字,所以它很可能已经在使用;如果没有,你可以运行一个 Bash 脚本来创建几千个文件:比如for i in $(seq 1 12000); do touch $i.txt; done。然后找到你想要的:find / -inum 12253,并将其重命名为你想要的任何内容,然后放入你想要的内容。如果您不覆盖分配的空间,在这种情况下很可能会创建一个新的 inode,那么应该这样做。不过,这是一个草率的解决方案,必须有更好的方法。
【讨论】:
inode 编号由系统分配。创建文件时用户代码不能指定。
【讨论】: