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