如何创建具有特定 inode 编号的文件?

发布于 2024-11-02 23:39:58 字数 75 浏览 4 评论 0原文

如何在 ext3 文件系统中创建文件 具有特定的索引节点号? (例如:我想创建一个 inode-number = 12253 的文件)

How can I create a file in ext3 filesystem
with a specific inode number?
(ex: I want to create a file with inode-number = 12253)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萌逼全场 2024-11-09 23:39:58

我认为从用户空间创建文件时没有任何编程方式来请求特定的索引节点号。除了在 stat() 结果中可见之外,inode 编号在用户空间中没有任何意义;它们是文件系统内部簿记数据的一部分,就像分配文件内容的块号一样。

您可能可以使用 debugfs 来“更改”现有文件的 inode 编号,方法是将一个 inode 的内容复制到另一个 inode,然后更新所有目录条目以指向新的 inode 并取消分配旧的 inode。因此,您可以使用任何 inode 编号创建文件,然后将其“更改”为所需的编号。然而,这必须非常小心,因为错误可能会导致文件系统损坏和数据丢失。您还必须考虑您所需的索引节点号已被另一个文件使用的可能性。

I don't think there's any programmatic way to request a specific inode number when creating a file from userspace. Other than being visible in stat() results, inode numbers have no significance in userspace; they're part of the filesystem's internal bookkeeping data, just like the block numbers where the file contents are allocated.

You could probably use debugfs to "change" an existing file's inode number, by copying the contents of one inode to another, then updating any directory entries to point to the new inode and deallocating the old one. So you could create your file with any inode number, then "change" it to the desired one. This would have to be done with extreme care, however, since mistakes are likely to result in filesystem corruption and data loss. You'd also have to account for the possibility that your desired inode number is already in use by another file.

小嗲 2024-11-09 23:39:58

这是一个相当低的数字,所以很可能它已经在使用中;如果没有,您可以运行 Bash 脚本来创建几千个文件:类似于 for i in $(seq 1 12000);触摸$i.txt;完成。然后找到你想要的:find / -inum 12253,并将其重命名为你想要的任何名称,然后将你想要的内容放入其中。如果您不覆盖分配的空间(在这种情况下很可能会创建一个新的索引节点),那么应该可以做到这一点。不过,这是一个草率的解决方案,必须有更好的方法。

That's a pretty low number, so chances are it's already in use; if not, you could run a Bash script to create a few thousand files: something like for i in $(seq 1 12000); do touch $i.txt; done. Then find the one you want: find / -inum 12253, and rename it to whatever you want, and put in it what you want. If you don't overwrite the allocated space, in which case a new inode will most likely be created, that should do it. It's a sloppy solution, though, and there must be a better way.

百善笑为先 2024-11-09 23:39:58

inode号由系统分配。用户代码在创建文件时无法指定它。

The inode number is assigned by the system. User code cannot specify it when creating a file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文