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.