2010-12-05 63 views
2

我正在尝试编辑一些inode数据。但是,当我读取任何inode时,我只会得到零或无效的数据。 下面是我在做什么的主要步骤:读取inode返回无效数据

//reading, say inode number 15 - it belongs to group 0, and it's a valid inode 
int inode_no=15 
//buffer to hold inode structure 
struct ext2_inode inode_buffer_test1; 
//points to the start of group descriptor structure. It is correct, I have validated the results with dumpe2fs. 
struct ext2_group_desc *grpdesc; 
//file descriptor of a device file holding ext2 FS, opened in O_RDONLY mode 
int fd; 

... 

lseek64(fd,(long long)grpdesc[0].bg_inode_table*BLOCK_SIZE + sizeof(struct ext2_inode)*(inode_no-1),SEEK_SET); 
read(fd,&inode_buffer_test1,sizeof(struct ext2_inode)); 
printf("file size=%d, blocks=%d\n",inode_buffer_test1.i_size,inode_buffer_test1.i_blocks); 

我得到的是其他的inode零个或有时无效数据。我测试了来自“ls -i filename”命令的不同inode号码,并使用“stat filename”验证了数据。但是,组描述符是正确的,inode表的位置也是正确的(使用dumpe2fs进行验证)。

我也尝试使用“lde”工具(lde -i 15/dev/sdb1)获取inode信息。它也提供无效的数据。请让我知道我在这里失踪。

由于提前, Maliha

回答

0

BLOCK_SIZE是否正确?我会验证偏移量计算是否与使用od显示的内容相对应。

+0

我使用BLOCK_SIZE为: ((EXT2_MIN_BLOCK_SIZE)<<(super_block.s_log_block_size)) 使用LDE和OD我读了十六进制的inode表块 - 既显示了inode的无效数据。 inode表本身的开始处是否有任何元数据/标题? 感谢您的回复:) – 2010-12-07 06:02:17