Чтение inode возвращает неверные данные - PullRequest
2 голосов
/ 05 декабря 2010

Я пытаюсь отредактировать некоторые данные 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);  

Все, что я получаю, это ноль или несколько раз недопустимые данные для других инодов.Я проверил с разными номерами инодов, полученными из команды «ls -i filename», и проверил данные с помощью «stat filename».Дескриптор группы, однако, является правильным, как и расположение таблицы инодов (проверено с помощью dumpe2fs).

Я также пытался получить информацию об инодах с помощью инструмента "lde" (lde -i 15 / dev/ sdb1).Это также дает неверные данные.Пожалуйста, дайте мне знать, что мне здесь не хватает.

Заранее спасибо, Малиха

1 Ответ

0 голосов
/ 05 декабря 2010

Правильно ли BLOCK_SIZE? Я бы проверил, что вычисление смещения соответствует тому, что показано с использованием od.

...