2010-08-09 14 views
4

Je cherche un bon moyen facile de trouver quels secteurs occupent un fichier donné. Ma préférence de langue est C#. De ma classe de calcul de niveau A, on m'a appris qu'un disque dur avait une table de recherche sur les premiers kilo-octets du disque. Dans cette table il y a une liste liée pour chaque dossier détaillant quels secteurs ce dossier occupe. Donc j'espère qu'il y a une façon pratique de regarder dans ce tableau pour un certain fichier et de voir quels secteurs il occupe.Trouver quels secteurs du disque dur occupent un fichier

J'ai essayé Google, mais je ne trouve rien d'utile. Peut-être que je ne cherche pas la bonne chose mais je ne trouve rien du tout.

Toute aide est appréciée, merci.

Répondre

10

A propos des lecteurs

La géométrie physique des disques durs modernes n'est plus directement accessible par le système d'exploitation. Les premiers disques durs étaient assez simples qu'il était possible de les adresser en fonction de leur structure physique, le secteur de la tête de cylindre. Les disques modernes sont beaucoup plus complexes et utilisent des systèmes comme zone bit recording, dans lesquels toutes les pistes n'ont pas le même nombre de secteurs. Il n'est plus pratique de les traiter selon leur géométrie physique.

de la page man fdisk:

Si possible, FDisk obtenir automatiquement la géométrie du disque. Ce n'est pas nécessairement la géométrie physique du disque (en effet, les disques modernes ne sont pas vraiment quoi que ce soit comme une géométrie physique, certainement pas quelque chose qui peut être décrit dans la forme simpliste Cylindres/Têtes/Secteurs)

Pour contourner ce problème les disques modernes problématiques sont adressés en utilisant Logical Block Addressing, qui est ce que le système d'exploitation connaît. LBA est un schéma d'adressage où le disque entier est représenté sous la forme d'un ensemble linéaire de blocs, chaque bloc étant une quantité uniforme d'octets (généralement 512 ou plus).

A propos des fichiers

Afin de comprendre où un « fichier » est situé sur un disque (au niveau LBA), vous aurez besoin de comprendre ce qu'est un fichier. Cela dépend du système de fichiers que vous utilisez. Dans les systèmes de fichiers de type Unix, il existe une structure appelée inode qui décrit un fichier. L'inode stocke tous les attributs d'un fichier et pointe vers l'emplacement LBA des données réelles.

Ubuntu Exemple

Voici un exemple de trouver l'emplacement des données de LBA fichier.

d'abord obtenir votre numéro d'inode de fichier

$ ls -i 
659908 test.txt 

Exécutez le débogueur de système de fichiers. "yourPartition" sera quelque chose comme sda1, c'est la partition sur laquelle se trouve votre système de fichiers.

$sudo debugfs /dev/yourPartition 
debugfs: stat <659908> 

    Inode: 659908 Type: regular Mode: 0644 Flags: 0x80000 
    Generation: 3039230668 Version: 0x00000000:00000001 
    ... 
    ... 
    Size of extra inode fields: 28 
    EXTENTS: 
    (0): 266301 

Le nombre sous « EXTENTS », 266301, est le bloc logique dans le système de fichiers que votre fichier se trouve. Si votre fichier est volumineux, plusieurs blocs seront listés. Il y a probablement un moyen plus facile d'obtenir ce nombre, je ne pouvais pas en trouver un.

Pour valider que nous avons le bon bloc, utilisez dd pour lire ce bloc du disque. Pour connaître la taille de votre bloc de système de fichiers, utilisez dumpe2fs.

dumpe2fs -h /dev/yourPartition | grep "Block size" 

Ensuite, mettez votre taille de bloc dans le ibs = paramètre, et dans la mesure bloc logique dans la benne = paramètre, et exécuter dd comme ceci:

sudo dd if=/dev/yourPartition of=success.txt ibs=4096 count=1 skip=266301 

success.txt doit maintenant contenir l'original le contenu du fichier.

+0

Pourquoi la taille du bloc d'entrée (ibs) est-elle définie sur 4096? –

+0

@VisheshHanda - la valeur 4096 est utilisée b/c c'est la taille d'un bloc sur l'appareil. – slm

-2
sudo hdparm --fibmap file 

Pour ext, vfat et NTFS ..peut être plus. est également une bibliothèque C linux.