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
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 :) –
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