O comando imap
no debugfs pode dizer onde está um inode. Exemplo:
$ debugfs -R 'imap <128901>' /dev/whatever
debugfs 1.42.5 (29-Jul-2012)
Inode 128901 is part of block group 16
located at block 524344, offset 0x0400
Para obter um despejo bruto do inode 128901, você procuraria byte 524344*block_size + 0x0400
e ler inode_size
bytes. Você pode obter os tamanhos com o comando stats
em debugfs
ou o utilitário separado dumpe2fs
.
stats
ou dumpe2fs
também fornecerá uma listagem completa de todas as áreas de armazenamento de inodes para que você possa criar sua própria função que execute o equivalente a imap
sem realmente chamar debugfs
(ou executá-lo interativamente). Apenas lembre-se quando você faz o seu cálculo, não há nenhum zero inode. inode 1 começa no byte 0 do primeiro bloco de inodes.
Se você quiser fazer isso em um programa C sem programas externos, você deve olhar a biblioteca libext2
, que é usada por todos os utilitários padrão ext2. Eu não usei isso sozinho, mas eu suspeito que com a documentação do libext2 mais o código-fonte do debugfs para usar como inspiração, você pode escrever sua própria função imap
-like facilmente.
... e aqui é onde me ocorreu que talvez você não tenha literalmente significado que queria os dados brutos do inode. Talvez você queira o conteúdo do arquivo que o inode descreve. Nesse caso, é ainda mais fácil. debugfs
tem um comando interno para isso:
debugfs -R 'cat <128901>' /dev/whatever
imprime o conteúdo do arquivo cujo número de inode é 128901.