2010-12-05 26 views
2

J'essaye d'éditer certaines données d'inode. Cependant, quand je lis un inode, je ne reçois que des zéros ou des données invalides. Voici les principales étapes de ce que je fais:La lecture de l'inode renvoie des données invalides

//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); 

Tout ce que je reçois est égal à zéro ou quelques fois des données non valides pour d'autres inodes. J'ai testé avec différents numéros d'inode obtenu à partir de la commande "ls -i filename" et vérifié les données avec "stat filename". Le descripteur de groupe est correct, tout comme l'emplacement de la table inode (vérifié avec dumpe2fs).

J'ai également essayé d'obtenir des informations d'inode en utilisant l'outil "lde" (lde -i 15/dev/sdb1). Il donne également des données invalides. S'il vous plaît laissez-moi savoir ce que je manque ici.

Merci à l'avance, Maliha

Répondre

0

est-BLOCK_SIZE correct? Je vérifie que le calcul de décalage correspond à ce qui est montré en utilisant od.

+0

J'utilise BLOCK_SIZE comme: ((EXT2_MIN_BLOCK_SIZE) << (super_block.s_log_block_size)) J'ai lu le bloc de table inode dans l'hexagone en utilisant LDE et od - à la fois affiche les données non valides pour les inodes. Y a-t-il des métadonnées/en-têtes au début de la table d'inodes? Merci pour votre réponse :) –

+0

Quel fichier est ouvert en tant que 'fd'? Est-ce le périphérique brut, ou est-ce une partition sur l'appareil? Est-ce que '* grpdesc' semble correct? – wallyk