Correspondance entre adresses secteurs LBA et fichiers

Bonjour à tous,
je cherche un outil ou une application qui me permettrais d’établir à partir de l’adresse physique d’un secteur LBA le fichier correspondant.
Pour l’instant je peut faire l’opération inverse avec debugfs, c’est à dire à partir de l’inode d’un fichier, trouver le ou les blocs (et donc l’adresse LBA) utilisés.
Si une solution existe je serais ravis de la connaitre.
Merci d’avance.

Je vous communique ci-après la démarche pour identifier les adresses LBA composant un fichier à partir de l’inode associé.
Toutes le commandes sont réalisées avec l’utilisateur root.

[code]#ls -i /sbin/insmod
16322 /sbin/insmod
#debugfs
debugfs 1.42.5 (29-Jul-2012)
debugfs: open /dev/sda5 # ouvre le système de fichiers de type ext2 associé à la partition sda5
debugfs: stat <16322> # donne les informations de la table d’allocation des fichiers du système de fichier ouvert (ici sda5 en ext2) associés à l’inode 16322
Inode: 16322 Type: regular Mode: 0755 Flags: 0x0
Generation: 11361 Version: 0x00000000
User: 0 Group: 0 Size: 92912
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 192
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x29ab9264 – Wed Feb 26 13:13:08 1992
atime: 0x50870302 – Tue Oct 23 20:50:10 2012
mtime: 0x40fc0523 – Mon Jul 19 17:30:11 2004
BLOCKS:
(0-11):33886-33897, (IND):33898, (12-22):33899-33909 # voici les blocs d’adresse du fichier associé à l’inode 16322
TOTAL: 24

debugfs: stats
Filesystem volume name: DHS3ROOT
Last mounted on:
Filesystem UUID: 17c19c80-f430-11ca-9949-00809f659fe6
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: filetype sparse_super
Default mount options: (none)
Filesystem state: not clean with errors
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 128256
Block count: 256024
Reserved block count: 12801
Free blocks: 229119
Free inodes: 112421
First block: 0
Block size: 4096 # c’est cette ligne qui nous intéresse: elle précise qu’un block fait 4096 octets soit 8 secteurs de 512 octets
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 16032
Inode blocks per group: 501
Last mount time: Sun Nov 4 11:59:00 2012
debugfs: quit
#fdisk -lu /dev/sda
16 heads, 63 sectors/track, 77520 cylinders, total 78140160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sda1 * 63 9071 4504+ 63 GNU HURD or SysV
/dev/sda2 9072 14111 2520 62 Unknown
/dev/sda3 14112 78140159 39063024 5 Extended
/dev/sda5 14175 2062367 1024096+ 83 Linux # Adresse LBA du premier secteur de partition /dev/sda5
/dev/sda6 2062431 4110623 1024096+ 83 Linux
/dev/sda7 4110687 6158879 1024096+ 83 Linux
/dev/sda8 6158943 8207135 1024096+ 83 Linux
/dev/sda9 8207199 10255391 1024096+ 83 Linux
/dev/sda10 10255455 12303647 1024096+ 83 Linux
/dev/sda11 12303711 14401295 1048792+ 82 Linux swap / Solaris
/dev/sda12 14401359 28935647 7267144+ 83 Linux
/dev/sda13 28935711 30983903 1024096+ 83 Linux
/dev/sda14 30983967 33032159 1024096+ 83 Linux
/dev/sda15 33032223 43272431 5120104+ 83 Linux
/dev/sda16 43272495 76040495 16384000+ 63 GNU HURD or SysV
/dev/sda17 76040559 78140159 1049800+ 63 GNU HURD or SysV[/code]

l’option -i de la commande ls permet d’obtenir l’inode associé au fichier

  1. la commande stat <numéro_d’inode> de debugfs permet d’obtenir les blocs d’adresses associés a l’inode du fichier
  2. la commande stats de debugfs renseigne sur la taille d’un bloc (soit 8 secteurs de 512 octets) et donc la correspondance entre blocs et secteurs. Dans notre cas le premier bloc 33886 commence au secteur 33886×8=271088
  3. en définissant les différentes adresses de secteurs comme suit:
    adresse LBA absolue (LBAa) le numéro de secteur à partir du début du disque dur
    adresse LBA relatif (LBAr) le numéro de secteur à partir du début de la partition
    adresse LBA partition (LBAp) le numéro du premier secteur de la partition nous obtenons LBAa=LBAr+LBAp soit dans notre cas LBAa=271088+14175=285263