How to find the file at a certain btrfs inode
I have a corrupt file according to btrfs
BTRFS info (device sdb1): csum failed ino 367 off 310013952 csum 1601485211 expected csum 3692975992
I assumed ino 367 means inode 367, so I can use find and try to restore the file. However find /path -inum 367
finds nothing. Anyone know how to find the corrupt file?
Solution 1:
Example:
sudo btrfs inspect-internal inode-resolve 15380 /home
man btrfs-inspect-internal
says:
inode-resolve [-v] <ino> <path>
(needs root privileges)
resolve paths to all files with given inode number ino in a given
subvolume at path, ie. all hardlinks
Options
-v
verbose mode, print count of returned paths and ioctl()
return value
Solution 2:
I'm not sure why find command didn't work for you. May be ino#367 deleted?
For me, both find
and btrfs-debug-tree
seems to be working fine.
$ find /btrfs/ -inum 257
/btrfs/100kbfile.txt
$ ls -li /btrfs/100kbfile.txt
257 -rw-r--r--. 1 root root 102400 Nov 25 21:07 /btrfs/100kbfile.txt
You can also try using 'btrfs-debug-tree' and grep for the objectid.
./btrfs-debug-tree /btrfs/partition | grep -A2 257
find your inode/objectid from output. You can see the name
associated
with objectid 257.
location key (257 INODE_ITEM 0) type FILE
namelen 13 datalen 0 name: 100kbfile.txt
Solution 3:
The method "find /path -inum xxx" works with newer kernels, issue is a bug in older brtfs kernel code.