Re: Dump binaire depuis une inode

トップ ページ

このメッセージに返信
著者: LIGIER Philippe
日付:  
To: Stéphane Morico, guilde@imag.fr
題目: Re: Dump binaire depuis une inode
On Thu, 09 Nov 2006 21:26:41 +0100, Stéphane Morico <smorico@???>
wrote:

> Bsoir,
>
> Suite à mon précédent message (télégrenoble), je pose la question dans un
> thread séparé...
>
> Je cherche à faire un dump binaire d'un espace disque à partir d'un
> numéro d'inode..
>
> Je cherche en fait à faire un dd depuis un fichier mais à ne pas
> m'arrêter à la fin de celui-ci (pour copier les données se trouvant
> après...)
>
> Connaissez vous un outil permettant cela ou, à défaut, un outil pouvant
> me donner le segment:offset ou @ directe d'un fichier à partir de son N°
> d'inode (pour copie avec dd et ibs/skip) ??
>


Pour retouver les blocs du fichier une solution possible est d'utiliser
'debugfs' :

    /sbin/debugfs  -R 'stat <ref_fichier_dans_fs>'  /dev/<device>


Si tu veux plus de détail, j'ai joins un petit mémo avec plus
d'informations (Pour des manip. de ce genre je me fais des mémo pour éviter
d'avoir à refaire la recherche la fois suivante)

> Merci par avance..
>
>
>




--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/La question initiale est :

» Je cherche à faire un dump binaire d'un espace disque à partir d'un numéro d'inode..

» Je cherche en fait à faire un dd depuis un fichier mais à ne pas m'arrêter à la fin de celui-ci (pour copier les données se trouvant après...)

» Connaissez vous un outil permettant cela ou, à défaut, un outil pouvant me donner le segment:offset ou @ directe d'un fichier à partir de son N°
» d'inode (pour copie avec dd et ibs/skip) ??

Solution possibles :
------------------

1 - Retrouver les séries de blocs de données du fichier

    Commentaire :
    -----------


    Les séries de blocs parce que :


    a - L'inode peut accéder directement à 11 blocs de données, ensuite il faut passer par des indirections
        sur lusieurs niveaux,


    b - Les blocs de données d'un fichier ne sont pas forécement écrits à la suite les uns des autres


    Solution possible :
    -----------------


    Utiliser la commande debugfs :


    - Commande SuperUser, placée normalement dans '/sbin' -> /sbi,/debugfs pour la lancer depui un autre compte
      que root)
    - par défaut elle est en mode read-only donc on peut limiter es risques quand on n'est pas trop sure de
      soi,
    - Elle travaile sur des devices donc il faut connaître le Fs du fichier et le device correspondant,
    - Elle fonctionne normalement en mode interactif "Commande/Réponse" mais on peut lui faire exécuter une
      seule requète : -R '<commande'
    - La commande pour lister les infos d'une inode, y compris la liste des blocs de données est
            'stat  <fichier>'
    - <fichier> peut être une référence relative (pas besoin de faire un cd avant de l'exécuter) mais une
      référence relative à la racine du FileSysteme courant et non pas la racine du système.


    Exemple :


    /sbin/debugfs -R 'stat doc/C/ProgrammationC.pdf' /dev/sdb8'


    Le résultat :


    Inode: 30128   Type: regular    Mode:  0644   Flags: 0x0   Generation: 59517
    User:   501   Group:   501   Size: 255242
    File ACL: 0    Directory ACL: 0
    Links: 1   Blockcount: 502
    Fragment:  Address: 0    Number: 0    Size: 0
    ctime: 0x44bbaafe -- Mon Jul 17 17:21:34 2006
    atime: 0x44bbaa9a -- Mon Jul 17 17:19:54 2006
    mtime: 0x44bba5a8 -- Mon Jul 17 16:58:48 2006
    BLOCKS:
    (0-11):127353-127364, (IND):127365, (12-249):127366-127603
    TOTAL: 251

    

Les blocs accedès directs :

       (0-11):127353-127364

    
Première Indirection :

    - Index        (IND):127365,

    
       - Data        (12-249):127366-127603


Pour un fichier plus gros on verra des Double, puis Triple Indeirection

2 - Lister le contenu de certains blocs du disque, i possible en hexa

    Solution possible :
    -----------------


    Pour lire les blocs du disque : utiliser la commande 'dd' avec les options :


    - skip=<num_1er_bloc - 1>'


        Pour se positionner sur le premier bloc à lister,

    
    - count=<nb_blocs>'


        pour le nombre de blocs à lister

    
    - ibs=<taille_bloc>


        Pour que dd utilise une unité correcte pour le FS,
    Par défaut il utilise une taille de 512,
    En ext2/3 c'est 1024 par défaut
    Sinon 'commande stats ou show_super_stats de debugfs'


    Pour afficher en hexa : c'est comme on veut, 'od -cx' par exemple


    Exemple :


    dd if=/dev/sdb10 skip=127366 count=251 ibs=1024 | od -cx