Question Recherche inversée de inode / fichier de offset dans le périphérique brut sous linux et ext3 / 4?


Dans linux, étant donné un décalage dans un périphérique de disque brut, est-il possible de revenir à une partition + inode?

Par exemple, supposons que la chaîne "xyz" soit contenue à l'octet offset 1000000 sur / dev / sda: (par exemple, xxd -l 100 -s 1000000 / dev / sda montre un vidage commençant par "xyz")

1) Comment puis-je déterminer quelle partition (le cas échéant) l'offset de 1000000 se trouve dans? (J'imagine que c'est facile, mais je l'inclus pour l'exhaustivité)

2) En supposant que le décalage se trouve dans une partition, comment puis-je trouver à quel inode il appartient (ou déterminer s'il fait partie de l'espace libre)? Vraisemblablement, c'est spécifique au système de fichiers, dans quel cas quelqu'un sait-il comment faire pour ext4 et ext3?


4
2017-10-21 22:06


origine


Il est certainement possible et il y a quelques années, j'ai vu le HOWTO quelque part sur Internet. L'astuce implique des calculs sur différents paramètres du système de fichiers et de la table de partition. Essayez de le chercher. Cela pourrait être utile: unix.stackexchange.com/questions/37119/ ... - Serge


Réponses:


Je devais juste faire une chose similaire, alors j'ai pensé partager ma solution.

Vous pouvez voir à quelle partition appartient un offset d'octet de lecteur en vérifiant les éléments 'offset' et 'size' des udisks --show-info output; par exemple.

user@host:~$ sudo udisks --show-info /dev/sda1 | grep -i 'offset'
    offset:                    1048576
    alignment offset:          0

Soustrayez ce décalage du décalage de disque pour obtenir le décalage d'octet dans la partition. Le décalage de disque (10000000) dans / dev / sda correspond donc à un décalage de partition (10000000 - 1048576) = 8951424 dans / dev / sda1

Vous pouvez découvrir la taille des blocs dans une partition à l'aide de la commande suivante:

user@host:~$ sudo tune2fs -l /dev/sda1  | grep -i 'block size'
Block size:               4096

Diviser le décalage d'octet de la partition par la taille du bloc pour déterminer le décalage du bloc, dans ce cas 8951424/4096 = 2185

Exécutez la commande suivante pour savoir quel inode occupe ce bloc:

user@host:~$ sudo debugfs -R "icheck 2185" /dev/sda1
debugfs 1.41.11 (14-Mar-2010)
Block   Inode number
2185    123456 

puis la commande suivante pour savoir quel est le nom de fichier pour cet inode:

user@host:~$ sudo debugfs -R "ncheck 123456" /dev/sda1
debugfs 1.41.11 (14-Mar-2010)
Inode   Pathname
123456  /tmp/some-filename.txt

Il y a une description plus longue de la façon dont cela à http://www.randomnoun.com/wp/2013/09/12/determining-the-file-at-a-specific-vmdk-offset


10
2017-09-13 07:46