Un tutoriel sur le système de fichiers FAT

Phobos Un tutoriel sur le système de fichiers FAT

introduction

Cette page est destinée à fournir une introduction au fichier d'origineSystème de fichiers Table d'allocation (FAT). Ce système de fichiers a été utilisé sur tousversions de MS-DOS et PC-DOS, et sur les premières versions de Windows; c'esttoujours utilisé sur les disquettes formatées par Windows et certains autres systèmes.Les versions modifiées sont également toujours supportées par Windows sur les disques durs, siChamps obligatoires.

Le système de fichiers FAT est fortement basé sur le carte du fichier modèle danstermes de son agencement sur disque; ce modèle était autour pendant de nombreuses années avantMicrosoft a hérité du système de fichiers FAT initial de l'originalécrivains de DOS (Seattle Computer Products). C'est un raisonnablement simple,système de fichiers raisonnablement robuste.

Il existe trois variantes de base du système de fichiers FAT, qui diffèrentprincipalement dans la construction de la table d'allocation de fichiers réelle. Soupleles disques et les petits disques durs utilisent généralement le 12 bits version,qui a été remplacé par le 16 bits version que les disques durs sont devenusplus gros. Cela a été remplacé par le 32 bits version commeles disques sont devenus plus gros encore. Nous allons nous concentrer sur la version 16 bits,la version 12 bits peut être délicate pour les débutants et le 32 bitsLa version est plus complexe que nécessaire pour ce tutoriel.

Aperçu

Tout disque est composé de surfaces (un pour chaque tête),des pistes et les secteurs. Cependant, pour plus de simplicité, nous pouvonsconsidérer un disque comme une zone de stockage simple composée d'un certain nombre desecteurs. De plus, ces secteurs sont considérés comme numérotésconsécutivement, le premier étant numéroté 0, le deuxième numéroté 1, etc.nous ne nous soucierons pas de l'emplacement physique d'un secteur sur ledisque réel. Parce que nous voulons souligner que l'emplacement d'un secteur estsans rapport avec la structure réelle du disque, et parce que les secteurs ont leurpropres numéros dans chaque piste, nous appellerons ces secteursblocs à partir de maintenant; comme indiqué précédemment, ils forment un linéaire,liste densément numérotée.

Tous les blocs ont la même taille, 512 octets, sur pratiquement tous les fichiers FATsystèmes Cependant, les grands disques peuvent avoir trop de blocs pour le confort, doncles blocs sont parfois regroupés par paires (ou quatre, ou huit,etc...); chaque groupe est appelé un unité d'allocation. leSystème de fichiers FAT fonctionne réellement dans les unités d'allocation, pas des blocs, mais pourla simplicité nous supposerons dans la description ci-dessous que chaque allocationunité contient exactement un bloc, ce qui signifie que nous pouvons utiliser les termesinterchangeable.

Une note sur les valeurs numériques

Les nombres hexadécimaux sont indiqués en utilisant la convention couramment utilisée dansC; c'est un leader 0x. Le nombre décimal17 serait donc écrit comme 0x11 dansnotation hexadécimale ici.

