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)
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.
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.
The inode number is assigned by the system. User code cannot specify it when creating a file.
来源:https://stackoverflow.com/questions/5752822/how-do-i-create-a-file-with-a-specific-inode-number