1. 根据ls -i 查看文件的inode号
2. 使用debugfs命令查看文件所在磁盘分区的超级块信息
#debugfs /dev/sda2
debugfs: stats
...
Inode count: 5152768
Block count: 20590080
Block size: 4096
Inode size: 256
Inodes per group: 8192
...
Group 11: block bitmap at 360448, inode bitmap at 360449, inode table at 360450
11878 free blocks, 7687 free inodes, 0 used directories
...
3. 计算特定inode号的inode数据偏移
例如:以90612为例
90612 = 11*8192 + 500 ---> 位于11 block group(从0开始编码)
500 = (4096 / 256 ) * 31 + 4 ----> block group内的31block的第3个(4-1)inode项
inode数据位置:(360450 + 31 = 360481) 块,偏移为(4-1)*256 = 768
4. 打印inode数据
dd if=/dev/sda2 bs=4096 skip=360481 count=1 2>/dev/null | awk 'BEGIN { LINE=0 } { if (LINE>=(768/16)) print; LINE=LINE+1 }' | xxd
注意:
debugfs的logdump -i <90612>也是用来计算本数据的,但是貌似它默认是按照inode size为128计算的,而本例中inode size为256,所以logdump得出的数据是错误的。
参考资料:
1. http://dengqi.blog.51cto.com/5685776/1351708