Les valeurs du système de fichiers FAT sont soit stockées dans octets (8 bitsvaleurs, 0-255 non signé) ou dans mots (paires d'octets, 16 bitsvaleurs 0-65535 non signées). Notez que le premier octet d'une paire est leoctet le moins significatif, et le second octet d'une paire est le plusoctet significatif. Par exemple, si l'octet à la position 3 a une valeur de0x15, et l'octet à la position 4 a une valeur de 0x74, ils font ensembleun mot avec la valeur 0x7415 (pas 0x1574).

Il y a des valeurs occasionnelles de 32 bits (doubles mots), et ceux-ci utilisentune approche similaire (dans ce cas 4 octets, avec l'octet le moins significatifstocké en premier).

Enfin, notez que les bits individuels dans un octet ou un mot sont numérotésà partir de l'extrémité la moins significative (extrémité droite), en commençant par le bit 0.

Le format du disque

Cette section décrit le structure sur disque d'un fichier FATsystème; c'est-à-dire, comment les différentes zones du disque sont disposées, etce qui est stocké en eux.

Mise en page de base

Tous les disques utilisant le système de fichiers FAT sont divisés en plusieurs zones. leLe tableau suivant résume les zones dans l'ordre dans lequel elles apparaissent.le disque, en commençant au bloc 0:

Le bloc de démarrage

Le bloc d'amorçage n'occupe que le premier bloc du disque. Il tient unprogramme spécial (le programme bootstrap) qui est utilisé pourchargement du système d'exploitation en mémoire. Il semblerait donc êtreassez peu pertinent pour cette discussion.

Cependant, dans le système de fichiers FAT, il contient également plusieurs données importanteszones qui aident à décrire le reste du système de fichiers. Ainsi, pourcomprendre comment un disque particulier est mis en place, il est nécessaire d'abordcomprendre au moins une partie du contenu du bloc de démarrage. Le pertinentles zones sont indiquées dans le tableau suivant, avec leurs décalages d'octetsdepuis le début du bloc de démarrage. Nous verrons plus tard lesquels de cesen fait important pour nous.

Décalage du début Longueur La description
0x00 3 octets Partie du programme bootstrap.
0x03 8 octets Description facultative du fabricant.
0x0b 2 octets Nombre d'octets par bloc (presque toujours 512).
0x0d 1 octet Nombre de blocs par unité d'allocation.
0x0e 2 octets Nombre de blocs réservés C'est le nombre de blocs sur le disquequi ne font pas partie du système de fichiers; dans la plupart des cas, c'estexactement 1, étant l'allocation pour le bloc de démarrage.
0x10 1 octet Nombre d'allocations de fichiersLes tables.
0x11 2 octets Nombre d'entrées du répertoire racine(y compris ceux qui ne sont pas utilisés).
0x13 2 octets Nombre total de blocs dans le disque entier. Si la taille du disque estplus grand que 65535 blocs (et ne rentrera donc pas dans ces deux octets),cette valeur est définie sur zéro et la taille réelle est stockée àdécalage 0x20.
0x15 1 octet Descripteur de média. Ceest rarement utilisé, mais existe toujours..
0x16 2 octets Le nombre de blocs occupés par une copie duTable d'allocation des fichiers.
0x18 2 octets Le nombre de blocs par piste. Cette information est présenteprincipalement pour l'utilisation du programme bootstrap, et ne doivent pas nous concernerplus loin ici.
0x1a 2 octets Le nombre de têtes (surfaces de disque). Cette information est présenteprincipalement pour l'utilisation du programme bootstrap, et ne doivent pas nous concernerplus loin ici.
0x1c 4 octets Le nombre de blocs cachés. L'utilisation de ceci est largementhistorique, et il est presque toujours mis à 0; donc ça peut êtreignoré.
0x20 4 octets Nombre total de blocs dans le disque entier (voir aussidécalage 0x13).
0x24 2 octets Numéro de lecteur physique. Cette information est présente principalement pour leutilisation du programme bootstrap, et ne nous intéresse pas davantage ici.
0x26 1 octet Extended Boot Record Signature Cette information est présenteprincipalement pour l'utilisation du programme bootstrap, et ne doivent pas nous concernerplus loin ici.
0x27 4 octets Numéro de série du volume. Numéro unique utilisé pour l'identification d'undisque particulier.
0x2b 11 octets Étiquette de volume. Ceci est une chaîne de caractères pour lisible par l'hommeidentification du disque (rempli d'espaces si plus court); c'estsélectionné lorsque le disque est formaté.
0x36 8 octets Identifiant du système de fichiers (rembourré à la fin avec des espaces siplus court).
0x3e 0x1c0 octets Le reste du programme bootstrap.
0x1fe 2 octets Bloc de démarrage 'signature' (0x55 suivi de 0xaa).

Le descripteur de média

Historiquement, la taille et le type de disque étaient difficiles pour le fonctionnementsystème pour déterminer par interrogation de matériel seul. Un 'byte magique' étaitdonc utilisé pour classer les disques. Ce sont toujours présents, mais rarement utilisés,et son contenu est connu sous le nom de descripteur de média. Généralement, pour durdisques, ceci est mis à 0xf0.

La table d'allocation de fichiers (FAT)

Le FAT occupe un ou plusieurs blocs immédiatement après le démarragebloc. En général, une partie de son dernier bloc restera inutilisée, car elle estpeu probable que le nombre requis d’inscriptions remplisse exactement unnombre complet de blocs. S'il y a une seconde FAT, ceci immédiatementsuit le premier (mais commence dans un nouveau bloc). Ceci est répété pourd'autres FAT.

Notez que plusieurs FAT sont utilisés en particulier sur les disquettes, carde la plus grande probabilité d'erreurs lors de la lecture du disque. Si le FAT estillisible, les fichiers ne sont pas accessibles et une autre copie de la FAT doit êtreutilisé. Sur les disques durs, il n'y a souvent qu'un seul FAT.

Dans le cas du système de fichiers FAT 16 bits, chaque entrée dans le FAT a une longueur de deux octets(c'est-à-dire 16 bits). La zone de données du disque est divisée en grappes, qui sont la même chosecomme unités d'allocation, mais numérotées différemment (au lieu d'être numérotées depuis le débutdu disque, ils sont numérotés depuis le début de la zone de données du disque). Donc, le numéro de clusterest le numéro de l'unité d'allocation, moins une valeur constante qui est la taille des zones entrele début du disque et le début de la zone de données.

Eh bien, presque. Les grappes sont numérotées à partir de 2, pas 0! Alors lecalcul ci-dessus doit avoir 2 ajouté pour obtenir le nombre de cluster deune unité d'attribution donnée ... et un numéro de cluster est converti ennuméro d'unité d'allocation en soustrayant 2 ...!

Alors, comment fonctionne la FAT? Simplement, il y a une entrée dans le FAT pourchaque cluster (bloc de zone de données) sur le disque. L'entrée N concerne le clusterN. Les groupes 0 et 1 n'existent pas (à cause du violon de 2 'ci-dessus),et ces entrées FAT sont spéciales. Le premier octet de la première entrée estune copie de l'octet descripteur de média, etle deuxième octet est défini sur 0xff. Les deux octets de la deuxième entrée sont définis sur0xff.

Que contient une entrée FAT normale pour un cluster? Il contient lenuméro de cluster successeur - c'est-à-dire, le numéro du clusterqui suit celui-ci dans le fichier auquel appartient le cluster actuel.Le dernier cluster d'un fichier a la valeur 0xffff dans son entrée FATindique qu'il n'y a plus de grappes.

Le répertoire racine

Le répertoire racine contient une entrée pour chaque fichier dont le nom apparaît àla racine (le niveau supérieur) du système de fichiers. Autres répertoirespeut apparaître dans le répertoire racine; elles sont appeléessous-répertoires. La principale différence entre les deux est quel'espace pour le répertoire racine est alloué statiquement, lorsque le disque estformaté; il y a donc une limite supérieure finie sur le nombre de fichierscela peut apparaître dans le répertoire racine.

Les sous-répertoires ne sont que des fichiers contenant des données spéciales, ils peuvent donc êtreaussi grand ou petit que désiré.

Le format de tous les répertoires est le même. Chaque entrée est de 32 octets (0x20)en taille, de sorte qu'un seul bloc peut contenir 16 d'entre eux. Le tableau suivantaffiche un résumé d'une entrée de répertoire unique; notez que le décalage estsimplement depuis le début de cette entrée particulière, pas depuis le début dele bloc.

Le nom de fichier

Les huit octets de l'offset 0x00 à 0x07 représentent le nom du fichier. leLe premier octet du nom de fichier indique son statut. Habituellement, il contient uncaractère de nom de fichier normal (par ex.'A'), mais il y a des valeurs spéciales:

0x00
Nom de fichier jamais utilisé.
0xe5
Le nom de fichier a été utilisé, mais le fichier a été supprimé.
0x05
Le premier caractère du nom de fichier est en fait 0xe5.
0x2e
L'entrée est pour un répertoire, pas un fichier normal. Si le second octetest également 0x2e, le champ cluster contient le numéro de cluster de cetterépertoire parent du répertoire. Si le répertoire parent est la racinerépertoire (qui est alloué de manière statique et n’a pas de cluster)numéro), le numéro de cluster 0x0000 est spécifié ici.
Tout autrepersonnage
C'est le premier caractère d'un nom de fichier réel.

Si un nom de fichier a moins de huit caractères, il est rempliavec des caractères d'espace.

L'extension de nom de fichier

Les trois octets de l'offset 0x08 à 0x0a indiquent le nom du fichierextension. Il n'y a pas de caractères spéciaux. Notez que le point utilisé pourséparer le nom de fichier et l'extension du nom de fichier est implicite, et n'est paseffectivement stocké n'importe où; il est juste utilisé lors de la référence au fichier.Si l'extension du nom de fichier comporte moins de trois caractères,est rempli de caractères d'espacement.

Les attributs de fichier

Le seul octet à offset 0x0b contient des indicateurs qui fournissent des informationsà propos du fichier et de ses autorisations, etc. Les indicateurs sont des bits uniques, etavoir des significations comme suit. Chaque bit est donné comme valeur numérique, etceux-ci sont combinés pour donner la valeur d'attribut réelle:

0x01
Indique que le fichier est en lecture seule.
0x02
Indique un fichier caché. De tels fichiers peuvent être affichéssi c'est vraiment nécessaire.
0x04
Indique un fichier système. Ceux-ci sont cachés aussi bien.
0x08
Indique une entrée spéciale contenant l'étiquette de volume du disque,au lieu de décrire un fichier. Ce type d'entrée n'apparaît que dansrépertoire racine.
0x10
L'entrée décrit un sous-répertoire.
0x20
Ceci est le drapeau d'archive. Cela peut être défini et effacé par leprogrammeur ou utilisateur, mais est toujours défini lorsque le fichier est modifié. C'estutilisé par les programmes de sauvegarde.
0x40
Non utilisé; doit être réglé sur 0.
0x80
Non utilisé; doit être réglé sur 0.

L'heure du fichier

Les deux octets aux décalages 0x16 et 0x17 sont traités comme une valeur de 16 bits;rappelez-vous que l'octet le moins significatif est à l'offset 0x16. Ils contiennentl'heure à laquelle le fichier a été créé ou mis à jour pour la dernière fois. L'heure est cartographiéedans les bits comme suit; la première ligne indique le décalage de l'octet, lela deuxième ligne indique (en décimal) les nombres de bits individuels dans le bit 16valeur, et la troisième ligne indique ce qui est stocké dans chaque bit.

<------- 0x17 --------> <------- 0x16 -------->15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00h h h h m m m m m m x x x x x

où:

hhhhh
indique le nombre d'heures binaire (0-23)
mmmmmm
indique le nombre binaire de minutes (0-59)
xxxxx
indique le nombre binaire de périodes de deux secondes (0-29),représentant les secondes 0 à 58.

La date du fichier

Les deux octets aux décalages 0x18 et 0x19 sont traités comme une valeur de 16 bits;rappelez-vous que l'octet le moins significatif est au décalage 0x18. Ils contiennentla date de création ou de mise à jour du fichier. La date est mappéedans les bits comme suit; la première ligne indique le décalage de l'octet, lela deuxième ligne indique (en décimal) les nombres de bits individuels dans le bit 16valeur, et la troisième ligne indique ce qui est stocké dans chaque bit.

<------- 0x19 --------> <------- 0x18 -------->15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00y y y y y m m m m j d d d d

où:

yyyyyyy
indique le décalage de l'année binaire de 1980 (0-119), représentantannées 1980 à 2099
mmmm
indique le numéro du mois binaire (1-12)
ddddd
indique le numéro du jour binaire (1-31)

Le numéro de cluster de départ

Les deux octets aux décalages 0x1a et 0x1b sont traités comme une valeur de 16 bits;rappelez-vous que l'octet le moins significatif est à l'offset 0x1a. La premièrele cluster pour l'espace de données sur le disque est toujours numéroté comme 0x0002. Cearrangement étrange est parce que les deux premières entrées dans le FAT sontréservé à d'autres fins.

La taille du fichier

Les quatre octets aux décalages 0x1c à 0x1f sont traités comme une valeur de 32 bits;rappelez-vous que l'octet le moins significatif est à l'offset 0x1c. Ils tiennentla taille réelle du fichier, en octets.

Exemples travaillés

La meilleure façon de comprendre comment utiliser l'information ci-dessus est de travaillerBien que quelques exemples simples.

Interpréter le contenu d'un bloc

Nous supposons qu'il existe un outil disponible pour afficher le contenu d'unbloquer en caractères hexadécimaux et en caractères ASCII. La plupart de ces outilsafficher des caractères ASCII inhabituels (par exemple retour chariot) sous la forme d'un point. PourPar exemple, voici un bloc de démarrage typique:

Bloc de démarrage - exemple

A titre d'illustration, un champ dans le bloc de démarrage a été mis en évidence dansrouge (la surbrillance apparaît deux fois, une fois pour l'hexadécimalreprésentation et une fois pour la représentation ASCII). Les chiffres vers le basle côté gauche sont les décalages (du début du bloc) dupremier octet sur cette ligne, et la première rangée de chiffres le long du haut sontle décalage de chaque octet dans la rangée. Nous pouvons donc facilement voir que leLa zone en surbrillance commence à l'offset 0x36.

La zone en question est (regardez la disposition du bloc de démarrage) le fichiertype de système, dans ce cas FAT16. Pour nous sauver en regardant chaque octet dans untable de caractères ASCII, on peut simplement consulter l'équivalentreprésentation sur le côté droit. 0x46 représente F, 0x41représente A, et ainsi de suite.

Exemple 1 - trouver le répertoire racine

Pour trouver le répertoire racine, nous devons examiner les données du système de fichiersle bloc de démarrage. Alors, regardons à nouveau le bloc de démarrage de notre exempledisque:

Boot block - trouver le répertoire racine

Nous savons que le répertoire racine apparaît immédiatement après la dernière copiede la FAT. Donc, ce que nous devons savoir, c'est la taille de la FAT, et commentde nombreuses copies existent. Nous devons également connaître la taille de toute autre chosequi apparaît avant les FAT (s); il y a juste le seul bloc de labloc d'amorçage. Donc, le nombre de blocs qui apparaissent avant la racinele répertoire est donné par:

 (taille de FAT) * (nombre de FAT) + 1

Tout ce que nous devons faire, alors, est de découvrir ces valeurs. D'abord, nous savons quele nombre de FAT est stocké au décalage 0x10 (surligné en vertau dessus); Cela nous indique qu'il n'y a qu'un seul FAT. Ensuite, nous devons savoirla taille d'une FAT; c'est aux décalages 0x16 et 0x17, où l'on trouve 0x14et 0x00 respectivement (surlignés en rouge ci-dessus). Rappelez-vous que cesdeux octets ensemble forment une valeur de 16 bits, avec le moins significatifoctet stocké en premier; en d'autres termes, la valeur est 0x0014 (en décimal, 20).Ainsi, le nombre total de blocs qui précèdent le répertoire racine est donnépar:

 0x0014 * 1 + 1 => 0x0015 (décimal 21)

Nous devrions donc trouver le répertoire racine dans le bloc 0x15, alors regardonsil...

Répertoire racine

Il semble que quelque chose occupe les premiers octets 0x20, et c’est ...entrée de répertoire! Nous n'entrerons pas dans les détails ici, mais un examen détailléde ces octets montrerait que c'est l'entrée spéciale pour le disqueétiquette. Il ne semble pas y avoir plus d'entrées dans ce répertoire.

Exemple 2 - trouver les attributs d'un fichier

Dans cet exemple, le fichier FOOBAR.TXT a été créé sur le même disque,et il apparaît dans le répertoire racine. Nous souhaitons savoirLes indicateurs d'attribut sont définis sur le fichier.

Tout d'abord, nous devons trouver le répertoire racine; nous l'avons déjà fait enexemple 1. Jetons un coup d'oeil après que FOOBAR.TXT a été créé:

Répertoire racine

Nous pouvons voir assez facilement que la deuxième entrée du répertoire (celle deoffset 0x20) est celui de FOOBAR.TXT. Rappelez-vous que le point entre lenom de fichier et l’extension du nom de fichier n’est pas réellement stockée, mais estimplicite. Nous voyons le nom de fichier (surligné en rouge) et le nom de fichierextension (surlignée en bleu). Nous savons que l'octet d'attribut apparaîtà offset 0x0b, et il est surligné en vert ici.

La valeur de l'attribut octet est 0x21. Nous pouvons exprimer cela en binairecomme:

 0 0 1 0 0 0 0 1

Prendre chacun des bits séparément et sortir un nombre hexadécimald'entre eux, nous obtenons:

 0 0 1 0 0 0 0 0 => 0x20 0 0 0 0 0 0 0 1 => 0x01

Notre tableau des valeurs d'attribut montre que0x20 signifie que le "flag archive" est défini et que 0x01 indique que lele fichier est en lecture seule.

Exemple 3 - Trouver la date d'un fichier

Ici, nous voulons la date attachée à un fichier particulier (une seule date estconservé, qui est la date de création ou de dernière modification). Le fichier dansLa question est encore FOOBAR.TXT.

Regardons encore une fois le répertoire racine; nous l'avons déjà fait enexemple 2, et nous savons déjà que FOOBAR.TXT a un répertoireentrée au décalage 0x20:

Répertoire racine

Cette fois, nous sommes intéressés par la date du fichier, et nous savons de notremise en page du répertoire racine que c'est àdécalage 0x18 dans chaque entrée de répertoire. Ainsi, la date de FOOBAR.TXTest au décalage 0x20 + 0x18, ou 0x38 (surligné en rouge ci-dessus). Encore une fois,c'est une valeur de 16 bits avec l'octet le moins significatif stocké en premier. leles octets sont respectivement 0x65 et 0x39, inversant ceux-ci et mettantleur ensemble donne une valeur de 0x3965.

Maintenant tout ce que nous avons à faire est d'analyser les composants de cette valeur. Un facileLe premier moyen est de le convertir en binaire, et cela est encore plus facile si nous prenonsun chiffre hexadécimal à la fois:

 3 9 6 5 | | | | V V V V 0 0 1 1 1 0 0 1 0 1 1 0 0 1 0 1

Poussons tous les chiffres ensemble:

 0 0 1 1 1 0 0 1 0 1 1 0 0 1 0 1

Maintenant, nous pouvons les diviser à nouveau sur les limites correspondant à lacomposants individuels de la date, tels que définis dans leformat de date de fichier. Ensuite, nous convertissons chaque partieretour à la décimale:

 0 0 1 1 1 0 0 1 0 1 1 0 0 1 0 1 | | | V V V 28 11 5 (année mois jour)

Rappelez-vous que l'année est basée à 1980, donc si nous ajoutons 1980 à 28, nous obtenons2008. La date entière est donc le 5 novembre 2008.

Exemple 4 - Trouver les blocs de données pour un fichier

Ici, nous souhaitons connaître le nombre de blocs contenant des données pourun fichier particulier qui a maintenant été ajouté au disque. Le nom dule fichier est NETWORK.VRS.

Encore une fois, nous trouvons le répertoire racine. Voici ses derniers contenus,après NETWORK.VRS a été créé:

Répertoire racine

Notez que la troisième entrée du répertoire (commençant à l'offset 0x40) est cellepour NETWORK.VRS. Nous savons que le numéro de cluster de départ pour le fichierles données occupent octets à des décalages 0x1a et 0x1b dans un répertoire particulierentrée; ainsi les octets que nous voulons sont aux décalages 0x5a et 0x5b (nous avons justeajouté 0x40, le décalage du début de l'entrée). Celles-ci (surlignées dansrouge) contiennent respectivement 0x4e et 0x0f, et, rappelant que le premieroctet est le moins significatif, le nombre que nous voulons est 0x0f4e.Incidemment, les quatre octets suivants (surlignés en bleu) sont le fichiertaille, encore une fois avec l'octet le moins significatif en premier. Ce sont 0x92, 0x06,0x00, 0x00 respectivement, en faisant une valeur de 0x00000692. Ceci (en décimal)est 1682. Donc, ce fichier est 1682 octets de long.

Passons en revue ce que nous savons jusqu'à présent ...

  • Le cluster de démarrage du fichier est le cluster 0x0f4e.
  • Le répertoire racine commence au bloc 0x15.
  • La première unité d'allocation commence au premier bloc après la racineannuaire.

Qu'est-ce que nous devrions savoir de plus? Nous savons où commence le répertoire racine,mais pas là où ça finit. Nous avons donc besoin de la taille du répertoire racine, dansdes blocs. Regardons encore une fois le bloc de démarrage:

Boot block - trouver le répertoire racine

Ce que nous devons trouver cette fois est le nombre maximum d'entrées dans la racineannuaire; Ceci est corrigé lorsque le disque est formaté. Nous savons de lamise en page du bloc de démarrage qui apparaît dans les deuxoctets commençant au décalage 0x11 dans le bloc de démarrage (ceux-ci sont mis en évidenceen rouge ci-dessus). Ces octets contiennent respectivement 0x40 et 0x00, donc(arrangeant comme d'habitude) cela nous donne une valeur de 0x0040 (64 en décimal). Alorsil y a 64 entrées de répertoire racine. Nous savons qu'une entrée de répertoireoccupe 32 octets, donc l'espace total occupé par le répertoire racine est64 * 32 octets ou 2048 octets. Chaque bloc est de 512 octets, donc le nombre deles blocs occupés par le répertoire racine sont 2048 divisés par 512 ...4.

Ainsi, le répertoire racine commence au bloc 0x15. Ainsi la première allocationl'unité commence à 0x15 + 4 ou 0x19. Donc, pour convertir un numéro d'unité d'allocationà un numéro de bloc, nous devons ajouter la valeur constante 0x19.Et pour convertir un numéro de cluster (ce qui apparaît dans la racinerépertoire) à un numéro de bloc, nous devons ajouter 0x17, pour permettre celaétrange décalage de 2.

Nous savons maintenant que le premier bloc de données du fichier est au clusterle numéro 0xf4e (voir ci-dessus). En ajoutant la constante que nous avons découverte, noustrouve que c'est le numéro de bloc 0xf4e + 0x17, ou 0xf65. Regardons le bloc0xf65:

Bloc de données 1

Eh bien, cela ressemble certainement au début d'un poème! Chaque ligne dule texte est séparé par un caractère spécial appelé nouvelle ligne, lequela le code 0x0a (décimal 10). Les premiers d'entre eux sont mis en évidenceen rouge.

Nous avons presque fini. Il y a évidemment plus de ce fichier, et pour nouspour trouver le reste, nous devons consulter le FAT. Rappelons que ledépart grappe numéro du fichier (le bloc que nous venons de regarderat) est 0xf4e. Chaque entrée de la FAT a une taille de deux octets, nous allons donc trouverl'entrée pour ce cluster à l'offset 0xf4e * 2 dans le FAT, qui est décalé0x1e9c (il est plus facile d'ajouter la valeur deux fois que de tenter la multiplication).Nous savons qu'un bloc de disque (et donc un bloc de la FAT) est 0x200octets en taille, donc nous avons juste besoin de diviser 0x1e9c par 0x200. Cela sonnedur, mais ce n'est pas le cas. Vous pouvez trouver des outils pour cela, ou le faire vous-même.Regardons ces deux nombres en binaire:

 0x0200 => 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0x1e9c => 0 0 0 1 1 1 1 0 1 0 0 1 1 1 0 0

Le premier nombre est une puissance de deux, donc pour diviser par elle, il suffit de changerle deuxième chiffre à droite - en l'occurrence par neuf places:

 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 => 0x0f

Donc, l'entrée que nous voulons est dans le bloc 0x0f de la FAT. Le reste de notrela division est bien sûr tout ce que nous avons perdu quand nous nous sommes déplacés:

 0 1 0 0 1 1 1 0 0 => 0x9c

c'est donc le décalage d'octet de l'entrée dans le bloc FAT.

Nous devons trouver le bloc FAT 0x0f. Nous savons que la FAT commence dans le bloc 1 dudisque (voir plus haut), donc le bloc 0x0f de la FAT sera dans le bloc de disque0x0f + 1 ou bloc 0x10. Regardons ce bloc:

Bloc FAT

Nous devons examiner l'entrée FAT (deux octets) au décalage 0x9c; c'estsurligné en rouge ci-dessus, et se résout à la valeur 16 bits 0x0f4f. Ceest en fait le groupe suivant, numériquement, de celui que nous avonsjuste regardé (ce ne sera pas toujours le cas), donc nous pouvons appliquer un peude bon sens et en déduire que le deuxième bloc de données du fichier apparaîtimmédiatement après le premier; ainsi, les deux premiers blocs sont à 0xf65 et0xf66. Voici le bloc 0xf66:

Bloc de données 2

ce qui ressemble certainement à la suite du poème. Si nous regardonsl'entrée FAT pour ce nouveau cluster (qui, puisqu'il s'agit du bloc suivant,sera également la prochaine grappe et donc dans la prochaine entrée FAT), il estsurligné en bleu ci-dessus et contient la valeur 0x0f50. C'est leBloc et cluster très prochain:

Bloc de données 3

Nous continuons ceci (encore une fois, c'est le prochain bloc et cluster) et nous trouvons0x0f51 comme numéro de cluster (surligné en vert ci-dessus). Voici ce bloc:

Bloc de données 4

Enfin, nous examinons l’entrée FAT pour ce bloc / cluster (surligné dansnoir). Cette fois, l'entrée est 0xffff, ce qui indique qu'il n'y a pasplus de blocs dans le fichier. Nous avons terminé!

Conclusion

Si vous avez réussi à aller aussi loin (et à comprendre tout), vous avez unbonne compréhension du système de fichiers FAT 16 bits. Tu devrais êtrecapable d'analyser un disque, et voir s'il est corrompu. Vous pouvez même être capablepour le réparer!



Un tutoriel sur le système de fichiers FAT

À l’heure actuelle, le marché des ordinateurs offre une grande variété d’opportunités de stockage d’informations sous forme numérique. Les dispositifs de stockage existants incluent des disques durs internes et externes, des cartes mémoire de caméras photo / vidéo, des clés USB, des systèmes RAID complexes ainsi que d'autres. Des données sont conservées sous la forme de fichiers, tels que des documents, des images, des bases de données, des messages électroniques, etc., qui doivent être organisés efficacement sur le disque et facilement récupérés en cas de besoin.

L'article suivant fournit un aperçu général du système de fichiers, le principal moyen de gestion des données sur tout stockage, et décrit les particularités des différents types de systèmes de fichiers.


Qu'est-ce qu'un système de fichiers?

Tout fichier informatique est stocké sur un support de stockage avec une capacité donnée. En réalité, chaque stockage est un espace linéaire pour lire ou lire et écrire des informations numériques. Chaque octet d’information sur lui a son décalage par rapport au démarrage du stockage, appelé adresse et est référencé par cette adresse. Un stockage peut être présenté sous forme de grille avec un ensemble de cellules numérotées (chaque cellule est un seul octet). Tout fichier enregistré dans le stockage reçoit ses propres cellules.

En général, les stockages informatiques utilisent la paire de secteur et compensation dans le secteur pour référencer tout octet d'information sur le stockage. Un secteur est un groupe d'octets (généralement 512 octets), une unité adressable minimale du stockage physique. Par exemple, octet 1040 sur un disque dur sera référencé en tant que secteur #3 et offset dans le secteur 16 octets ([secteur] + [secteur] + [16 octets]). Ce schéma est appliqué pour optimiser l'adressage du stockage et utiliser un nombre plus petit pour faire référence à toute partie des informations situées sur le stockage.

Pour omettre la deuxième partie de l'adresse (décalage dans le secteur), les fichiers sont généralement stockés à partir du début du secteur et occuper des secteurs entiers (Par exemple, un fichier de 10 octets occupe la totalité du secteur, un fichier de 512 octets occupe également tout le secteur, tandis qu'un fichier de 514 octets occupe deux secteurs entiers).

Chaque fichier est stocké dans "secteurs non utilisés et peut être lu plus tard par sa position et sa taille connues. Cependant, comment savons-nous quels secteurs sont occupés et lesquels sont libres? Où sont la taille, la position et le nom du fichier stocké? C'est exactement ce dont le système de fichiers est responsable.

Dans son ensemble, un système de fichiers est une représentation structurée des données et un ensemble de métadonnées décrivant ces données. Il est appliqué au stockage pendant l'opération de formatage. Un système de fichiers sert à l’ensemble du stockage et fait également partie d’un segment de stockage isolé - une partition de disque. Habituellement, un système de fichiers fonctionne blocs, pas les secteurs. Les blocs de système de fichiers sont des groupes de secteurs qui optimisent l'adressage du stockage. Les systèmes de fichiers modernes utilisent généralement des tailles de bloc de 1 à 128 secteurs (512-65536 octets). Les fichiers sont généralement stockés au début d'un bloc et occupent des blocs entiers.

Constant opérations d'écriture / suppression dans le système de fichiers provoque sa fragmentation. Ainsi, les fichiers ne sont pas stockés dans des unités entières, mais sont divisés en fragments. Par exemple, un stockage est complètement occupé par des fichiers d'une taille d'environ 4 blocs chacun (par exemple, une collection de photos). Un utilisateur souhaite stocker un fichier qui prendra 8 blocs et supprime donc le premier et le dernier fichier. Ce faisant, il libère l'espace de 8 blocs. Cependant, le premier segment est situé près du début du stockage et le second, à la fin du stockage. Dans ce cas, le fichier à 8 blocs est divisé en deux parties (4 blocs pour chaque partie) et prend des "trous" d'espace libre. Les informations sur les deux fragments en tant que parties d'un fichier unique sont stockées dans le système de fichiers.

Outre les fichiers utilisateur, le système de fichiers contient également ses propres paramètres (comme une taille de bloc), descripteurs de fichiers (y compris la taille du fichier, l'emplacement du fichier, ses fragments, etc.), noms de fichiers et hiérarchie de répertoires. Il peut également stocker des informations de sécurité, attributs étendus et d'autres paramètres.

Afin de répondre aux exigences des différents utilisateurs, telles que les performances de stockage, la stabilité et la fiabilité, de nombreux systèmes de fichiers sont développés pour répondre à des besoins différents plus efficacement.

Systèmes de fichiers de Windows

Microsoft Windows utilise deux systèmes de fichiers principaux: NTFS, le format principal utilisé par défaut par les versions les plus récentes de ce système d'exploitation, et FAT, hérité de l'ancien DOS et doté de l'extension exFAT. En outre, le système de fichiers ReFS a été développé par Microsoft en tant que système de fichiers de nouvelle génération pour les serveurs à partir de Windows Server 2012.

GRAISSE:

GRAISSE (File Allocation Table) est l’un des types de système de fichiers les plus simples, qui existe depuis les années 1980. Il se compose du système de fichiers secteur descripteur (secteur de démarrage ou superbloc), la table d'allocation de bloc du système de fichiers (désigné sous le nom de tableau d'allocation de fichiers) et espace de rangement ordinaire pour stocker des fichiers et des dossiers. Les fichiers en FAT sont stockés dans des répertoires. Chaque répertoire est un tableau de Enregistrements 32 octets, chacun définissant un fichier ou des attributs étendus d'un fichier (par exemple, un nom de fichier long). Un enregistrement de fichier attribue le premier bloc d'un fichier. Tout bloc suivant peut être trouvé dans la table d'allocation de blocs en l'utilisant comme liste chaînée.

La table d'allocation de blocs contient un tableau de descripteurs de blocs. UNE zero valeur indique que le bloc n'est pas utilisé et non nul l'une concerne le bloc suivant d'un fichier ou une valeur spéciale pour la fin du fichier.

Les chiffres en FAT12, FAT16, FAT32 représente le nombre de bits utilisés pour énumérer un bloc de système de fichiers.Cela signifie que FAT12 peut utiliser jusqu'à 4096 références de bloc différentes, tandis que FAT16 et FAT32 peuvent utiliser jusqu'à 65536 et 4294967296 en conséquence. Le nombre maximum effectif de blocs est encore inférieur et dépend de la mise en œuvre de le pilote du système de fichiers.

FAT12 et FAT16 utilisé pour les vieilles disquettes et ne trouve pas de nombreux emplois de nos jours. FAT32 est encore largement utilisé pour les cartes mémoire et les clés USB. Le système est pris en charge par les smartphones, les appareils photo numériques et autres appareils portables.

FAT32 peut être utilisé sur des stockages externes compatibles Windows ou des partitions de disque avec le taille inférieure à 32 Go (Windows ne peut pas créer un système de fichiers FAT32 supérieur à 32 Go, bien que Linux prenne en charge la taille maximale de 2 To) et ne permette pas de créer des fichiers dont la taille dépasse 4 GO. Pour résoudre ce problème, exFAT a été introduit, qui ne présente aucune limite réaliste quant à la taille des fichiers ou des partitions.

NTFS:

NTFS (Nouveau système de fichiers technologiques) a été introduit en 1993 avec Windows NT et est actuellement le système de fichiers le plus commun pour les ordinateurs des utilisateurs finaux basés sur Windows. La plupart des systèmes d'exploitation de la ligne Windows Server utilisent également ce format.

Le système de fichiers est très fiable grâce à la journalisation et prend en charge de nombreuses fonctionnalités, notamment contrôle d'accès, cryptage, etc. Chaque fichier dans NTFS est stocké en tant que descripteur de fichier dans le fichier. Table de fichier principal et contenu du fichier. La table des fichiers maîtres contient des entrées contenant toutes les informations sur les fichiers: taille, allocation, nom, etc. Les 16 premières entrées de la table des fichiers maîtres sont conservées pour BitMap, qui conserve un enregistrement de tous les clusters libres et utilisés. enregistrements et le BadClus contenant des informations sur les clusters défectueux. Le premier et le dernier secteur du système de fichiers contiennent paramètres du système de fichiers (l'enregistrement de démarrage ou le superbloc). Ce système de fichiers utilise 48 et 64 bits valeurs pour référencer des fichiers, pouvant ainsi supporter des stockages de données avec une capacité extrêmement élevée.

ReFS:

ReFS (système de fichiers résilient) est le dernier développement de Microsoft introduit avec Windows 8 et maintenant disponible pour Windows 10. L'architecture du système de fichiers diffère absolument des autres systèmes de fichiers Windows et est principalement organisée sous la forme d'un arbre B +. ReFS a une grande tolérance aux pannes dues aux nouvelles fonctionnalités incluses dans le système. Et, à savoir, Copy-on-Write (CoW): aucune métadonnée n'est modifiée sans être copiée; les données ne sont pas écrites sur les données existantes, mais dans un nouvel espace disque. Avec toute modification de fichier, une nouvelle copie de métadonnées est stockée dans un espace de stockage libre, puis le système crée un lien entre les anciennes métadonnées et les nouvelles. Ainsi, le système stocke une quantité importante de sauvegardes plus anciennes dans différents endroits, ce qui facilite la récupération des fichiers, à moins que cet espace de stockage ne soit écrasé.

Pour plus d'informations sur la récupération de données à partir de ces systèmes de fichiers, consultez la page Chances pour la récupération.

Systèmes de fichiers de macOS

MacOS d'Apple applique deux systèmes de fichiers: HFS +, une extension de leur propre système de fichiers HFS utilisé sur les anciens ordinateurs Macintosh, et récemment publié APFS.

HFS + l'habitude d'être le système de fichiers primaire de Pomme produits de bureau, y compris les ordinateurs Mac, les iPod, ainsi que les produits Apple X Server avant qu’il ne soit remplacé par APFS dans macOS High Sierra. Les produits serveur avancés utilisent également le système de fichiers Apple Xsan, système de fichiers en cluster dérivé de StorNext et CentraVision.

le HFS + Le système de fichiers utilise des arbres B pour placer et localiser des fichiers. Les volumes sont divisés en secteurs, généralement d'une taille de 512 octets, qui sont ensuite regroupés en blocs d'allocation, dont le nombre dépend de la taille du volume entier. Les informations concernant les blocs d’attribution libres et utilisés sont conservées dans le fichier d’allocation. Tous les blocs d'allocation affectés à chaque fichier comme étant étendus sont enregistrés dans le fichier de dépassement de capacité étendu. Et enfin, tous les attributs de fichiers sont répertoriés dans le fichier Attributs. La fiabilité des données est améliorée grâce à la journalisation, ce qui permet de suivre toutes les modifications apportées au système et de le rétablir rapidement en état de fonctionnement en cas d’événements inattendus. Parmi les autres fonctionnalités prises en charge, citons les liens matériels vers les répertoires, le chiffrement du volume logique, le contrôle d'accès, la compression des données, etc.

le APFS système de fichiers est destiné à résoudre les problèmes fondamentaux présents dans son prédécesseur et a été développé pour travailler efficacement avec les stockages flash modernes et les disques SSD. Ce système de fichiers 64 bits utilise la méthode de copie en écriture pour améliorer les performances, ce qui permet de copier chaque bloc avant l’application des modifications et offre de nombreuses fonctionnalités d’intégrité des données et d’économie d’espace. Tous les contenus de fichiers et les métadonnées sur les fichiers, les dossiers et les autres structures APFS sont conservés dans le conteneur APFS. Le conteneur Superblock stocke des informations sur le nombre de blocs dans le conteneur, la taille du bloc, etc. Les informations sur tous les blocs alloués et libres du conteneur sont gérées à l'aide des structures bitmap. Chaque volume du conteneur possède son propre superbloc de volume qui fournit des informations sur ce volume. Tous les fichiers et dossiers du volume sont enregistrés dans l'arborescence des fichiers et des dossiers, tandis que l'arborescence des extensions est responsable des extensions - références au contenu du fichier (début du fichier, sa longueur en blocs).

Pour plus d'informations sur la récupération de données à partir de ces systèmes de fichiers, consultez la page Chances pour la récupération.

Systèmes de fichiers de Linux

Open-source Linux vise à implémenter, tester et utiliser différents types de systèmes de fichiers. Les systèmes de fichiers Linux les plus populaires sont les suivants:

  • Ext2, Ext3, Ext4- a "originaire de" Système de fichiers Linux.Ce système de fichiers est soumis à des développements et améliorations actifs. Le système de fichiers Ext3 n'est qu'une extension d'Ext2 qui utilise des opérations d'écriture de fichiers transactionnelles avec un journal. Ext4 est un développement supplémentaire d'Ext3, étendu avec le support des informations d'allocation de fichiers optimisées (extensions) et des attributs de fichier étendus. Ce système de fichiers est fréquemment utilisé comme "racine" système de fichiers pour la plupart des installations Linux.

  • ReiserFS - un système de fichiers Linux alternatif pour stocker un grand nombre de petits fichiers. Il a une bonne capacité de recherche de fichiers et permet l'allocation de fichiers compacts en stockant des queues de fichiers ou de petits fichiers avec des métadonnées afin de ne pas utiliser de blocs de système de fichiers volumineux dans le même but. Cependant, ce système de fichiers ne reçoit plus de support actif.

  • XFS - un système de fichiers dérivé de la société SGI et initialement utilisé pour les serveurs IRIX de la société. Désormais, les spécifications XFS sont implémentées sous Linux. Le système de fichiers XFS offre d'excellentes performances et est largement utilisé pour stocker des fichiers.

  • JFS - un système de fichiers développé par IBM pour les systèmes informatiques puissants de la société. JFS1 signifie généralement JFS, JFS2 est la deuxième version. Actuellement, ce système de fichiers est Open source et implémenté dans la plupart des versions modernes de Linux.

  • Btrfs - un système de fichiers conçu par Oracle et pris en charge par le noyau Linux depuis 2009. Le système de fichiers vise à améliorer la fiabilité et l’évolutivité, en offrant une tolérance aux pannes plus élevée, une administration simplifiée, etc. considéré comme complètement stable.

Le concept de "liens durs" utilisé dans ce type de système d'exploitation rend la plupart des systèmes de fichiers Linux similaires en ce sens que le nom de fichier n'est pas considéré comme un attribut de fichier et est plutôt défini comme un alias de fichier dans un répertoire donné. Un objet fichier peut être lié depuis de nombreux endroits, même multiplier à partir du même répertoire sous des noms différents. Cela peut entraîner des difficultés graves et même insurmontables pour la récupération des noms de fichiers après suppression de fichiers ou endommagement du système de fichiers.

Pour plus d'informations sur la récupération de données à partir de ces systèmes de fichiers, consultez la page Chances pour la récupération.

Systèmes de fichiers de BSD, Solaris, Unix

Le système de fichiers le plus courant pour ces systèmes d’exploitation est UFS (Unix File System), souvent appelé FFS (Fast File System).

Actuellement, UFS (dans différentes éditions) est pris en charge par tous les systèmes d'exploitation de la famille Unix et constitue un système de fichiers majeur du système d'exploitation BSD et du système d'exploitation Sun Solaris. Les technologies informatiques modernes ont tendance à implémenter des remplacements pour UFS dans différents systèmes d'exploitation (ZFS pour Solaris, JFS et systèmes de fichiers dérivés pour Unix, etc.).

Pour plus d'informations sur la récupération de données à partir de ces systèmes de fichiers, consultez la page Chances pour la récupération.

Systèmes de fichiers en cluster

Les systèmes de fichiers en cluster sont utilisés dans les systèmes de grappe informatique. Ces systèmes de fichiers prennent en charge le stockage distribué.

Les systèmes de fichiers distribués incluent:

  • ZFS-société Sun "Système de fichiers Zettabyte " - un système de fichiers développé pour les stockages distribués de Sun Solaris.

  • Apple Xsan- l'évolution de la société Apple des systèmes de fichiers CentraVision et StorNext.

  • VMFS- "Système de fichiers de machine virtuelle " développé par la société VMware pour son serveur VMware ESX.

  • GFS- Red Hat Linux "Système de fichiers global ".

  • JFS1- la conception originale (héritée) de IBM JFS système de fichiers utilisé dans les anciens systèmes de stockage AIX.

Les propriétés communes de ces systèmes de fichiers incluent la prise en charge des stockages distribués, l'extensibilité et la modularité.

Pour plus d'informations sur la récupération de données à partir de ces systèmes de fichiers, consultez la page Chances pour la récupération.

Dernière mise à jour: 20.06.2018

4.2
Note utilisateur: 23
5
11
4
2
3
1
2
3
1
0