如何在 ext3 文件系统中创建具有特定 inode 编号的文件?(例如:我想创建一个 inode-number = 12253 的文件)
3 回答
从用户空间创建文件时,我认为没有任何编程方式来请求特定的 inode 编号。除了在stat()
结果中可见之外,inode 编号在用户空间中没有任何意义;它们是文件系统内部簿记数据的一部分,就像分配文件内容的块号一样。
您可能会使用debugfs
“更改”现有文件的 inode 编号,方法是将一个 inode 的内容复制到另一个 inode,然后更新任何目录条目以指向新的 inode 并释放旧的 inode。因此,您可以使用任何 inode 编号创建文件,然后将其“更改”为所需的。但是,这必须非常小心,因为错误可能会导致文件系统损坏和数据丢失。您还必须考虑到您所需的 inode 编号已被另一个文件使用的可能性。
这是一个相当低的数字,所以很可能它已经在使用了;如果没有,你可以运行一个 Bash 脚本来创建几千个文件:比如for i in $(seq 1 12000); do touch $i.txt; done
. 然后找到你想要的:find / -inum 12253
,并将其重命名为你想要的任何内容,然后放入你想要的内容。如果您不覆盖分配的空间,在这种情况下很可能会创建一个新的 inode,那么应该这样做。不过,这是一个草率的解决方案,必须有更好的方法。
inode 编号由系统分配。创建文件时,用户代码不能指定它。