5

is there any userspace API or third-party kernel module that can help to access file by inode on Linux?

I'm trying to implement something like:

int read_file_by_ino(int ino, int pos, int size, char* buf);
int write_file_by_ino(int ino, int pos, int size, const char* buf);
int readdir_by_ino(...);
int stat_by_ino(...);
...

The program is expected to run under root user, so there's no security requirement to do permission checking.

halfer
  • 19,824
  • 17
  • 99
  • 186
zJay
  • 2,889
  • 3
  • 22
  • 19
  • Probably not, and why do you ask? It looks like a reliability nightmare. So it is certainly **a bad idea** – Basile Starynkevitch Jul 15 '15 at 14:07
  • 2
    @BasileStarynkevitch I'm implementing a fuse program, which needs to operate remote filesystem, the fuse low-level API works with i-node number. However, fuse high-level API works with path, but I think that there will be some performance loss. – zJay Jul 16 '15 at 02:31
  • Nice answer with rationale "why?" : http://stackoverflow.com/a/36092651/544721 – Grzegorz Wierzowiecki May 21 '17 at 13:01

3 Answers3

3

I found the question connected concerning similar topic here.

Summarizing, check out those commands:

  • find /path/to/mountpoint -inum <inode number>
  • sudo debugfs -R 'ncheck 393094' /dev/sdaX 2>/dev/null

Hope this helps you investigate further.

Community
  • 1
  • 1
Luke
  • 1,369
  • 1
  • 13
  • 37
1

Not sure if I understood your problem correctly but:
You can start with "/" directory and proceed recursively (or any loop for that matter) with children. Compare the inode value with strcut stat.ino_t. Once you find it, open the path/file.

Pawan
  • 1,537
  • 1
  • 15
  • 19
1

I don't know if there is an easier way or not but you can do this with bash. with ls -i command you can see the inodes too,

$ ls -i
11147622 file.txt

the first column is the inode number, the blow command shows the inodes in current directory

$ ls -i | awk {'print $1'}

so you need to check the inodes from / too all it's subdirectories until find it

ls -iR /

it shows all subdirectories and there files with there inode number

now you should start from / and use awk to or cut command to have the first column(inode number is in the first column) then compare it with the inode you want to find.

Fattaneh Talebi
  • 727
  • 1
  • 16
  • 42