2010-12-05 7 views
2

Ich versuche, einige Inode-Daten zu bearbeiten. Wenn ich jedoch einen Inode lese, erhalte ich nur Nullen oder ungültige Daten. Hier sind die wichtigsten Schritte von dem, was ich tue:Lesen von Inode gibt ungültige Daten zurück

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

Alles, was ich bekommen null oder einige Male ungültige Daten für andere I-Nodes. Ich habe mit verschiedenen Inode-Nummern aus dem "ls -i filename" -Befehl getestet und die Daten mit "stat filename" verifiziert. Der Gruppendeskriptor und die Position der Inode-Tabelle (überprüft mit dumpe2fs) sind jedoch korrekt.

Ich habe auch versucht, Inode-Informationen mit dem Tool "lde" (lde -i 15/dev/sdb1) zu bekommen. Es gibt auch ungültige Daten. Bitte lassen Sie mich wissen, was ich hier vermisse.

Vielen Dank im Voraus, Maliha

Antwort

0

Ist BLOCK_SIZE richtig? Ich würde überprüfen, dass die Offset-Berechnung dem entspricht, was unter od angezeigt wird.

+0

Ich verwende BLOCK_SIZE als: ((EXT2_MIN_BLOCK_SIZE) << (super_block.s_log_block_size)) las ich den inode Tabellenblock in hex mit lde und od - sowohl für den Inodes ungültige Daten zeigt. Gibt es irgendwelche Metadaten/Header am Anfang der Inode-Tabelle selbst? Vielen Dank für Ihre Antwort :) –

+0

Welche Datei wird als 'fd' geöffnet? Ist es das rohe Gerät oder ist es eine Partition auf dem Gerät? Ist '* grpdesc' in Ordnung? – wallyk

Verwandte Themen