Re: Dump binaire depuis une inode

トップ ページ

このメッセージに返信
著者: Stéphane Morico
日付:  
To: LIGIER Philippe, guilde@imag.fr
題目: Re: Dump binaire depuis une inode
Merci pour ces très bonnes infos..

Malheureusement, l'inode à été effacée :

# ls -i tvgre.avi
278009 tvgre.avi

debugfs:  open /dev/sda7
debugfs:  stat <278009>
Inode: 278009   Type: regular    Mode:  0644   Flags: 0x0   Generation: 
1888142217
User:  1000   Group:  1000   Size: 0 <------------------- Taille 0 octet
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 0
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x453e5575 -- Tue Oct 24 20:03:33 2006
atime: 0x453f9d36 -- Wed Oct 25 19:21:58 2006
mtime: 0x453e5575 -- Tue Oct 24 20:03:33 2006
BLOCKS:       <------------------------------------------ Blocks perdus :(


IBMX30:/home/smorico# stat /media/sda7/tvgre.avi
   File: `/media/sda7/tvgre.avi'
   Size: 0               Blocks: 0          IO Block: 4096   fichier 
régulier vide    <---------------------- *
Device: 807h/2055d      Inode: 278009      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ smorico)   Gid: ( 1000/ smorico)
Access: 2006-10-25 19:21:58.000000000 +0200
Modify: 2006-10-24 20:03:33.000000000 +0200
Change: 2006-10-24 20:03:33.000000000 +0200


* Tout se passe comme si j'avais fait un ">fichier"

En effet, j'ai relancé vlc en mode enregistrement par dessus...
VLC n'a rien eu le temps d'enregistrer (j'ai annulé son lancement par
CTRL-C), par contre, il a recrée un fichier vide à la même adresse en
utilisant la même inode sur le disque.... Je crains que l'emplacement
des premiers blocks ne soit perdu à jamais :(

Une solution serait peut-être d'ouvir le disque en hexa à l'emplacement
de l'inode pour essayer de retrouver l'@ des blocks... je pense que cela
est possible si la structure de l'inode est constituée d'emplacements
fixes... J'ai par contre un peu de mal à me positionner à la bonne
adresse car les unités ne sont pas les même suivant les outils
utilisés... (inodes, block, segment:offset...)

Je vai me documenter sur la structure de l'inode et sur la façon d'y
accéder...

Merci en tout cas pour cette réponse et ce mémo qui est vraiment très
pratique !

Si tu as d'autres conseils de ce type pour ce cas précis je suis preneur :)

A bientôt

S. Morico

Le 10.11.2006 07:44, LIGIER Philippe a écrit :
> 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..
>>
>>
>>
>
>
>
>
> ------------------------------------------------------------------------
>
> 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

>
>


--
S. MORICO