2010-12-05 3 views
2

Я пытаюсь отредактировать некоторые данные 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», и проверил данные с «stat filename». Однако дескриптор группы является правильным, так же как и расположение таблицы inode (проверено с использованием dumpe2fs).

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

Спасибо заранее, Maliha

ответ

0

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

+0

Я использую BLOCK_SIZE как: ((EXT2_MIN_BLOCK_SIZE) << (super_block.s_log_block_size)) Я прочитал таблицу блока инода в шестнадцатеричном, используя LDE и спосо - как показывает неверные данные для инодов. Есть ли какой-либо метаданных/заголовка в начале самой таблицы inode? Спасибо за ваш ответ :) – 2010-12-07 06:02:17

Смежные вопросы