Qu'est-ce que la graisse ? Système de fichiers FAT. Inconvénients du système de fichiers HPFS

Matériel pour la conférence de révision n°33

pour les étudiants de spécialité

"Logiciel informatique"

Professeur agrégé du Département d'informatique, Ph.D. Livak E.N.

SYSTÈMES DE GESTION DE FICHIERS

Concepts de base, faits

But. Caractéristiques des systèmes de fichiersGRAISSEVFATGRAISSE 32,HPFSNTFS. Systèmes de fichiers OS UNIX (s5, ufs), OS Linux Ext2FS Zones système du disque (partition, volume). Principes de placement de fichiers et de stockage des informations sur l'emplacement des fichiers. Organisation de catalogues. Restreindre l'accès aux fichiers et répertoires.

Compétences

Utiliser la connaissance de la structure du système de fichiers pour protéger et restaurer les informations informatiques (fichiers et répertoires). Organisation du contrôle d'accès aux fichiers.

Systèmes de fichiers. Structure du système de fichiers

Les données sur disque sont stockées sous forme de fichiers. Un fichier est une partie nommée d'un disque.

Les systèmes de gestion de fichiers sont conçus pour gérer des fichiers.

La capacité de traiter les données stockées dans des fichiers au niveau logique est fournie par le système de fichiers. C'est le système de fichiers qui détermine la manière dont les données sont organisées sur n'importe quel support de stockage.

Ainsi, système de fichiers est un ensemble de spécifications et leurs logiciels correspondants qui sont responsables de la création, de la destruction, de l'organisation, de la lecture, de l'écriture, de la modification et du déplacement des informations sur les fichiers, ainsi que du contrôle de l'accès aux fichiers et de la gestion des ressources utilisées par les fichiers.

Le système de gestion de fichiers est le sous-système principal de la grande majorité des systèmes d'exploitation modernes.

Utiliser un système de gestion de fichiers

· tous les programmes de traitement du système sont connectés à l'aide de données ;

· les problèmes de distribution centralisée de l'espace disque et de gestion des données sont résolus ;

· l'utilisateur a la possibilité d'effectuer des opérations sur les fichiers (création, etc.), d'échanger des données entre des fichiers et divers appareils et de protéger les fichiers contre tout accès non autorisé.

Certains systèmes d'exploitation peuvent disposer de plusieurs systèmes de gestion de fichiers, ce qui leur permet de gérer plusieurs systèmes de fichiers.

Essayons de faire la distinction entre un système de fichiers et un système de gestion de fichiers.

Le terme « système de fichiers » définit les principes d'accès aux données organisées en fichiers.

Terme "système de gestion de fichiers" fait référence à une implémentation spécifique du système de fichiers, c'est-à-dire Il s'agit d'un ensemble de modules logiciels qui permettent de travailler avec des fichiers dans un système d'exploitation spécifique.

Ainsi, pour travailler avec des fichiers organisés selon un système de fichiers, un système de gestion de fichiers approprié doit être développé pour chaque système d'exploitation. Ce système UV ne fonctionnera que sur le système d'exploitation pour lequel il est conçu.

Pour la famille des OS Windows, les systèmes de fichiers principalement utilisés sont : VFAT, FAT 32, NTFS.

Regardons la structure de ces systèmes de fichiers.

Sur le système de fichiers GRAISSE L'espace disque de tout lecteur logique est divisé en deux zones :

zone système et

· zone de données.

Zone système créé et initialisé lors du formatage, puis mis à jour lorsque la structure du fichier est manipulée.

La zone système se compose des composants suivants :

· secteur de démarrage contenant l'enregistrement de démarrage (enregistrement de démarrage) ;

· secteurs réservés (ils peuvent ne pas exister) ;

· tables d'allocation de fichiers (FAT, table d'allocation de fichiers) ;

· répertoire racine (RACINE).

Ces composants sont situés sur le disque les uns après les autres.

Zone de données contient des fichiers et des répertoires subordonnés à celui racine.

La zone de données est divisée en clusters. Un cluster est un ou plusieurs secteurs adjacents d’une zone de données. D'autre part, un cluster est l'unité adressable minimale de mémoire disque allouée à un fichier. Ceux. un fichier ou un répertoire occupe un nombre entier de clusters. Pour créer et écrire un nouveau fichier sur le disque, le système d'exploitation lui alloue plusieurs clusters de disques libres. Ces clusters ne sont pas obligés de se succéder. Pour chaque fichier, une liste de tous les numéros de cluster attribués à ce fichier est stockée.

Diviser la zone de données en clusters au lieu d'utiliser des secteurs vous permet de :

· réduire la taille de la table FAT ;

· réduire la fragmentation des fichiers ;

· la longueur des chaînes de fichiers est réduite Þ accélère l'accès aux fichiers.

Cependant, une taille de cluster trop grande conduit à une utilisation inefficace de la zone de données, en particulier dans le cas d'un grand nombre de petits fichiers (après tout, en moyenne, la moitié d'un cluster est perdu pour chaque fichier).

Dans les systèmes de fichiers modernes (FAT 32, HPFS, NTFS), ce problème est résolu en limitant la taille du cluster (maximum 4 Ko)

La carte de la zone de données est T Table d'allocation des fichiers (File Allocation Table - FAT) Chaque élément de la table FAT (12, 16 ou 32 bits) correspond à un cluster de disques et caractérise son état : libre, occupé ou cluster défectueux.

· Si un cluster est alloué à un fichier (c'est-à-dire occupé), alors l'élément FAT correspondant contient le numéro du cluster suivant du fichier ;

· le dernier cluster du fichier est marqué d'un numéro compris dans la plage FF8h - FFFh (FFF8h - FFFFh) ;

· si le cluster est libre, il contient la valeur nulle 000h (0000h) ;

· un cluster inutilisable (en échec) est marqué du numéro FF7h (FFF7h).

Ainsi, dans la table FAT, les clusters appartenant à un même fichier sont liés en chaînes.

La table d'allocation de fichiers est stockée immédiatement après l'enregistrement de démarrage du disque logique ; son emplacement exact est décrit dans un champ spécial du secteur de démarrage.

Il est conservé en deux exemplaires identiques, qui se succèdent. Si la première copie du tableau est détruite, la seconde est utilisée.

Étant donné que la FAT est utilisée de manière très intensive lors de l'accès au disque, elle est généralement chargée dans la RAM (dans les tampons d'E/S ou dans le cache) et y reste le plus longtemps possible.

Le principal inconvénient de FAT est la lenteur du traitement des fichiers. Lors de la création d'un fichier, la règle est que le premier cluster libre est alloué. Cela conduit à une fragmentation du disque et à des chaînes de fichiers complexes. Cela entraîne un travail plus lent avec les fichiers.

Pour afficher et modifier la table FAT, vous pouvez utiliser utilitaireDisqueÉditeur.

Les informations détaillées sur le fichier lui-même sont stockées dans une autre structure appelée répertoire racine. Chaque lecteur logique possède son propre répertoire racine (ROOT).

Répertoire racine décrit les fichiers et autres répertoires. Un élément de répertoire est un descripteur de fichier.

Chaque descripteur de fichier et de répertoire l'inclut

· Nom

· extension

date de création ou de dernière modification

· heure de création ou de dernière modification

attributs (archive, attribut de répertoire, attribut de volume, système, masqué, lecture seule)

· longueur du fichier (pour un répertoire - 0)

· champ réservé qui n'est pas utilisé

· numéro du premier cluster de la chaîne de clusters alloués à un fichier ou un répertoire ; Ayant reçu ce numéro, le système d'exploitation, en se référant à la table FAT, découvre tous les autres numéros de cluster du fichier.

Ainsi, l'utilisateur lance le fichier pour exécution. Le système d'exploitation recherche un fichier portant le nom souhaité en consultant les descriptions des fichiers dans le répertoire actuel. Lorsque l'élément requis est trouvé dans le répertoire courant, le système d'exploitation lit le premier numéro de cluster de ce fichier, puis utilise la table FAT pour déterminer les numéros de cluster restants. Les données de ces clusters sont lues dans la RAM, combinées en une seule section continue. Le système d'exploitation transfère le contrôle au fichier et le programme commence à s'exécuter.

Pour afficher et modifier le répertoire racine ROOT, vous pouvez également utiliser utilitaireDisqueÉditeur.

Système de fichiers VFAT

Le système de fichiers VFAT (virtual FAT) est apparu pour la première fois dans Windows pour Workgroups 3.11 et a été conçu pour les E/S de fichiers en mode protégé.

Ce système de fichiers est utilisé sous Windows 95.

Il est également pris en charge sous Windows NT 4.

VFAT est le système de fichiers natif 32 bits de Windows 95. Il est contrôlé par le pilote VFAT .VXD.

VFAT utilise du code 32 bits pour toutes les opérations sur les fichiers et peut utiliser des pilotes en mode protégé 32 bits.

MAIS, les entrées de la table d'allocation de fichiers restent sur 12 ou 16 bits, le disque utilise donc la même structure de données (FAT). Ceux. F format de tableauVFAT c'est pareil, comme le format FAT.

VFAT avec les noms "8.3" prend en charge les noms de fichiers longs. (VFAT est souvent appelé FAT avec prise en charge des noms longs).

Le principal inconvénient de VFAT réside dans les pertes de clustering importantes avec de grandes tailles de disque logique et des restrictions sur la taille du disque logique lui-même.

Système de fichiers GRAISSE 32

Il s'agit d'une nouvelle implémentation de l'idée d'utiliser la table FAT.

FAT 32 est un système de fichiers 32 bits entièrement autonome.

Utilisé pour la première fois dans Windows OSR 2 (OEM Service Release 2).

Actuellement, FAT 32 est utilisé dans Windows 98 et Windows ME.

Il contient de nombreuses améliorations et ajouts par rapport aux implémentations FAT précédentes.

1. Utilise l'espace disque beaucoup plus efficacement car il utilise des clusters plus petits (4 Ko) - on estime que les économies peuvent atteindre 15 %.

2. Possède un enregistrement de démarrage étendu qui vous permet de créer des copies de structures de données critiques Þ augmente la résistance du disque aux dommages causés aux structures du disque

3. Peut utiliser la sauvegarde FAT au lieu de la sauvegarde standard.

4. Peut déplacer le répertoire racine, en d'autres termes, le répertoire racine peut se trouver à n'importe quel endroit Þ supprime la limitation sur la taille du répertoire racine (512 éléments, puisque ROOT était censé occuper un cluster).

5. Structure du répertoire racine améliorée

Des champs supplémentaires sont apparus, par exemple, heure de création, date de création, date du dernier accès, somme de contrôle

Il existe encore plusieurs handles pour un nom de fichier long.

Système de fichiers HPFS

HPFS (High Performance File System) est un système de fichiers hautes performances.

HPFS est apparu pour la première fois dans OS/2 1.2 et LAN Manager.

Faisons la liste principales fonctionnalités de HPFS.

· La principale différence réside dans les principes de base du placement des fichiers sur le disque et les principes de stockage des informations sur l'emplacement des fichiers. Grâce à ces principes, HPFS a hautes performances et tolérance aux pannes, est fiable système de fichiers.

· L'espace disque dans HPFS n'est pas alloué en clusters (comme dans FAT), mais blocs. Dans la mise en œuvre moderne, la taille du bloc est considérée comme égale à un secteur, mais en principe elle pourrait être d'une taille différente. (En fait, un bloc est un cluster, seul un cluster est toujours égal à un secteur). Placer les fichiers dans de si petits blocs permet utiliser l'espace disque plus efficacement, puisque la surcharge d'espace libre n'est en moyenne que (un demi-secteur) de 256 octets par fichier. N'oubliez pas que plus la taille du cluster est grande, plus l'espace disque est gaspillé.

· Le système HPFS s'efforce d'organiser le fichier en blocs contigus ou, si cela n'est pas possible, de le placer sur le disque de manière à ce que étendues(fragments) du fichier étaient physiquement aussi proches que possible les uns des autres. Cette approche est essentielle réduit le temps de positionnement de la tête d'écriture/lecture disque dur et temps d'attente (délai entre l'installation de la tête de lecture/écriture sur la piste souhaitée). Rappelons que dans un fichier FAT le premier cluster libre est simplement alloué.

Étendues(étendue) - fragments de fichiers situés dans des secteurs adjacents du disque. Un fichier possède au moins une extension s’il n’est pas fragmenté, et plusieurs extensions dans le cas contraire.

·Utilisé méthode arbres binaires équilibrés pour stocker et rechercher des informations sur l'emplacement des fichiers (les répertoires sont stockés au centre du disque, de plus, un tri automatique des répertoires est fourni), ce qui est essentiel augmente la productivité HPFS (contre FAT).

· HPFS fournit des attributs de fichiers étendus spéciaux qui permettent contrôler l'accès aux fichiers et aux répertoires.

Attributs étendus (attributs étendus, EA ) vous permettent de stocker des informations supplémentaires sur le fichier. Par exemple, chaque fichier peut être associé à son graphique unique (icône), sa description de fichier, son commentaire, ses informations sur le propriétaire du fichier, etc.

Structure des partitions HPFS


Au début de la partition sur laquelle HPFS est installé, il y a trois contrôles de bloc :

bloc de démarrage

· bloc supplémentaire (super bloc) et

· bloc de rechange (sauvegarde) (bloc de rechange).

Ils occupent 18 secteurs.

Tout l'espace disque restant dans HPFS est divisé en parties provenant de secteurs adjacents - rayures(bande - bande, ruban adhésif). Chaque bande occupe 8 Mo d'espace disque.

Chaque bande a son propre bitmap d'allocation de secteur.Le bitmap montre quels secteurs d'une bande donnée sont occupés et lesquels sont libres. Chaque secteur d'une bande de données correspond à un bit de son bitmap. Si bit = 1, alors le secteur est occupé, si 0, alors il est libre.

Les bitmaps des deux voies sont situés côte à côte sur le disque, tout comme les voies elles-mêmes. Autrement dit, la séquence de bandes et de cartes ressemble à celle de la Fig.

Comparer avecGRAISSE. Il n'existe qu'un seul « bit map » pour l'ensemble du disque (table FAT). Et pour travailler avec, il faut déplacer les têtes de lecture/écriture sur la moitié du disque en moyenne.

C'est afin de réduire le temps de positionnement des têtes de lecture/écriture d'un disque dur que dans HPFS le disque est divisé en stripes.

Considérons blocs de contrôle.

Bloc de démarrage (bottebloc)

Contient le nom du volume, son numéro de série, le bloc de paramètres du BIOS et le programme de démarrage.

Le programme d'amorçage trouve le fichier OS 2 LDR , le lit en mémoire et transfère le contrôle à ce programme de démarrage du système d'exploitation, qui, à son tour, charge le noyau OS/2 du disque vers la mémoire - OS 2 KRNL. Et déjà OS 2 KRIML utiliser les informations du fichier CONFIG. SYSTÈME charge tous les autres modules de programme et blocs de données nécessaires en mémoire.

Le bloc de démarrage est situé dans les secteurs 0 à 15.

SuperBloc(super bloc)

Contient

· pointeur vers une liste de bitmaps (liste de blocs bitmap). Cette liste répertorie tous les blocs du disque contenant les bitmaps utilisés pour détecter les secteurs libres ;

· pointeur vers la liste des blocs défectueux (bad block list). Lorsque le système détecte un bloc endommagé, celui-ci est ajouté à cette liste et n'est plus utilisé pour stocker des informations ;

· pointeur vers la bande de répertoire

· pointeur vers le nœud de fichier (nœud F) du répertoire racine,

· date du dernier scan de la partition par CHKDSK ;

· informations sur la taille de bande (dans la mise en œuvre actuelle de HPFS - 8 Mo).

Le super bloc est situé dans le secteur 16.

De rechangebloc(bloc de rechange)

Contient

· pointeur vers la carte de remplacement d'urgence (carte des correctifs ou zones de correctifs) ;

· pointeur vers la liste des blocs de rechange libres (liste des blocs libres d'urgence du répertoire) ;

· un certain nombre d'indicateurs et de descripteurs système.

Ce bloc est situé dans le secteur 17 du disque.

Le bloc de sauvegarde offre une tolérance élevée aux pannes au système de fichiers HPFS et vous permet de récupérer les données endommagées sur le disque.

Principe de placement de fichiers

Étendues(étendue) - fragments de fichiers situés dans des secteurs adjacents du disque. Un fichier possède au moins une extension s’il n’est pas fragmenté, et plusieurs extensions dans le cas contraire.

Pour réduire le temps de positionnement des têtes de lecture/écriture d'un disque dur, le système HPFS s'efforce de

1) placez le fichier dans des blocs adjacents ;

2) si cela n'est pas possible, placez les extensions du fichier fragmenté aussi près que possible les unes des autres,

Pour ce faire, HPFS utilise des statistiques et essaie également de réserver conditionnellement au moins 4 kilo-octets d'espace à la fin des fichiers en croissance.

Principes de stockage des informations sur l'emplacement des fichiers

Chaque fichier et répertoire sur le disque a son propre nœud de fichier F-Node. Il s'agit d'une structure qui contient des informations sur l'emplacement d'un fichier et ses attributs étendus.

Chaque nœud F occupe un secteur et est toujours situé à proximité de son fichier ou répertoire (généralement juste avant le fichier ou le répertoire). L'objet F-Node contient

· longueur,

· 15 premiers caractères du nom du fichier,

· informations de service spéciales,

· statistiques sur l'accès aux fichiers,

· attributs de fichier étendus,

· une liste de droits d'accès (ou seulement une partie de cette liste, si elle est très longue) ; Si les attributs étendus sont trop grands pour le nœud de fichier, un pointeur vers eux y est écrit.

· informations associatives sur la localisation et la subordination du dossier, etc.

Si le fichier est contigu, son emplacement sur le disque est décrit par deux nombres de 32 bits. Le premier nombre est un pointeur vers le premier bloc du fichier et le second est la longueur de l'étendue (le nombre de blocs consécutifs appartenant au fichier).

Si un fichier est fragmenté, l'emplacement de ses extensions est décrit dans le nœud du fichier par des paires supplémentaires de nombres de 32 bits.

Un nœud de fichier peut contenir des informations sur jusqu'à huit extensions d'un fichier. Si un fichier a plus d'extensions, un pointeur vers un bloc d'allocation est écrit sur son nœud de fichier, qui peut contenir jusqu'à 40 pointeurs vers des extensions ou, comme pour un bloc d'arborescence de répertoires, vers d'autres blocs d'allocation.

Structure et emplacement du répertoire

Utilisé pour stocker des répertoires bande située au centre du disque.

Cette bande s'appelle annuairegroupe.

S'il est complètement plein, HPFS commence à placer les répertoires de fichiers dans d'autres bandes.

Placer cette structure d'information au milieu du disque réduit considérablement le temps moyen de positionnement de la tête de lecture/écriture.

Cependant, une contribution nettement plus importante aux performances HPFS (par rapport au placement de la bande de répertoire au milieu d'un disque logique) est apportée en utilisant méthode arbres binaires équilibrés pour stocker et récupérer des informations sur l'emplacement des fichiers.

Rappelez-vous que dans le système de fichiers GRAISSE le répertoire a une structure linéaire, non ordonnée d'une manière particulière, donc lors de la recherche d'un fichier, vous devez le parcourir séquentiellement dès le début.

Dans HPFS, la structure des répertoires est un arbre équilibré avec des entrées classées par ordre alphabétique.

Chaque entrée incluse dans l'arborescence contient

· attributs du fichier,

· pointeur vers le nœud du fichier correspondant,

des informations sur l'heure et la date de création du fichier, l'heure et la date de la dernière mise à jour et accès,

longueur des données contenant des attributs étendus,

· compteur d'accès aux fichiers,

longueur du nom de fichier

· le nom lui-même,

· et d'autres informations.

Le système de fichiers HPFS examine uniquement les branches nécessaires de l'arborescence binaire lors de la recherche d'un fichier dans un répertoire. Cette méthode est bien plus efficace que la lecture séquentielle de toutes les entrées d’un répertoire, ce qui est le cas du système FAT.

La taille de chaque bloc en termes de répertoires alloués dans l'implémentation actuelle de HPFS est de 2 Ko. La taille de l'entrée décrivant le fichier dépend de la taille du nom du fichier. Si un nom fait 13 octets (pour le format 8.3), alors un bloc de 2 Ko peut contenir jusqu'à 40 descripteurs de fichiers. Les blocs sont connectés les uns aux autres via une liste.

Problèmes

Lorsque vous renommez des fichiers, un rééquilibrage de l'arborescence peut se produire. Créer un fichier, le renommer ou l'effacer peut entraîner blocs de répertoire en cascade. En fait, un changement de nom peut échouer en raison d'un manque d'espace disque, même si la taille du fichier lui-même n'a pas augmenté. Pour éviter ce désastre, HPFS maintient un petit pool de blocs gratuits pouvant être utilisés en cas de sinistre. Cette opération peut nécessiter l'allocation de blocs supplémentaires sur un disque plein. Un pointeur vers ce pool de blocs libres est stocké dans SpareBlock.

Principes de placement de fichiers et de répertoires sur le disque dansHPFS:

· les informations sur l'emplacement des fichiers sont dispersées sur tout le disque, avec des enregistrements pour chaque fichier spécifique situés (si possible) dans des secteurs adjacents et proches des données sur leur emplacement ;

· les répertoires sont situés au milieu de l'espace disque ;

· Les répertoires sont stockés sous forme d'arbre binaire équilibré avec des entrées classées par ordre alphabétique.

Fiabilité du stockage des données dans HPFS

Tout système de fichiers doit disposer d'un moyen de corriger les erreurs qui se produisent lors de l'écriture d'informations sur le disque. Le système HPFS utilise pour cela mécanisme de remplacement d'urgence ( correctif).

Si le système de fichiers HPFS rencontre un problème lors de l'écriture des données sur le disque, il affiche un message d'erreur. HPFS stocke alors les informations qui auraient dû être écrites sur le secteur défectueux dans l'un des secteurs libres réservés à l'avance pour cette éventualité. La liste des blocs de rechange libres est stockée dans le bloc de rechange HPFS. Si une erreur est détectée lors de l'écriture de données dans un bloc normal, HPFS sélectionne l'un des blocs de rechange libres et y stocke les données. Le système de fichiers se met ensuite à jour carte de remplacement d'urgence dans l'unité de réserve.

Cette carte est simplement constituée de paires de mots doubles, chacun étant un numéro de secteur de 32 bits.

Le premier chiffre indique le secteur défectueux, et le second indique le secteur parmi les secteurs de rechange disponibles qui a été sélectionné pour le remplacer.

Après avoir remplacé le secteur défectueux par un secteur de rechange, la carte de remplacement d'urgence est écrite sur le disque et une fenêtre contextuelle apparaît à l'écran informant l'utilisateur qu'une erreur d'écriture sur le disque s'est produite. Chaque fois que le système écrit ou lit un secteur de disque, il examine la carte de récupération et remplace tous les numéros de secteur défectueux par des numéros de secteur de rechange avec les données correspondantes.

Il convient de noter que cette traduction de numéros n'affecte pas de manière significative les performances du système, puisqu'elle est effectuée uniquement lors de l'accès physique au disque, et non lors de la lecture des données du cache disque.

Système de fichiers NTFS

Le système de fichiers NTFS (New Technology File System) contient un certain nombre d'améliorations et de modifications significatives qui le distinguent considérablement des autres systèmes de fichiers.

A noter qu'à de rares exceptions près, avec Les partitions NTFS ne peuvent être utilisées que directement depuisles fenêtresNT. bien qu'il existe des implémentations correspondantes de systèmes de gestion de fichiers pour lire des fichiers à partir de volumes NTFS pour un certain nombre de systèmes d'exploitation.

Cependant, il n'existe pas d'implémentation complète permettant de travailler avec NTFS en dehors de Windows NT.

NTFS n'est pas pris en charge sur les systèmes d'exploitation largement utilisés Windows 98 et Windows Millennium Edition.

Principales caractéristiquesNTFS

· le travail sur de grands disques s'effectue efficacement (beaucoup plus efficacement qu'en FAT) ;

· il existe des outils pour restreindre l'accès aux fichiers et répertoires Þ Les partitions NTFS assurent la sécurité locale pour les fichiers et les répertoires ;

· un mécanisme de transaction a été introduit dans lequel enregistrement opérations sur les fichiers Þ augmentation significative de la fiabilité;

· De nombreuses restrictions sur le nombre maximum de secteurs de disque et/ou de clusters ont été supprimées ;

· un nom de fichier en NTFS, contrairement aux systèmes de fichiers FAT et HPFS, peut contenir n'importe quel caractère, y compris l'ensemble complet des alphabets nationaux, puisque les données sont représentées en Unicode - une représentation 16 bits qui donne 65 535 caractères différents. La longueur maximale d'un nom de fichier en NTFS est de 255 caractères.

· NTFS dispose également de capacités de compression intégrées que vous pouvez appliquer à des fichiers individuels, à des répertoires entiers et même à des volumes (et ensuite les annuler ou les attribuer à votre guise).

Structure des volumes avec le système de fichiers NTFS

Une partition NTFS est appelée un volume (volume). La taille maximale possible du volume (et de la taille du fichier) est de 16 Mo (exaoctet 2**64).

Comme d'autres systèmes, NTFS divise l'espace disque d'un volume en clusters, c'est-à-dire des blocs de données traités comme des unités de données. NTFS prend en charge des tailles de cluster allant de 512 octets à 64 Ko ; le standard est un cluster de 2 ou 4 Ko.

Tout l'espace disque dans NTFS est divisé en deux parties inégales.


Les premiers 12 % du disque sont alloués à la zone dite MFT - espace qui peut être occupé par le service principal métafichier MFT.

Il n'est pas possible d'écrire des données dans cette zone. La zone MFT reste toujours vide - ceci est fait pour que le fichier MFT, si possible, ne se fragmente pas à mesure qu'il grandit.

Les 88 % restants du volume sont constitués d’espace de stockage de fichiers standard.

MFT(maîtredéposertableau - table de fichiers générale) est essentiellement un répertoire de tous les autres fichiers du disque, y compris lui-même. Il est conçu pour déterminer l'emplacement des fichiers.

MFT se compose d’enregistrements de taille fixe. La taille de l'enregistrement MFT (minimum 1 Ko et maximum 4 Ko) est déterminée lors du formatage du volume.

Chaque entrée correspond à un fichier.

Les 16 premières entrées sont de nature service et ne sont pas disponibles pour le système d'exploitation - elles sont appelées métafichiers, et le tout premier métafichier est le MFT lui-même.

Ces 16 premiers éléments MFT sont la seule partie du disque qui a une position strictement fixe. Une copie de ces mêmes 16 entrées est conservée au milieu du volume par souci de fiabilité.

Les parties restantes du fichier MFT peuvent être situées, comme tout autre fichier, à des emplacements arbitraires sur le disque.

Les métafichiers sont de nature de service - chacun d'eux est responsable d'un certain aspect du fonctionnement du système. Les métafichiers se trouvent dans le répertoire racine du volume NTFS. Ils commencent tous par le symbole « $ », bien qu'il soit difficile d'obtenir des informations à leur sujet par des moyens standard. Dans le tableau Les principaux métafichiers et leur objectif sont donnés.

Nom du métafichier

Objectif du métafichier

$MFT

Table de fichiers maître elle-même

$MFTmirr

Une copie des 16 premières entrées MFT placées au milieu du volume

$FichierJournal

Fichier de support de journalisation

$Volume

Informations sur le service : nom du volume, version du système de fichiers, etc.

$AttrDef

Liste des attributs de fichiers standards sur le volume

Répertoire racine

$Bitmap

Carte de l'espace libre en volume

$Boot

Secteur de démarrage (si la partition est bootable)

Quota $

Un fichier qui enregistre les droits des utilisateurs pour utiliser l'espace disque (ce fichier n'a commencé à fonctionner que dans Windows 2000 avec NTFS 5.0)

$Upcase

Fichier - un tableau de correspondance entre les lettres majuscules et minuscules dans les noms de fichiers. En NTFS, les noms de fichiers sont écrits en Unicode (ce qui équivaut à 65 000 symboles différents) et rechercher des équivalents grands et petits dans ce cas est une tâche non triviale

L'enregistrement MFT correspondant stocke toutes les informations sur le fichier :

· nom de fichier,

· taille;

· attributs de fichier ;

· position sur le disque de fragments individuels, etc.

Si un seul enregistrement MFT ne suffit pas pour l'information, alors plusieurs enregistrements sont utilisés, et pas nécessairement consécutifs.

Si le fichier n'est pas très volumineux, les données du fichier sont stockées directement dans le MFT, dans l'espace restant des données principales au sein d'un enregistrement MFT.

Un fichier sur un volume NTFS est identifié par ce qu'on appelle lien de fichier(File Reference), qui est représenté par un nombre de 64 bits.

· numéro de dossier qui correspond au numéro d'enregistrement dans MFT,

· et les numéros de séquence. Ce numéro est incrémenté chaque fois qu'un numéro donné dans la MFT est réutilisé, permettant au système de fichiers NTFS d'effectuer des contrôles d'intégrité internes.

Chaque fichier en NTFS est représenté par ruisseaux(flux), c'est-à-dire qu'il n'a pas « seulement des données » en tant que telles, mais il existe des flux.

L'un des flux est constitué par les données du fichier.

La plupart des attributs de fichiers sont également des flux.

Ainsi, il s'avère que le fichier n'a qu'une seule entité de base - le numéro dans le MFT, et tout le reste, y compris ses flux, est facultatif.

Cette approche peut être utilisée efficacement - par exemple, vous pouvez « attacher » un autre flux à un fichier en y écrivant n'importe quelle donnée.

Les attributs standard des fichiers et répertoires sur un volume NTFS ont des noms et des codes de type fixes.

Catalogue dans NTFS se trouve un fichier spécial qui stocke des liens vers d'autres fichiers et répertoires.

Le fichier catalogue est divisé en blocs, chacun contenant

· nom de fichier,

attributs de base et

Le répertoire racine du disque n'est pas différent des répertoires normaux, à l'exception d'un lien spécial vers celui-ci depuis le début du métafichier MFT.

La structure de répertoires interne est une arborescence binaire, similaire à HPFS.

Le nombre de fichiers dans les répertoires racine et non racine n'est pas limité.

Le système de fichiers NTFS prend en charge le modèle objet de sécurité NT : NTFS traite les répertoires et les fichiers comme des types d'objets distincts et gère des listes d'autorisations distinctes (bien que se chevauchant) pour chaque type.

NTFS offre une sécurité au niveau des fichiers ; cela signifie que les droits d'accès aux volumes, répertoires et fichiers peuvent dépendre du compte utilisateur et des groupes auxquels l'utilisateur appartient. Chaque fois qu'un utilisateur accède à un objet du système de fichiers, ses droits d'accès sont vérifiés par rapport à la liste d'autorisations de cet objet. Si l'utilisateur dispose des droits suffisants, sa demande est accordée ; sinon la demande est rejetée. Ce modèle de sécurité s'applique à la fois à l'enregistrement des utilisateurs locaux sur les ordinateurs NT et aux requêtes réseau distantes.

Le système NTFS possède également certaines capacités d'auto-réparation. NTFS prend en charge divers mécanismes de vérification de l'intégrité du système, notamment la journalisation des transactions, qui permet de relire les opérations d'écriture de fichiers dans un journal système spécial.

À enregistrement opérations sur les fichiers, le système de gestion de fichiers enregistre les modifications qui se produisent dans un fichier de service spécial. Au début d'une opération liée à la modification de la structure du fichier, une note correspondante est faite. En cas d'échec lors des opérations sur les fichiers, ladite marque de début d'opération reste indiquée comme incomplète. Lorsque vous effectuez une vérification de l'intégrité du système de fichiers après le redémarrage de la machine, ces opérations en attente seront annulées et les fichiers seront restaurés à leur état d'origine. Si l'opération de modification des données dans les fichiers est terminée normalement, alors dans ce même fichier de support de journalisation de service, l'opération est marquée comme terminée.

Le principal inconvénient du système de fichiersNTFS- les données de service prennent beaucoup de place (par exemple, chaque élément du répertoire occupe 2 Ko) - pour les petites partitions, les données de service peuvent occuper jusqu'à 25 % du volume du média.

Þ NTFS ne peut pas être utilisé pour formater des disquettes. Vous ne devez pas l'utiliser pour formater des partitions inférieures à 100 Mo.

Système de fichiers du système d'exploitation UNIX

Dans le monde UNIX, il existe plusieurs types de systèmes de fichiers dotés de leur propre structure de mémoire externe. Les plus connus sont le système de fichiers traditionnel UNIX System V (s5) et le système de fichiers de la famille UNIX BSD (ufs).

Considérez l'article 5.

Un fichier sur un système UNIX est une collection de caractères à accès aléatoire.

Le fichier a une structure qui lui est imposée par l'utilisateur.

Le système de fichiers Unix est un système de fichiers hiérarchique et multi-utilisateurs.

Le système de fichiers a une structure arborescente. Les sommets (nœuds intermédiaires) de l'arborescence sont des répertoires avec des liens vers d'autres répertoires ou fichiers. Les feuilles de l'arborescence correspondent à des fichiers ou répertoires vides.

Commentaire. En fait, le système de fichiers Unix n’est pas arborescent. Le fait est que le système a la possibilité de violer la hiérarchie sous forme d'arbre, puisqu'il est possible d'associer plusieurs noms avec le même contenu de fichier.

Structure du disque

Le disque est divisé en blocs. La taille du bloc de données est déterminée lors du formatage du système de fichiers avec la commande mkfs et peut être définie sur 512, 1 024, 2 048, 4 096 ou 8 192 octets.

On compte 512 octets (taille du secteur).

L'espace disque est divisé dans les zones suivantes (voir figure) :

· bloc de chargement ;

· superbloc de contrôle ;

· tableau d'i-nœuds ;

· zone de stockage du contenu (données) des fichiers ;

· un ensemble de blocs libres (liés dans une liste) ;

Bloc de démarrage

Superbloc

je - nœud

. . .

je - nœud

Commentaire. Pour le système de fichiers UFS - tout cela est répété pour un groupe de cylindres (sauf pour le bloc Boot) + une zone spéciale est allouée pour décrire le groupe de cylindres

Bloc de démarrage

Le bloc est situé dans le bloc n°0. (Rappelez-vous que l'emplacement de ce bloc dans le bloc zéro du périphérique système est déterminé par le matériel, puisque le chargeur de démarrage matériel accède toujours au bloc zéro du périphérique système. Il s'agit du dernier composant du système de fichiers qui dépend du matériel.)

Le bloc de démarrage contient un programme de promotion utilisé pour lancer initialement le système d'exploitation UNIX. Dans les systèmes de fichiers S 5, seul le bloc de démarrage du système de fichiers racine est réellement utilisé. Dans les systèmes de fichiers supplémentaires, cette zone est présente, mais n'est pas utilisée.

Superbloc

Il contient des informations opérationnelles sur l'état du système de fichiers, ainsi que des données sur les paramètres du système de fichiers.

En particulier, le superbloc contient les informations suivantes

· nombre de i-nœuds (descripteurs d'index) ;

· taille de la partition???;

· liste des blocs libres ;

· liste des i-nœuds libres ;

· et autre.

Faisons attention ! L'espace libre sur le disque est liste chaînée de blocs gratuits. Cette liste est stockée dans un superbloc.

Les éléments de liste sont des tableaux de 50 éléments (si bloc = 512 octets, alors élément = 16 bits) :

· Les éléments du tableau n° 1 à 48 contiennent les nombres de blocs libres d'espace de bloc de fichier de 2 à 49.

· l'élément #0 contient un pointeur vers la suite de la liste, et

· le dernier élément (n° 49) contient un pointeur vers un élément libre du tableau.

Si un processus a besoin d'un bloc libre pour développer un fichier, le système sélectionne un élément du tableau à l'aide d'un pointeur (vers un élément libre) et le bloc avec le numéro stocké dans cet élément est fourni au fichier. Si le fichier est réduit, les nombres libérés sont ajoutés au tableau de blocs libres et le pointeur vers l'élément libre est ajusté.

La taille du tableau étant de 50 éléments, deux situations critiques sont possibles :

1. Lorsque nous libérons des blocs de fichiers, mais qu'ils ne peuvent pas tenir dans ce tableau. Dans ce cas, un bloc libre est sélectionné dans le système de fichiers et le tableau entièrement rempli de blocs libres est copié dans ce bloc, après quoi la valeur du pointeur vers l'élément libre est réinitialisée, et l'élément zéro du tableau, qui se trouve dans le superbloc, contient le numéro du bloc que le système a choisi pour copier le contenu du tableau. A ce moment, un nouvel élément de la liste des blocs libres est créé (chacun comportant 50 éléments).

2. Lorsque le contenu des éléments du tableau de blocs libres est épuisé (dans ce cas, l'élément zéro du tableau est zéro). Si cet élément n'est pas égal à zéro, alors cela signifie qu'il y a une suite de le tableau. Cette suite est lue dans une copie du superbloc en RAM.

Liste gratuitei-nœuds. Il s'agit d'un tampon composé de 100 éléments. Il contient des informations sur 100 numéros d'i-nodes actuellement gratuits.

Le superbloc est toujours en RAM

Þ toutes les opérations (la libération et l'occupation des blocs et des i-nœuds se produisent dans la RAM Þ minimiser les échanges de disques.

Mais! Si le contenu du superbloc n'est pas écrit sur le disque et que l'alimentation est coupée, des problèmes surviendront (un écart entre l'état réel du système de fichiers et le contenu du superbloc). Mais c'est déjà une exigence pour la fiabilité des équipements du système.

Commentaire. Les systèmes de fichiers UFS prennent en charge plusieurs copies du superbloc (une copie par groupe de cylindres) pour améliorer la stabilité.

Zone d'inode

Il s'agit d'un tableau de descriptions de fichiers appelé je -nœuds (je-nœud).(64 octets ?)

Chaque descripteur d'index (i-node) d'un fichier contient :

· Type de fichier (fichier/répertoire/fichier spécial/fifo/socket)

· Attributs (droits d'accès) - 10

ID du propriétaire du fichier

· ID de groupe du propriétaire du fichier

· Temps de création du fichier

Heure de modification du fichier

· Heure du dernier accès au fichier

· Longueur du fichier

· Nombre de liens vers un i-node donné à partir de différents répertoires

Adresses de bloc de fichiers

!note. Il n'y a pas de nom de fichier ici

Regardons de plus près comment il est organisé adressage de bloc, dans lequel se trouve le fichier. Ainsi, dans le champ d'adresse, il y a les numéros des 10 premiers blocs du fichier.

Si le fichier dépasse dix blocs, alors le mécanisme suivant commence à fonctionner : le 11ème élément du champ contient le numéro de bloc, qui contient 128 (256) liens vers des blocs de ce fichier. Si le fichier est encore plus volumineux, le 12ème élément du champ est utilisé - il contient le numéro de bloc, qui contient 128(256) numéros de bloc, chaque bloc contenant 128(256) numéros de bloc du système de fichiers. Et si le fichier est encore plus volumineux, alors le 13ème élément est utilisé - où la profondeur d'imbrication de la liste est augmentée d'un autre.

De cette façon, nous pouvons obtenir un fichier de taille (10+128+128 2 +128 3)*512.

Cela peut être représenté comme suit :

Adresse du 1er bloc du fichier

Adresse du 2ème bloc du fichier

Adresse du 10ème bloc du fichier

Adresse de bloc d'adressage indirect (bloc avec 256 adresses de bloc)

Adresse du 2ème bloc d'adressage indirect (bloc de 256 blocs d'adresses avec adresses)

Adresse du 3ème bloc d'adressage indirect (bloc avec adresses de blocs avec adresses de blocs avec adresses)

Protection des fichiers

Examinons maintenant les identifiants de propriétaire et de groupe ainsi que les éléments de sécurité.

Sous Unix OS, il est utilisé hiérarchie des utilisateurs à trois niveaux:

Le premier niveau concerne tous les utilisateurs.

Le deuxième niveau concerne les groupes d’utilisateurs. (Tous les utilisateurs sont divisés en groupes.

Le troisième niveau est un utilisateur spécifique (les groupes sont constitués d'utilisateurs réels). Du fait de cette organisation des utilisateurs en trois niveaux, chaque fichier possède trois attributs :

1) Propriétaire du fichier. Cet attribut est associé à un utilisateur spécifique, qui est automatiquement attribué par le système comme propriétaire du fichier. Vous pouvez devenir propriétaire par défaut en créant un fichier, et il existe également une commande qui vous permet de changer le propriétaire d'un fichier.

2) Protection de l'accès aux fichiers. L'accès à chaque fichier est limité à trois catégories :

· droits du propriétaire (ce que le propriétaire peut faire avec ce fichier, dans le cas général - pas nécessairement tout) ;

· droits du groupe auquel appartient le propriétaire du fichier. Le propriétaire n'est pas inclus ici (par exemple, un fichier peut être verrouillé en lecture pour le propriétaire, mais tous les autres membres du groupe peuvent librement lire le fichier ;

· tous les autres utilisateurs du système ;

Pour ces trois catégories, trois actions sont réglementées : lire dans un fichier, écrire dans un fichier et exécuter un fichier (dans les mnémoniques du système R, W, X, respectivement). Chaque fichier de ces trois catégories définit quel utilisateur peut lire, lequel peut écrire et qui peut l'exécuter en tant que processus.

Organisation de l'annuaire

Du point de vue du système d'exploitation, un répertoire est un fichier standard contenant des données sur tous les fichiers appartenant au répertoire.

Un élément de répertoire se compose de deux champs :

1) numéro du nœud i (numéro ordinal dans le tableau des nœuds i) et

2)nom du fichier :

Chaque répertoire contient deux noms spéciaux : « . » - le répertoire lui-même ; '..' - Dossier Parent.

(Pour le répertoire racine, le parent fait référence au même répertoire.)

En général, un répertoire peut contenir plusieurs entrées faisant référence au même i-node, mais le répertoire ne peut pas contenir d'entrées portant les mêmes noms. Autrement dit, un nombre arbitraire de noms peut être associé au contenu du fichier. On l'appelle attacher. Une entrée de répertoire qui fait référence à un seul fichier est appelée communication.

Les fichiers existent indépendamment des entrées du répertoire et les liens du répertoire pointent en fait vers des fichiers physiques. Un fichier « disparaît » lorsque le dernier lien pointant vers lui est supprimé.

Ainsi, pour accéder à un fichier par son nom, système opérateur

1. trouve ce nom dans le répertoire contenant le fichier,

2. récupère le numéro du i-node du fichier,

3. par numéro trouve le i-nœud dans la zone des i-nœuds,

4. du i-node reçoit les adresses des blocs dans lesquels se trouvent les données du fichier,

5. lit les blocs de la zone de données en utilisant les adresses de bloc.

Structure de partition de disque dans EXT2 FS

L'ensemble de l'espace de partition est divisé en blocs. Un bloc peut avoir une taille de 1, 2 ou 4 kilo-octets. Un bloc est une unité adressable d’espace disque.

Les blocs de leur zone sont regroupés en groupes de blocs. Les groupes de blocs dans un système de fichiers et les blocs au sein d'un groupe sont numérotés séquentiellement, en commençant par 1. Le premier bloc d'un disque est numéroté 1 et appartient au groupe numéro 1. Le nombre total de blocs sur un disque (dans une partition de disque) est un diviseur de la capacité du disque, exprimé en secteurs. Et le nombre de groupes de blocs ne doit pas nécessairement diviser le nombre de blocs, car le dernier groupe de blocs peut ne pas être complet. Le début de chaque groupe de blocs a une adresse, qui peut être obtenue sous la forme ((numéro de groupe - 1)* (nombre de blocs dans le groupe)).

Chaque groupe de blocs a la même structure. Sa structure est présentée dans le tableau.

Le premier élément de cette structure (superbloc) est le même pour tous les groupes, et tous les autres sont individuels pour chaque groupe. Le superbloc est stocké dans le premier bloc de chaque groupe de blocs (sauf pour le groupe 1, qui possède un enregistrement de démarrage dans le premier bloc). Superbloc est le point de départ du système de fichiers. Sa taille est de 1 024 octets et il est toujours situé à un décalage de 1 024 octets par rapport au début du système de fichiers. La présence de plusieurs copies d'un superbloc s'explique par l'extrême importance de cet élément du système de fichiers. Les doublons de superbloc sont utilisés lors de la récupération d'un système de fichiers après des pannes.

Les informations stockées dans le superbloc permettent d'organiser l'accès au reste des données du disque. Le superbloc détermine la taille du système de fichiers, le nombre maximum de fichiers dans la partition, la quantité d'espace libre et contient des informations sur l'endroit où rechercher les zones non allouées. Lorsque le système d'exploitation démarre, le superbloc est lu en mémoire et toutes les modifications apportées au système de fichiers sont d'abord reflétées dans une copie du superbloc située dans le système d'exploitation et ne sont écrites sur le disque que périodiquement. Cela améliore les performances du système car de nombreux utilisateurs et processus mettent constamment à jour les fichiers. En revanche, lorsque le système est éteint, le superbloc doit être écrit sur le disque, ce qui ne permet pas d'éteindre l'ordinateur par une simple mise hors tension. Sinon, au prochain démarrage, les informations enregistrées dans le superbloc ne correspondront pas à l'état réel du système de fichiers.

Après le superbloc se trouve une description du groupe de blocs (Descripteurs de groupe). Ce descriptif contient :

Adresse du bloc contenant le bitmap de bloc de ce groupe ;

Adresse du bloc contenant le bitmap d'inode de ce groupe ;

Adresse du bloc contenant la table d'inodes de ce groupe ;

Compteur du nombre de blocs libres dans ce groupe ;

Le nombre d'inodes libres dans ce groupe ;

Le nombre d'inodes dans un groupe donné qui sont des répertoires

et d'autres données.

Les informations stockées dans la description du groupe sont utilisées pour localiser les bitmaps de bloc et d'inode, ainsi que la table d'inode.

Système de fichiers Poste 2 se caractérise par :

  • structure hiérarchique,
  • traitement coordonné d'ensembles de données,
  • extension de fichier dynamique,
  • protection des informations dans les fichiers,
  • traiter les périphériques (tels que les terminaux et les lecteurs de bandes) comme des fichiers.

Représentation des fichiers internes

Chaque fichier du système Ext 2 possède un index unique. L'index contient les informations nécessaires à tout processus pour accéder au fichier. Les processus accèdent aux fichiers à l'aide d'un ensemble bien défini d'appels système et identifient le fichier avec une chaîne de caractères qui agit comme un nom de fichier qualifié. Chaque nom composé identifie un fichier de manière unique, de sorte que le noyau système convertit ce nom en un index de fichier. L'index comprend une table d'adresses où les informations sur le fichier se trouvent sur le disque. Étant donné que chaque bloc d'un disque est adressé par son propre numéro, cette table stocke une collection de numéros de blocs de disque. Pour augmenter la flexibilité, le noyau ajoute un fichier bloc par bloc, permettant aux informations du fichier d'être dispersées dans tout le système de fichiers. Mais cette disposition complique la tâche de recherche de données. La table d'adresses contient une liste de numéros de bloc contenant des informations appartenant au fichier.

Inodes de fichiers

Chaque fichier sur le disque possède un inode de fichier correspondant, qui est identifié par son numéro de série - l'index de fichier. Cela signifie que le nombre de fichiers pouvant être créés sur un système de fichiers est limité par le nombre d'inodes, qui est soit explicitement spécifié lors de la création du système de fichiers, soit calculé en fonction de la taille physique de la partition de disque. Les inodes existent sur le disque sous forme statique et le noyau les lit en mémoire avant de travailler avec eux.

L'inode du fichier contient les informations suivantes :

- Le type et les droits d'accès à ce fichier.

Identifiant du propriétaire du fichier (Owner Uid).

Taille du fichier en octets.

Heure du dernier accès au fichier (Heure d'accès).

Heure de création du fichier.

Heure de la dernière modification du fichier.

Heure de suppression du fichier.

ID de groupe (GID).

Les liens comptent.

Le nombre de blocs occupés par le fichier.

Indicateurs de fichier

Réservé au système d'exploitation

Pointeurs vers des blocs dans lesquels les données du fichier sont écrites (un exemple d'adressage direct et indirect sur la Fig. 1)

Version du fichier (pour NFS)

Fichier ACL

Liste de contrôle d'accès d'annuaire

Adresse du fragment

Numéro de fragment

Taille des fragments

Catalogues

Les répertoires sont des fichiers.

Le noyau stocke les données dans un répertoire comme il le fait dans un type de fichier normal, en utilisant une structure d'index et des blocs avec des niveaux d'adressage direct et indirect. Les processus peuvent lire les données des répertoires de la même manière qu'ils lisent les fichiers normaux, cependant, l'accès exclusif en écriture au répertoire est réservé par le noyau, garantissant que la structure des répertoires est correcte.)

Lorsqu'un processus utilise un chemin de fichier, le noyau recherche dans les répertoires le numéro d'inode correspondant. Une fois le nom du fichier converti en numéro d'inode, l'inode est placé en mémoire puis utilisé dans les requêtes suivantes.

Fonctionnalités supplémentaires d'EXT2 FS

En plus des fonctionnalités Unix standard, EXT2fs fournit des fonctionnalités supplémentaires qui ne sont généralement pas prises en charge par les systèmes de fichiers Unix.

Les attributs de fichier vous permettent de modifier la façon dont le noyau réagit lorsque vous travaillez avec des ensembles de fichiers. Vous pouvez définir des attributs sur un fichier ou un répertoire. Dans le second cas, les fichiers créés dans ce répertoire héritent de ces attributs.

Lors du montage du système, certaines fonctionnalités liées aux attributs de fichiers peuvent être définies. L'option de montage permet à l'administrateur de choisir la manière dont les fichiers sont créés. Dans un système de fichiers spécifique à BSD, les fichiers sont créés avec le même ID de groupe que le répertoire parent. Les fonctionnalités du System V sont un peu plus complexes. Si un répertoire a le bit setgid défini, alors les fichiers créés héritent de l'identifiant de groupe de ce répertoire et les sous-répertoires héritent de l'identifiant de groupe et du bit setgid. Sinon, les fichiers et répertoires sont créés avec l'ID de groupe principal du processus appelant.

Le système EXT2fs peut utiliser une modification de données synchrone similaire au système BSD. L'option de montage permet à l'administrateur de spécifier que toutes les données (inodes, blocs de bits, blocs indirects et blocs de répertoire) soient écrites sur le disque de manière synchrone lorsqu'elles sont modifiées. Cela peut être utilisé pour atteindre une capacité d’enregistrement de données élevée, mais entraîne également de mauvaises performances. En réalité, cette fonction n'est généralement pas utilisée car, en plus de dégrader les performances, elle peut entraîner la perte de données utilisateur qui ne sont pas signalées lors de la vérification du système de fichiers.

EXT2fs vous permet de sélectionner la taille du bloc logique lors de la création d'un système de fichiers. Sa taille peut être de 1 024, 2 048 ou 4 096 octets. L'utilisation de blocs plus grands entraîne des opérations d'E/S plus rapides (puisque moins de requêtes de disque sont effectuées) et donc moins de mouvements de tête. D’un autre côté, l’utilisation de gros blocs entraîne un gaspillage d’espace disque. En règle générale, le dernier bloc d'un fichier n'est pas entièrement utilisé pour stocker des informations. Ainsi, à mesure que la taille du bloc augmente, la quantité d'espace disque gaspillé augmente.

EXT2fs vous permet d'utiliser des liens symboliques accélérés. Lors de l'utilisation de tels liens, les blocs de données du système de fichiers ne sont pas utilisés. Le nom du fichier de destination n'est pas stocké dans le bloc de données, mais dans l'inode lui-même. Cette structure permet d'économiser de l'espace disque et d'accélérer le traitement des liens symboliques. Bien entendu, l’espace réservé à un handle est limité, donc tous les liens ne peuvent pas être représentés comme un lien accéléré. La longueur maximale d'un nom de fichier dans un lien accéléré est de 60 caractères. Dans un avenir proche, il est prévu d'étendre ce système aux petits fichiers.

EXT2fs surveille l'état du système de fichiers. Le noyau utilise un champ séparé dans le superbloc pour indiquer l'état du système de fichiers. Si le système de fichiers est monté en mode lecture/écriture, alors son état est défini sur « Not Clean ». S'il est démonté ou remonté en mode lecture seule, alors son état est défini sur « Nettoyer ». Lors des vérifications du démarrage du système et de l'état du système de fichiers, ces informations sont utilisées pour déterminer si une vérification du système de fichiers est nécessaire. Le noyau place également quelques erreurs dans ce champ. Lorsque le noyau détecte une incompatibilité, le système de fichiers est marqué comme « Erroné ». Le vérificateur du système de fichiers teste ces informations pour vérifier le système, même si son état est réellement Clean.

Ignorer les tests du système de fichiers pendant une longue période peut parfois entraîner certaines difficultés, c'est pourquoi EXT2fs inclut deux méthodes pour vérifier régulièrement le système. Le superbloc contient le compteur de montage système. Ce compteur est incrémenté à chaque fois que le système est monté en mode lecture/écriture. Si sa valeur atteint le maximum (elle est également stockée dans le superbloc), alors le programme de test du système de fichiers commence à la vérifier, même si son état est « Propre ». L'heure du dernier contrôle et l'intervalle maximum entre les contrôles sont également stockés dans le superbloc. Lorsque l'intervalle maximum entre les analyses est atteint, l'état du système de fichiers est ignoré et son analyse est lancée.

Optimisation des performances

Le système EXT2fs contient de nombreuses fonctionnalités qui optimisent ses performances, ce qui entraîne une vitesse accrue d'échange d'informations lors de la lecture et de l'écriture de fichiers.

EXT2fs utilise activement le tampon disque. Lorsqu'un bloc doit être lu, le noyau émet une requête d'opération d'E/S vers plusieurs blocs adjacents. Ainsi, le noyau essaie de s'assurer que le prochain bloc à lire a déjà été chargé dans le tampon disque. De telles opérations sont généralement effectuées lors de la lecture séquentielle de fichiers.

Le système EXT2fs contient également un grand nombre d'optimisations pour le placement d'informations. Les groupes de blocs sont utilisés pour regrouper les inodes et les blocs de données correspondants. Le noyau essaie toujours de placer les blocs de données d'un fichier dans le même groupe, ainsi que son descripteur. Ceci a pour but de réduire le mouvement des têtes de lecteur lors de la lecture du descripteur et de ses blocs de données correspondants.

Lors de l'écriture de données dans un fichier, EXT2fs pré-alloue jusqu'à 8 blocs contigus lors de l'allocation d'un nouveau bloc. Cette méthode vous permet d'obtenir des performances élevées sous une charge système importante. Cela permet également de placer les fichiers dans des blocs contigus, ce qui accélère leur lecture ultérieure.

Cet article est dédié à systèmes de fichiers . Lors de l'installation du système d'exploitation, Windows vous invite à sélectionner un système de fichiers sur la partition où il sera installé, et les utilisateurs de PC doivent choisir parmi deux options GRAISSE ou NTFS.

Dans la plupart des cas, les utilisateurs se contentent de savoir que NTFS est "meilleur", et choisissez cette option.

Cependant, ils se demandent parfois et qu'est-ce qui est mieux exactement ?

Dans cet article, je vais essayer d'expliquer qu'est-ce qu'un système de fichiers, qu'est-ce qu'ils sont, en quoi ils diffèrent et lequel doit être utilisé.

L'article simplifie certaines caractéristiques techniques des systèmes de fichiers pour une perception plus compréhensible du matériel.

Système de fichiers est un moyen d'organiser les données sur des supports de stockage. Le système de fichiers détermine où et comment les fichiers seront écrits sur le support de stockage et donne au système d'exploitation l'accès à ces fichiers.

Les systèmes de fichiers modernes ont des exigences supplémentaires : la capacité de chiffrer les fichiers, le contrôle d'accès aux fichiers et des attributs supplémentaires. Généralement, le système de fichiers est écrit au début du disque dur. ().

Du point de vue du système d'exploitation, un disque dur est un ensemble de clusters.

Grappe est une zone de disque d'une certaine taille pour stocker des données. La taille minimale du cluster est de 512 octets. Puisque le système de nombres binaires est utilisé, les tailles des groupes sont des multiples de puissances de deux.

L'utilisateur peut imaginer au sens figuré le disque dur comme un bloc-notes à carreaux. Une cellule sur la page est un cluster. Le système de fichiers est le contenu du bloc-notes et le fichier est le mot.

Pour les disques durs des PC, il existe actuellement deux systèmes de fichiers les plus courants : GRAISSE ou NTFS. Apparu en premier GRAISSE (FAT16), alors FAT32, et puis NTFS.

GRAISSE(FAT16) est une abréviation de Table d'allocation des fichiers(en traduction Table d'allocation des fichiers).

Le cadre FAT a été développé par Bill Gates et Mark McDonald en 1977. Utilisé comme système de fichiers principal dans les systèmes d'exploitation DOS et Microsoft Windows (avant Windows ME).

Il existe quatre versions de FAT - FAT12, FAT16, FAT32 Et exFAT. Ils diffèrent par le nombre de bits alloués pour stocker le numéro de cluster.

FAT12 principalement utilisé pour les disquettes, FAT16- pour les petits disques, et le nouveau exFAT principalement pour les lecteurs flash. La taille de cluster maximale prise en charge dans FAT est de 64 Ko. ()

FAT16 introduit pour la première fois en novembre 1987. Indice 16 dans le nom indique que 16 bits sont utilisés pour le numéro de cluster. Par conséquent, la taille maximale de partition de disque (volume) que ce système peut prendre en charge est de 4 Go.

Plus tard, avec le développement de la technologie et l'avènement des disques d'une capacité supérieure à 4 Go, un système de fichiers est apparu FAT32. Il utilise l'adressage de cluster 32 bits et a été introduit avec Windows 95 OSR2 en août 1996. FAT32 taille de volume limitée à 128 Go. Ce système peut également prendre en charge les noms de fichiers longs. ().

NTFS(abréviation NouveauTechnologieDéposerSystème - Système de fichiers de nouvelle technologie) est un système de fichiers standard pour la famille de systèmes d'exploitation Microsoft Windows NT.

Introduit le 27 juillet 1993 avec Windows NT 3.1. NTFS est basé sur le système de fichiers HPFS (abréviation HautPerformanceDéposerSystème - Système de fichiers haute performance), créé par Microsoft en collaboration avec IBM pour le système d'exploitation OS/2.

Principales fonctionnalités de NTFS : capacités intégrées pour limiter l'accès aux données pour différents utilisateurs et groupes d'utilisateurs, ainsi que pour attribuer des quotas (restrictions sur la quantité maximale d'espace disque occupé par certains utilisateurs), utilisation d'un système de journalisation pour augmenter la fiabilité du système de fichiers.

Les spécifications du système de fichiers sont propriétaires. Généralement, la taille du cluster est de 4 Ko. En pratique, il est déconseillé de créer des volumes supérieurs à 2 To. Les disques durs viennent tout juste d'atteindre cette taille, peut-être qu'un nouveau système de fichiers nous attend dans le futur. ().

Lors de l'installation de Windows XP, vous êtes invité à formater le disque dans le système. GRAISSE ou NTFS. Cela signifie FAT32.

Tous les systèmes de fichiers sont construits sur le principe : un cluster - un fichier. Ceux. un cluster stocke les données d'un seul fichier.

La principale différence entre ces systèmes pour l'utilisateur moyen est la taille du cluster. « Il y a longtemps, lorsque les disques étaient petits et les fichiers très petits », cela était très visible.

Regardons l'exemple d'un volume sur un disque d'une capacité de 120 Go et d'un fichier de 10 Ko.

Pour FAT32 la taille du cluster sera de 32 Ko, et pour NTFS- 4 Ko.

DANS FAT32 un tel fichier occupera 1 cluster, laissant 32-10 = 22 Ko d'espace non alloué.

DANS NTFS un tel fichier occupera 3 clusters, laissant 12-10 = 2 Ko d'espace non alloué.

Par analogie avec un bloc-notes, un cluster est une cellule. Et après avoir placé un point dans une cellule, on occupe déjà logiquement tout cela, mais en réalité il reste beaucoup d'espace libre.

Ainsi, le passage de FAT32À NTFS vous permet d'utiliser votre disque dur de manière plus optimale lorsqu'il y a un grand nombre de petits fichiers sur le système.

En 2003, j'avais un disque de 120 Go, réparti en volumes de 40 et 80 Go. Lorsque je suis passé de Windows 98 à Windows XP et que j'ai converti le disque avec FAT32 V NTFS, j'ai obtenu environ 1 Go d'espace disque libéré. À l’époque, il s’agissait d’une « augmentation » significative.

Pour savoir quel système de fichiers est utilisé sur les volumes du disque dur de votre PC, vous devez ouvrir la fenêtre des propriétés du volume et sur l'onglet "Sont communs" lisez ces données.

Volume est synonyme de partition de disque ; les utilisateurs appellent généralement un volume « lecteur C », « lecteur D », etc. Un exemple est montré dans l'image ci-dessous :

Actuellement, les disques d'une capacité de 320 Go ou plus sont largement utilisés. C'est pourquoi je recommande d'utiliser le système NTFS pour une utilisation optimale de l'espace disque.

De plus, s'il y a plusieurs utilisateurs sur le PC, NTFS vous permet de configurer l'accès aux fichiers afin que différents utilisateurs ne puissent pas lire et modifier les fichiers des autres utilisateurs.

Dans les organisations, lorsqu'ils travaillent sur un réseau local, les administrateurs système utilisent d'autres fonctionnalités NTFS.

Si vous souhaitez organiser l'accès aux fichiers pour plusieurs utilisateurs sur un même PC, les articles suivants le décriront en détail.

Lors de la rédaction de cet article, des éléments des sites ru.wikipedia.org ont été utilisés.

Auteur de l'article : Maxime Telpari
Utilisateur de PC avec 15 ans d'expérience. Spécialiste du support pour le cours vidéo "Confident PC User", après avoir étudié lequel vous apprendrez à assembler un ordinateur, à installer Windows XP et les pilotes, à restaurer le système, à travailler dans des programmes et bien plus encore.

Gagnez de l'argent avec cet article !
Inscrivez-vous au programme d'affiliation. Remplacez le lien vers le cours dans l'article par votre lien d'affiliation. Ajoutez un article à votre site. Vous pouvez obtenir une version réimprimée.

Systèmes de fichiers FAT

FAT16

Le système de fichiers FAT16 remonte à l'époque pré-MS-DOS et est pris en charge par tous les systèmes d'exploitation Microsoft pour des raisons de compatibilité. Son nom File Allocation Table reflète parfaitement l'organisation physique du système de fichiers, dont les principales caractéristiques incluent le fait que la taille maximale d'un volume supporté (disque dur ou partition sur un disque dur) n'excède pas 4095 Mo. À l'époque de MS-DOS, les disques durs de 4 Go semblaient une chimère (les disques de 20 à 40 Mo étaient un luxe), une telle réserve était donc tout à fait justifiée.

Un volume formaté pour utiliser FAT16 est divisé en clusters. La taille du cluster par défaut dépend de la taille du volume et peut aller de 512 octets à 64 Ko. Dans le tableau La figure 2 montre comment la taille du cluster varie en fonction de la taille du volume. Notez que la taille du cluster peut différer de la valeur par défaut, mais doit avoir l'une des valeurs spécifiées dans le tableau. 2.

Il n'est pas recommandé d'utiliser le système de fichiers FAT16 sur des volumes supérieurs à 511 Mo, car pour des fichiers relativement petits, l'espace disque sera utilisé de manière extrêmement inefficace (un fichier de 1 octet occupera 64 Ko). Quelle que soit la taille du cluster, le système de fichiers FAT16 n'est pas pris en charge pour les volumes supérieurs à 4 Go.

FAT32

À partir de Microsoft Windows 95 OEM Service Release 2 (OSR2), Windows a introduit la prise en charge de la FAT 32 bits. Pour les systèmes Windows NT, ce système de fichiers a été pris en charge pour la première fois dans Microsoft Windows 2000. Alors que FAT16 peut prendre en charge des volumes allant jusqu'à 4 Go, FAT32 peut prendre en charge des volumes jusqu'à 2 To. La taille du cluster en FAT32 peut varier de 1 (512 octets) à 64 secteurs (32 Ko). Les valeurs du cluster FAT32 nécessitent 4 octets (32 bits, et non 16 bits comme dans FAT16) pour stocker les valeurs du cluster. Cela signifie notamment que certains utilitaires de fichiers conçus pour FAT16 ne peuvent pas fonctionner avec FAT32.

La principale différence entre FAT32 et FAT16 est que la taille de la partition logique du disque a changé. FAT32 prend en charge des volumes jusqu'à 127 Go. De plus, si lors de l'utilisation de FAT16 avec des disques de 2 Go, un cluster de 32 Ko était requis, alors dans FAT32, un cluster de 4 Ko convient aux disques d'une capacité de 512 Mo à 8 Go (Tableau 4).

Cela signifie donc une utilisation plus efficace de l'espace disque : plus le cluster est petit, moins il faut d'espace pour stocker le fichier et, par conséquent, le disque est moins susceptible d'être fragmenté.

Lors de l'utilisation de FAT32, la taille maximale du fichier peut atteindre 4 Go moins 2 octets. Si vous utilisez FAT16, le nombre maximum d'entrées dans le répertoire racine était limité à 512, alors FAT32 vous permet d'augmenter ce nombre à 65 535.

FAT32 impose des restrictions sur la taille minimale du volume : il doit être d'au moins 65 527 clusters. Dans ce cas, la taille du cluster ne peut pas être telle que FAT occupe plus de 16 Mo à 64 Ko / 4 ou 4 millions de clusters.

En utilisant des noms de fichiers longs, les données auxquelles il faut accéder depuis FAT16 et FAT32 ne se chevauchent pas. Lorsque vous créez un fichier avec un nom long, Windows crée un nom correspondant au format 8.3 et une ou plusieurs entrées dans le répertoire pour stocker le nom long (13 caractères du nom de fichier long par entrée). Chaque occurrence suivante stocke la partie correspondante du nom de fichier au format Unicode. De telles occurrences ont les attributs « identifiant de volume », « lecture seule », « système » et « caché » - un ensemble qui est ignoré par MS-DOS ; dans ce système d'exploitation, on accède à un fichier par son "alias" au format 8.3.

Système de fichiers NTFS

Microsoft Windows 2000 inclut la prise en charge d'une nouvelle version du système de fichiers NTFS, qui permet notamment de travailler avec les services d'annuaire Active Directory, des points d'analyse, des outils de sécurité des informations, un contrôle d'accès et un certain nombre d'autres fonctionnalités.

Comme pour FAT, la principale unité d’information dans NTFS est le cluster. Dans le tableau La figure 5 montre les tailles de cluster par défaut pour des volumes de différentes capacités.

Lorsque vous créez un système de fichiers NTFS, le formateur crée un fichier MTF (Master File Table) et d'autres zones pour stocker les métadonnées. Les métadonnées sont utilisées par NTFS pour implémenter la structure des fichiers. Les 16 premières entrées de MFT sont réservées par NTFS lui-même. L'emplacement des fichiers de métadonnées $Mft et $MftMirr est enregistré dans le secteur de démarrage du disque. Si la première entrée du MFT est corrompue, NTFS lit la deuxième entrée pour trouver une copie de la première. Une copie complète du secteur de démarrage se trouve à la fin du volume. Dans le tableau La figure 6 répertorie les principales métadonnées stockées dans MFT.

Les entrées MFT restantes contiennent des entrées pour chaque fichier et répertoire situé sur le volume.

En règle générale, un fichier utilise une entrée MFT, mais si un fichier possède un grand nombre d'attributs ou devient trop fragmenté, des entrées supplémentaires peuvent être nécessaires pour stocker des informations le concernant. Dans ce cas, le premier enregistrement d'un fichier, appelé enregistrement de base, stocke l'emplacement des autres enregistrements. Les données sur les petits fichiers et répertoires (jusqu'à 1 500 octets) sont entièrement contenues dans le premier enregistrement.

Attributs de fichier dans NTFS

Chaque secteur occupé sur un volume NTFS appartient à l'un ou l'autre fichier. Même les métadonnées du système de fichiers font partie du fichier. NTFS traite chaque fichier (ou répertoire) comme un ensemble d'attributs de fichier. Des éléments tels que le nom du fichier, ses informations de sécurité et même les données qu'il contient sont des attributs de fichier. Chaque attribut est identifié par un code de type spécifique et, éventuellement, un nom d'attribut.

Si les attributs de fichier tiennent dans un enregistrement de fichier, ils sont appelés attributs résidents. Ces attributs sont toujours le nom du fichier et la date de sa création. Dans les cas où les informations du fichier sont trop volumineuses pour tenir dans un seul enregistrement MFT, certains attributs du fichier deviennent non-résidents. Les attributs résidents sont stockés dans un ou plusieurs clusters et représentent un flux de données alternatives pour le volume actuel (plus d'informations ci-dessous). NTFS crée un attribut de liste d'attributs pour décrire l'emplacement des attributs résidents et non-résidents.

Dans le tableau La figure 7 montre les principaux attributs de fichier définis dans NTFS. Cette liste pourrait être élargie à l'avenir.

Système de fichiers CDFS

Windows 2000 prend en charge le système de fichiers CDFS, conforme à la norme ISO'9660 qui décrit la disposition des informations sur un CD-ROM. Les noms de fichiers longs sont pris en charge conformément à la norme ISO'9660 niveau 2.

Lors de la création d'un CD-ROM destiné à être utilisé sous Windows 2000, gardez les points suivants à l'esprit :

  • tous les noms de répertoires et de fichiers doivent contenir moins de 32 caractères ;
  • tous les noms de répertoires et de fichiers doivent être composés uniquement de caractères majuscules ;
  • la profondeur du répertoire ne doit pas dépasser 8 niveaux à partir de la racine ;
  • L'utilisation d'extensions de nom de fichier est facultative.

Comparaison des systèmes de fichiers

Sous Microsoft Windows 2000, il est possible d'utiliser les systèmes de fichiers FAT16, FAT32, NTFS ou une combinaison de ceux-ci. Le choix du système d'exploitation dépend des critères suivants :

  • comment l'ordinateur est utilisé ;
  • plate-forme matérielle ;
  • taille et nombre de disques durs ;
  • sécurité des informations

Systèmes de fichiers FAT

Comme vous l'avez peut-être déjà remarqué, les chiffres dans les noms des systèmes de fichiers - FAT16 et FAT32 - indiquent le nombre de bits requis pour stocker les informations sur les numéros de cluster utilisés par le fichier. Ainsi, FAT16 utilise un adressage 16 bits et, par conséquent, il est possible d'utiliser jusqu'à 2 16 adresses. Dans Windows 2000, les quatre premiers bits de la table d'emplacement des fichiers FAT32 sont utilisés à leurs propres fins, donc dans FAT32, le nombre d'adresses atteint 2 28 .

Dans le tableau La figure 8 montre les tailles de cluster pour les systèmes de fichiers FAT16 et FAT32.

En plus des différences significatives dans la taille des clusters, FAT32 permet également d'étendre le répertoire racine (dans FAT16, le nombre d'entrées est limité à 512 et peut être encore plus bas si des noms de fichiers longs sont utilisés).

Avantages du FAT16

Parmi les avantages du FAT16 figurent les suivants :

  • le système de fichiers est pris en charge par les systèmes d'exploitation MS-DOS, Windows 95, Windows 98, Windows NT, Windows 2000, ainsi que certains systèmes d'exploitation UNIX ;
  • il existe un grand nombre de programmes qui vous permettent de corriger les erreurs de ce système de fichiers et de restaurer les données ;
  • si des problèmes surviennent lors du démarrage à partir du disque dur, le système peut être démarré à partir d'une disquette ;
  • Ce système de fichiers est assez efficace pour les volumes inférieurs à 256 Mo.
Inconvénients du FAT16

Les principaux inconvénients du FAT16 sont les suivants :

  • le répertoire racine ne peut pas contenir plus de 512 éléments. L'utilisation de noms de fichiers longs réduit considérablement le nombre de ces éléments ;
  • FAT16 prend en charge un maximum de 65 536 clusters, et comme certains clusters sont réservés par le système d'exploitation, le nombre de clusters disponibles est de 65 524. Chaque cluster a une taille fixe pour une unité logique donnée. Lorsque le nombre maximum de clusters est atteint avec la taille maximale du cluster (32 Ko), la taille maximale du volume pris en charge est limitée à 4 Go (sous Windows 2000). Pour maintenir la compatibilité avec MS-DOS, Windows 95 et Windows 98, la taille du volume sous FAT16 ne doit pas dépasser 2 Go ;
  • FAT16 ne prend pas en charge la protection et la compression intégrées des fichiers ;
  • Sur les grands disques, beaucoup d'espace est perdu du fait que la taille maximale du cluster est utilisée. L'espace pour un fichier est alloué en fonction non pas de la taille du fichier, mais de la taille du cluster.
Avantages du FAT32

Parmi les avantages du FAT32 figurent les suivants :

  • L'allocation de l'espace disque est plus efficace, en particulier pour les gros disques ;
  • Le répertoire racine en FAT32 est une chaîne régulière de clusters et peut être situé n'importe où sur le disque. Grâce à cela, FAT32 n'impose aucune restriction sur le nombre d'éléments dans le répertoire racine ;
  • en raison de l'utilisation de clusters plus petits (4 Ko sur des disques jusqu'à 8 Go), l'espace disque occupé est généralement 10 à 15 % inférieur à celui sous FAT16 ;
  • FAT32 est un système de fichiers plus fiable. En particulier, il prend en charge la possibilité de déplacer le répertoire racine et d'utiliser une sauvegarde FAT. De plus, l'enregistrement de démarrage contient un certain nombre de données critiques pour le système de fichiers.
Inconvénients du FAT32

Les principaux inconvénients du FAT32 :

  • La taille du volume lors de l'utilisation de FAT32 sous Windows 2000 est limitée à 32 Go ;
  • Les volumes FAT32 ne sont pas disponibles à partir d'autres systèmes d'exploitation - uniquement à partir de Windows 95 OSR2 et Windows 98 ;
  • La sauvegarde du secteur de démarrage n'est pas prise en charge ;
  • FAT32 ne prend pas en charge la protection et la compression de fichiers intégrées.

Système de fichiers NTFS

Lors de l'exécution de Windows 2000, Microsoft recommande de formater toutes les partitions du disque dur en NTFS, à l'exception des configurations dans lesquelles plusieurs systèmes d'exploitation sont utilisés (à l'exception de Windows 2000 et Windows NT). L'utilisation de NTFS au lieu de FAT vous permet d'utiliser les fonctionnalités disponibles dans NTFS. Il s’agit notamment :

  • possibilité de récupération. Cette fonctionnalité est intégrée au système de fichiers. NTFS garantit la sécurité des données car il utilise un protocole et certains algorithmes de récupération d'informations. En cas de panne du système, NTFS utilise le protocole et des informations supplémentaires pour restaurer automatiquement l'intégrité du système de fichiers ;
  • compression des informations. Pour les volumes NTFS, Windows 2000 prend en charge la compression de fichiers individuels. Ces fichiers compressés peuvent être utilisés par les applications Windows sans décompression préalable, qui se produit automatiquement lors de la lecture du fichier. Une fois fermé et enregistré, le fichier est à nouveau compressé ;
  • De plus, les avantages suivants de NTFS peuvent être soulignés :

Certaines fonctionnalités du système d'exploitation nécessitent NTFS ;

La vitesse d'accès est beaucoup plus élevée - NTFS minimise le nombre d'accès au disque requis pour trouver un fichier ;

Protégez les fichiers et les répertoires. Uniquement sur les volumes NTFS, il est possible de définir des attributs d'accès pour les fichiers et dossiers ;

Lors de l'utilisation de NTFS, Windows 2000 prend en charge des volumes allant jusqu'à 2 To ;

Le système de fichiers conserve une copie de sauvegarde du secteur de démarrage - elle est située à la fin du volume ;

NTFS prend en charge le système de fichiers cryptés (EFS), qui offre une protection contre tout accès non autorisé au contenu des fichiers ;

Lorsque vous utilisez des quotas, vous pouvez limiter la quantité d'espace disque consommée par les utilisateurs.

Inconvénients de NTFS

Parlant des inconvénients du système de fichiers NTFS, il convient de noter que :

  • Les volumes NTFS ne sont pas disponibles sous MS-DOS, Windows 95 et Windows 98. De plus, un certain nombre de fonctionnalités implémentées dans NTFS sous Windows 2000 ne sont pas disponibles dans Windows 4.0 et les versions antérieures ;
  • Pour les petits volumes contenant de nombreux petits fichiers, les performances peuvent être réduites par rapport à FAT.

Système de fichiers et vitesse

Comme nous l'avons déjà découvert, pour les petits volumes, FAT16 ou FAT32 offre un accès plus rapide aux fichiers par rapport à NTFS, car :

  • FAT a une structure plus simple ;
  • la taille du répertoire est plus petite ;
  • FAT ne prend pas en charge la protection des fichiers contre les accès non autorisés - le système n'a pas besoin de vérifier les autorisations des fichiers.

NTFS minimise le nombre d'accès au disque et le temps nécessaire pour trouver un fichier. De plus, si la taille du répertoire est suffisamment petite pour contenir une seule entrée MFT, l’intégralité de l’entrée est lue en même temps.

Une entrée dans le FAT contient le numéro de cluster du premier cluster du répertoire. L'affichage d'un fichier FAT nécessite une recherche dans toute la structure du fichier.

Lorsque vous comparez la vitesse des opérations effectuées sur des répertoires contenant des noms de fichiers courts et longs, gardez à l'esprit que la vitesse des opérations pour FAT dépend de l'opération elle-même et de la taille du répertoire. Si FAT recherche un fichier inexistant, il parcourt tout le répertoire - une opération qui prend plus de temps que la recherche dans la structure basée sur l'arbre B utilisée par NTFS. Le temps moyen nécessaire pour retrouver un fichier est exprimé en fonction de N/2 en FAT, et en log N en NTFS, où N est le nombre de fichiers.

Les facteurs suivants affectent la vitesse à laquelle Windows 2000 peut lire et écrire des fichiers :

  • fragmentation des fichiers. Si le fichier est très fragmenté, NTFS nécessite généralement moins d'accès au disque que FAT pour trouver tous les fragments ;
  • Taille de cluster. Pour les deux systèmes de fichiers, la taille du cluster par défaut dépend de la taille du volume et est toujours exprimée comme une puissance de 2. Les adresses en FAT16 sont 16 bits, en FAT32 - 32 bits, en NTFS - 64 bits ;
  • La taille de cluster par défaut dans FAT est basée sur le fait que la table d'emplacement des fichiers peut avoir un maximum de 65 535 entrées - la taille du cluster est fonction de la taille du volume divisée par 65 535. Ainsi, la taille de cluster par défaut pour un volume FAT est toujours supérieur à la taille du cluster pour un volume NTFS de même taille. Notez que la taille de cluster plus grande pour les volumes FAT signifie que les volumes FAT peuvent être moins fragmentés ;
  • emplacement de petits fichiers. Lors de l'utilisation de NTFS, les petits fichiers sont contenus dans un enregistrement MFT. La taille du fichier qui tient dans un seul enregistrement MFT dépend du nombre d'attributs contenus dans ce fichier.

Taille maximale des volumes NTFS

En théorie, NTFS prend en charge des volumes comprenant jusqu'à 2 32 clusters. Mais néanmoins, en plus du manque de disques durs de cette taille, il existe d'autres restrictions sur la taille maximale du volume.

L'une de ces contraintes est la table de partition. Les normes industrielles limitent la taille d'une table de partition de 2 à 32 secteurs. Une autre limitation est la taille du secteur, qui est généralement de 512 octets. Étant donné que la taille du secteur peut changer à l'avenir, la taille actuelle limite la taille d'un seul volume à 2 To (2,32 x 512 octets = 2,41). Ainsi, 2 To est la limite pratique pour les volumes physiques et logiques NTFS.

Dans le tableau La figure 11 montre les principales limitations de NTFS.

Contrôler l'accès aux fichiers et répertoires

Lorsque vous utilisez des volumes NTFS, vous pouvez définir des droits d'accès aux fichiers et répertoires. Ces autorisations indiquent quels utilisateurs et groupes y ont accès et quel niveau d'accès est autorisé. Ces droits d'accès s'appliquent à la fois aux utilisateurs travaillant sur l'ordinateur sur lequel se trouvent les fichiers et aux utilisateurs accédant aux fichiers via le réseau lorsque le fichier se trouve dans un répertoire ouvert à l'accès à distance.

Sous NTFS, vous pouvez également définir des autorisations d'accès à distance, combinées à des autorisations de fichiers et de répertoires. De plus, les attributs du fichier (lecture seule, masqué, système) restreignent également l'accès au fichier.

Sous FAT16 et FAT32, il est également possible de définir des attributs de fichier, mais ils ne fournissent pas de droits d'accès aux fichiers.

La version de NTFS utilisée dans Windows 2000 a introduit un nouveau type d'autorisation d'accès : les autorisations héritées. L'onglet Sécurité contient l'option Autoriser les autorisations héritées du parent à se propager à cet objet fichier, qui est actif par défaut. Cette option réduit considérablement le temps nécessaire pour modifier les droits d'accès aux fichiers et sous-répertoires. Par exemple, pour modifier les droits d'accès à une arborescence contenant des centaines de sous-répertoires et de fichiers, activez simplement cette option - sous Windows NT 4, vous devez modifier les attributs de chaque fichier et sous-répertoire individuel.

En figue. La figure 5 montre le panneau de dialogue Propriétés et l'onglet Sécurité (section Avancé) - les droits d'accès étendus au fichier sont répertoriés.

Rappelons que pour les volumes FAT, vous ne pouvez contrôler l'accès qu'au niveau du volume et ce contrôle n'est possible qu'avec un accès à distance.

Compresser des fichiers et des répertoires

Windows 2000 prend en charge la compression des fichiers et répertoires situés sur des volumes NTFS. Les fichiers compressés peuvent être lus et écrits par n'importe quelle application Windows. Il n'est pas nécessaire de les pré-déballer pour cela. L'algorithme de compression utilisé est similaire à celui utilisé dans DoubleSpace (MS-DOS 6.0) et DriveSpace (MS-DOS 6.22), mais présente une différence significative : sous MS-DOS, la totalité de la partition principale ou du périphérique logique est compressée, alors que sous NTFS, vous peut empaqueter des fichiers et des répertoires individuels.

L'algorithme de compression NTFS est conçu pour prendre en charge des clusters d'une taille maximale de 4 Ko. Si la taille du cluster est supérieure à 4 Ko, les fonctionnalités de compression NTFS deviennent indisponibles.

NTFS auto-réparateur

Le système de fichiers NTFS a la capacité de s'auto-réparer et de maintenir son intégrité grâce à l'utilisation d'un journal des actions effectuées et d'un certain nombre d'autres mécanismes.

NTFS considère chaque opération modifiant les fichiers système sur les volumes NTFS comme une transaction et stocke les informations sur une telle transaction dans un journal. Une transaction démarrée peut être soit complètement terminée (commit), soit annulée (rollback). Dans ce dernier cas, le volume NTFS revient à l'état avant le début de la transaction. Pour gérer les transactions, NTFS écrit toutes les opérations incluses dans une transaction dans un fichier journal avant d'écrire sur le disque. Une fois la transaction terminée, toutes les opérations sont terminées. Ainsi, il ne peut y avoir aucune opération en attente sous contrôle NTFS. En cas de panne de disque, les opérations en attente sont simplement annulées.

NTFS effectue également des opérations qui lui permettent d'identifier à la volée les clusters défectueux et d'allouer de nouveaux clusters pour les opérations sur les fichiers. Ce mécanisme est appelé remappage de cluster.

Dans cette revue, nous avons examiné les différents systèmes de fichiers pris en charge par Microsoft Windows 2000, discuté de la conception de chacun d'eux et noté leurs avantages et leurs inconvénients. Le plus prometteur est le système de fichiers NTFS, qui possède un large éventail de fonctions qui ne sont pas disponibles dans d'autres systèmes de fichiers. La nouvelle version de NTFS, prise en charge par Microsoft Windows 2000, offre des fonctionnalités encore plus avancées et son utilisation est donc recommandée lors de l'installation du système d'exploitation Win 2000.

OrdinateurPress 7"2000

Avant l'avènement du système d'exploitation Microsoft Windows NT, les utilisateurs d'ordinateurs personnels avaient rarement le problème de choisir un système de fichiers. Tous les propriétaires de systèmes d'exploitation (OS) MS-DOS et Microsoft Windows utilisaient l'un des types de systèmes de fichiers appelés FAT (FAT-12, FAT-16 ou FAT-32).

Aujourd’hui, la situation a changé. Lors de l'installation de Microsoft Windows NT/2000/XP, lors du formatage du disque, vous devez choisir entre trois systèmes de fichiers : FAT-16, FAT-32 ou NTFS.

Dans cet article, nous parlerons de la structure interne des systèmes de fichiers répertoriés et considérerons leurs inconvénients et avantages inhérents. Fort de ces connaissances, vous pouvez faire un choix éclairé en faveur d'un système de fichiers particulier pour Microsoft Windows.

En bref sur le système de fichiers FAT

Le système de fichiers FAT est apparu à l'aube du développement des ordinateurs personnels et était initialement destiné au stockage de fichiers sur disquettes.

Les informations sont stockées sur des disques et des disquettes par portions, par secteurs de 512 octets. L'espace entier de la disquette était divisé en zones de longueur fixe appelées clusters. Un cluster peut contenir un ou plusieurs secteurs.

Chaque fichier occupe un ou plusieurs clusters, éventuellement non contigus. Les noms de fichiers et d'autres informations sur les fichiers, telles que la taille et la date de création, se trouvent dans la zone initiale de la disquette allouée au répertoire racine.

En plus du répertoire racine, d'autres répertoires peuvent être créés dans le système de fichiers FAT. Avec le répertoire racine, ils forment une arborescence de répertoires contenant des informations sur les fichiers et les répertoires. Quant à l'emplacement des clusters de fichiers sur le disque, ces informations sont stockées dans la zone initiale de la disquette, appelée Table d'allocation de fichiers (FAT).

Chaque cluster de la table FAT possède sa propre cellule individuelle, qui stocke des informations sur la façon dont ce cluster est utilisé. Ainsi, la table d'allocation de fichiers est un tableau contenant des informations sur les clusters. La taille de ce tableau est déterminée par le nombre total de clusters sur le disque.

Le répertoire stocke le numéro du premier cluster alloué à un fichier ou un sous-répertoire. Les numéros des clusters restants peuvent être trouvés à l'aide de la table d'allocation de fichiers FAT.

Lors du développement du format de table FAT, l'objectif était d'économiser de l'espace, car... La disquette a une très petite capacité (de 180 Ko à 2,44 Mo). Par conséquent, seuls 12 chiffres binaires ont été alloués pour stocker les numéros de cluster. En conséquence, la table FAT était si compacte qu'elle n'occupait qu'un seul secteur de la disquette.

La table FAT contient des informations critiques sur l'emplacement des répertoires et des fichiers. Si le FAT est corrompu en raison d'une panne matérielle, d'une panne logicielle ou d'un virus, l'accès aux fichiers et répertoires sera perdu. Par conséquent, par mesure de sécurité, deux copies de la table FAT sont généralement créées sur le disque.

Différentes versions de FAT

Après l'avènement des disques durs de grande capacité (à cette époque, les disques de 10 à 20 Mo étaient considérés comme grands), le nombre de clusters a augmenté et 12 bits sont devenus insuffisants pour stocker leurs numéros. Un nouveau format de table d'allocation de fichiers de 16 bits a été développé, dans lequel deux octets ont été alloués pour stocker le numéro d'un cluster. L'ancien système de fichiers conçu pour les disquettes est devenu connu sous le nom de FAT-12 et le nouveau sous le nom de FAT-16.

La table FAT-16 agrandie ne tient plus dans un seul secteur, mais avec de grandes tailles de disque, cet inconvénient n'a pas joué un rôle significatif. Comme auparavant, deux copies de la table FAT ont été stockées sur le disque à des fins d'assurance.

Cependant, lorsque l'espace disque a commencé à être mesuré en centaines de Mo, voire en gigaoctets, le système de fichiers FAT-16 est redevenu inefficace. Pour que les numéros de cluster tiennent sur 16 bits, lors du formatage de grands disques, il est nécessaire d'augmenter la taille du cluster à 16 Ko ou même plus. Cela posait des problèmes lorsqu'un grand nombre de petits fichiers devaient être stockés sur le disque. Étant donné que l'espace de stockage des fichiers est alloué en clusters, même un très petit fichier nécessite trop d'espace disque.

En conséquence, une autre tentative, apparemment finale, d'améliorer le système de fichiers FAT a été faite : la taille des cellules du tableau d'allocation de fichiers a été augmentée à 32. Cela a permis de formater des disques de centaines de Mo et de quelques Go en utilisant un format relativement petit. Taille de cluster. Le nouveau système de fichiers est devenu connu sous le nom de FAT-32.

Norme 8.3

Avant l'avènement de Microsoft Windows 95, les utilisateurs d'ordinateurs personnels étaient obligés d'utiliser la « norme 8.3 » très peu pratique pour nommer les fichiers, dans laquelle le nom du fichier devait être composé de 8 caractères plus 3 caractères d'extension. Cette limitation était imposée non seulement par l'interface du programme du système d'exploitation MS-DOS, mais également par la structure des entrées de répertoire du système de fichiers FAT.

Après avoir modifié la structure des entrées du répertoire, la limite du nombre de caractères dans un nom de fichier a été pratiquement supprimée. Le nom de fichier peut désormais contenir jusqu'à 255 caractères, ce qui est évidemment suffisant dans la plupart des cas. Cependant, un tel système de fichiers FAT modifié est devenu incompatible avec le système d'exploitation MS-DOS, ainsi qu'avec les versions 3.1 et 3.11 du shell Microsoft Windows exécutées dans son environnement.

Vous pouvez en savoir plus sur les formats des structures FAT internes dans notre article « Récupération de données dans les partitions FAT » publié sur ce site.

Limites du système de fichiers FAT

Lorsque vous décidez d'utiliser ou non le système de fichiers FAT pour formater un disque, vous devez être conscient de ses limites inhérentes. Ces restrictions concernent principalement la taille maximale d'un disque FAT, ainsi que la taille maximale d'un fichier situé sur ce disque.

La taille maximale d'un lecteur logique FAT-16 est de 4 Go, ce qui est très petit par rapport aux normes modernes. Microsoft ne recommande cependant pas de créer des disques FAT-16 de plus de 200 Mo, car... Dans ce cas, l’espace disque sera utilisé de manière très inefficace.

Théoriquement, la taille maximale d'un disque FAT-32 peut être de 8 To, ce qui devrait suffire pour déployer n'importe quelle application moderne. Cette valeur est obtenue en multipliant le nombre maximum de clusters (268 435 445) par la taille de cluster maximale autorisée par FAT-32 (32 Ko).

Toutefois, dans la pratique, la situation semble un peu différente.

En raison de limitations internes, l'utilitaire ScanDisk dans Microsoft OS 95/98 n'est pas en mesure de fonctionner avec des disques de plus de 127,53 Go. Il y a un an, une telle limitation n'aurait pas posé de problèmes, mais aujourd'hui, des disques bon marché de 160 Go sont déjà apparus sur le marché, et bientôt leur capacité sera encore plus grande.

Quant aux nouveaux systèmes d'exploitation Microsoft Windows 2000/XP, ils ne sont pas capables de créer des partitions FAT-32 d'une capacité supérieure à 32 Go. Si vous avez besoin de partitions de cette taille ou plus, Microsoft vous suggérera d'utiliser le système de fichiers NTFS.

Une autre limitation importante du FAT-32 est la taille du fichier : elle ne peut pas dépasser 4 Go. Cette limitation affectera, par exemple, lors de l'enregistrement de fragments vidéo sur disque ou lors de la création de fichiers de base de données volumineux.

Un répertoire FAT-32 peut stocker un maximum de 65 534 fichiers.

Inconvénients du FAT

En plus des limitations évoquées ci-dessus, le système de fichiers FAT présente également d'autres inconvénients. Le plus important, apparemment, est l'absence totale d'outils de contrôle d'accès, ainsi que la possibilité de perdre des informations sur l'emplacement de tous les fichiers après la destruction d'une table FAT assez compacte et de sa copie.

En démarrant l'ordinateur à partir de la disquette système, un attaquant peut facilement accéder à tous les fichiers stockés sur les disques avec le système de fichiers FAT. Il lui sera facile de copier ensuite ces fichiers sur un périphérique ZIP ou sur un autre support de stockage externe.

Lors de l'utilisation de FAT sur des disques de serveur, il est impossible d'assurer une délimitation fiable et flexible de l'accès des utilisateurs aux répertoires. C'est pourquoi, et également en raison de sa faible résistance aux pannes, FAT n'est généralement pas utilisé sur les serveurs.

La présence de tables compactes d'allocation de fichiers FAT fait de ce système de fichiers une cible vulnérable aux virus informatiques - il suffit de détruire le fragment initial d'un disque FAT et presque toutes les données seront perdues.

Système de fichiers NTFS

Le système de fichiers NTFS moderne, développé par Microsoft pour son système d'exploitation Microsoft Windows NT, est dépourvu des limitations et des inconvénients du FAT. Depuis sa création, le système de fichiers évolutif NTFS a subi plusieurs améliorations, dont les dernières (au moment de la rédaction de cet article) ont été apportées à Microsoft Windows XP.

Dans le système de fichiers NTFS, tous les attributs de fichier (nom, taille, emplacement des extensions de fichiers sur le disque, etc.) sont stockés dans un fichier système caché $MFT. De un à plusieurs Ko sont alloués pour stocker des informations sur chaque fichier (et répertoire) dans $MFT. Si un grand nombre de fichiers sont stockés sur le disque, la taille du fichier $MFT peut atteindre des dizaines, voire des centaines de Mo.

Les petits fichiers (de l'ordre de centaines d'octets) sont stockés directement dans $MFT, ce qui en accélère considérablement l'accès.

Notez cependant que la surcharge de NTFS pour le stockage des informations système, bien qu'elle dépasse la surcharge de FAT, n'est toujours pas très importante par rapport au volume des disques modernes. Étant donné que le fichier $MFT est généralement situé plus près du milieu du disque, la destruction des premières pistes d'un disque NTFS n'entraîne pas de conséquences aussi fatales que la destruction des zones initiales d'un disque FAT.

Le système de fichiers NTFS possède de nombreuses fonctionnalités que FAT ne possède pas. Ils permettent une flexibilité, une fiabilité et une sécurité bien supérieures à celles du FAT.

Énumérons quelques-unes des fonctionnalités les plus intéressantes de NTFS dans les versions modernes.

Outils de contrôle d'accès

Les outils de contrôle d'accès NTFS sont assez flexibles et vous permettent de contrôler l'accès au niveau de fichiers et de répertoires individuels, en accordant (ou en bloquant) l'accès à des utilisateurs individuels ou à des groupes d'utilisateurs.

Bien qu'à première vue, il puisse sembler que les outils de contrôle d'accès ne soient nécessaires que pour les serveurs de fichiers, ils seront également nécessaires si plusieurs utilisateurs ont accès à l'ordinateur.

Cryptage de fichiers

Les outils de contrôle d'accès mentionnés ci-dessus seront inutiles si le disque physique NTFS tombe entre les mains d'un attaquant. Grâce à des utilitaires modernes, le contenu d'un tel disque peut être lu sans trop de difficulté dans n'importe quel système d'exploitation - DOS, Microsoft Windows ou Linux.

Afin de protéger les fichiers utilisateur contre tout accès non autorisé, les systèmes d'exploitation Microsoft Windows 2000/XP fournissent un cryptage supplémentaire des fichiers stockés dans les partitions NTFS. Et même si la force d’un tel cryptage n’est pas trop élevée, elle est tout à fait suffisante dans la plupart des cas.

RAID de disque logiciel

En utilisant NTFS, vous pouvez créer ce que l'on appelle un logiciel RAID 1 (Mirrored set). Cette matrice, composée de deux disques physiques ou logiques de même taille, permet de dupliquer (ou, comme on dit aussi, de « mettre en miroir ») des fichiers.

Une telle matrice peut protéger vos fichiers en cas de panne physique de l'un des disques qui composent la matrice ; elle est donc souvent utilisée pour augmenter la fiabilité d'un système de disques.

Ensembles de volumes

Le système de fichiers NTFS permet de combiner plusieurs partitions situées sur un ou plusieurs disques physiques en un seul volume logique. Cela peut être nécessaire, par exemple, pour stocker des fichiers de base de données volumineux qui ne tiennent pas sur un seul disque physique, ou pour créer un répertoire avec un volume total de fichiers dépassant la taille du disque physique.

Les ensembles créés à partir de plusieurs partitions ou disques physiques sont appelés Ensemble de volumes (dans la terminologie du système d'exploitation Microsoft Windows NT) ou Volume fractionné (dans la terminologie du système d'exploitation Windows 2000/XP).

Emballage de fichiers

Pour économiser de l'espace disque, vous pouvez utiliser la capacité de NTFS à compresser (compresser) des fichiers. De plus, NTFS vous permet de créer des fichiers dits clairsemés contenant des zones de données nulles. De tels fichiers peuvent être volumineux, mais occupent peu d'espace disque, puisque seuls les octets significatifs du fichier sont réellement stockés.

Veuillez noter que l'empaquetage des fichiers ralentira un peu les choses. Toutefois, cette circonstance n’aura pas toujours d’importance. Par exemple, les documents bureautiques peuvent être compressés sans diminution notable de la vitesse de travail, mais on ne peut pas en dire autant des fichiers de bases de données auxquels un grand nombre d'utilisateurs accèdent simultanément. Avec la disponibilité sur le marché de disques relativement peu coûteux et de volume énorme, les produits d’emballage ne devraient être utilisés que lorsqu’ils sont vraiment nécessaires. Toutefois, cela s'applique également aux autres fonctionnalités NTFS.

Fichiers multithreads

Si nécessaire, plusieurs flux d'informations peuvent être stockés dans un seul fichier écrit sur un disque NTFS. Cela permet notamment de fournir des informations supplémentaires aux fichiers de documents, de stocker plusieurs versions de documents dans un seul fichier (par exemple, dans différentes langues), de stocker le code du programme et les données dans des flux séparés d'un même fichier, etc.

Connexions difficiles

Les liens physiques vous permettent d'attribuer plusieurs noms différents à un fichier physique en plaçant ces noms (c'est-à-dire des liens vers le fichier) dans différents répertoires. Lorsque vous supprimez un lien, le fichier lui-même n'est pas supprimé. Ce n'est que lorsque toutes les connexions d'un fichier sont détruites que le fichier lui-même est supprimé.

Notez que de telles capacités sont typiques des systèmes de fichiers utilisés dans les systèmes d'exploitation de type Unix, par exemple sous Linux, FreeBSD, etc.

Remplacer les points

Les objets du système NTFS tels que les points d'analyse vous permettent de redéfinir n'importe quel fichier ou répertoire. Dans ce cas, par exemple, des fichiers ou répertoires remplacés rarement utilisés peuvent en fait être stockés sur une bande magnétique, chargés sur le disque uniquement lorsque cela est nécessaire.

Transitions

À l'aide des sauts NTFS, vous pouvez monter un autre disque dur ou un autre CD dans un répertoire de disque. Cette fonctionnalité existait à l'origine dans les systèmes de fichiers des systèmes d'exploitation de type Unix.

Quotas d'espace disque

Le système de fichiers NTFS, utilisé dans Microsoft Windows 2000/XP, vous permet de quotar ou de limiter l'espace disque disponible pour les utilisateurs. Cette fonctionnalité est particulièrement utile lors de la création de serveurs de fichiers.

Journalisation des modifications

Lors de son fonctionnement, le système d'exploitation effectue diverses actions sur les fichiers (création, modification, suppression). Toutes ces modifications sont enregistrées dans un journal spécial créé sur le volume NTFS et peuvent être utilisées par des programmes de sauvegarde, des systèmes d'indexation, etc. La journalisation des modifications augmente la fiabilité du système de fichiers, permettant dans certains cas de poursuivre le fonctionnement après des pannes non critiques du système d'exploitation et du matériel. Bien entendu, les échecs les plus graves entraînent la nécessité de restaurer les données à partir d'une copie de sauvegarde ou d'utiliser des utilitaires spéciaux de récupération de données.

Limites NTFS

Malgré l'abondance de possibilités, le système de fichiers NTFS présente également certaines limites. Cependant, dans la plupart des cas, ils ne jouent pas un rôle significatif.

La taille maximale d'un disque logique NTFS est d'environ 18 446 744 To, ce qui est évidemment suffisant pour toutes les applications modernes ainsi que pour les applications qui apparaîtront dans un avenir proche. La taille maximale du fichier est encore plus grande, cette limitation est donc également insignifiante.

Le nombre de fichiers stockés dans un répertoire NTFS est illimité, ce qui présente également un avantage par rapport à FAT.

Comparaison de NTFS et FAT en termes de vitesse d'accès aux fichiers

En termes de promesses, de fonctionnalités, de sécurité et de fiabilité, NTFS est bien en avance sur FAT. Cependant, comparer les performances de ces systèmes de fichiers ne donne pas de résultat clair, car les performances dépendent de nombreux facteurs différents.

Étant donné que les principes de fonctionnement et les structures internes de FAT sont beaucoup plus simples que ceux de NTFS, FAT sera probablement plus rapide lorsque vous travaillez avec de petits répertoires. Cependant, si le contenu du répertoire est si petit qu'il tient entièrement dans une ou plusieurs entrées du fichier $MFT, ou inversement, si le répertoire est très volumineux, NTFS l'emportera.

NTFS sera très probablement en tête lors de la recherche de fichiers ou de répertoires inexistants (puisqu'il ne nécessite pas que l'intégralité du contenu du répertoire soit analysé), lors de l'accès à de petits fichiers (de l'ordre de centaines d'octets), et également dans en cas de fragmentation grave du disque.

Pour augmenter les performances NTFS, vous pouvez augmenter la taille du cluster, mais cela peut entraîner une utilisation inutile de l'espace disque lors du stockage d'un grand nombre de fichiers dont la taille dépasse 1 à 2 Ko et s'élève à des dizaines de Ko. En augmentant la taille du cluster à 64 Ko, vous pouvez obtenir une amélioration maximale des performances, mais vous devrez arrêter de compresser les fichiers et d'utiliser les utilitaires de défragmentation.

Lors de la compression de fichiers situés sur de petits disques (environ 4 Go), les performances peuvent augmenter, mais lors de la compression de grands disques, les performances peuvent diminuer. Dans tous les cas, le packaging entraînera une charge supplémentaire sur le processeur central.

Alors que choisir : FAT ou NTFS ?

Comme vous pouvez le constater, NTFS présente de nombreux avantages par rapport à FAT et ses limites sont dans la plupart des cas insignifiantes. Si vous devez choisir un système de fichiers, envisagez d'utiliser NTFS d'abord, puis FAT seulement.

Quels pourraient être les obstacles qui rendent difficile le remplacement de FAT par NTFS ?

L'obstacle le plus sérieux est la nécessité d'utiliser Microsoft Windows NT/2000/XP. Pour le fonctionnement normal de ce système d'exploitation, au moins 64 Mo de RAM et un processeur avec une fréquence d'horloge d'au moins 200-300 MHz sont requis. Cependant, ces exigences ne sont pas uniquement remplies par les très anciens ordinateurs qui ne sont pas capables d'exécuter les versions modernes de Microsoft Windows.

Si votre ordinateur peut fonctionner dans l'environnement Microsoft Windows 2000/XP et que vous ne disposez pas d'une seule application conçue exclusivement pour Microsoft Windows 95/98/ME, nous vous recommandons de passer à un nouveau système d'exploitation dès que possible, en remplaçant ce est FAT sur NTFS.

Dans le même temps, vous bénéficierez également d'une augmentation notable de la fiabilité opérationnelle, car Après avoir installé tous les service packs nécessaires, ainsi que les versions correctes des pilotes de périphériques, Microsoft Windows 2000/XP fonctionnera de manière très stable.

Dans certains cas, il est nécessaire de combiner plusieurs systèmes de fichiers au sein d'un même disque physique. Par exemple, si trois systèmes d'exploitation sont installés sur votre ordinateur : Microsoft Windows ME, Microsoft Windows XP et Linux, vous pouvez créer trois systèmes de fichiers : FAT, NTFS et Ext2FS. Le premier d'entre eux sera « visible » lorsque vous travaillerez sous Microsoft Windows ME et Linux, le deuxième - uniquement sous Microsoft Windows XP et le troisième - uniquement sous Linux (notez que sous LINUX OS, il est également possible d'accéder aux partitions NTFS).

Mais si vous créez un serveur (fichier, base de données ou Web) basé sur Microsoft Windows NT/2000/XP, alors NTFS est le seul choix raisonnable. Ce n'est que dans ce cas qu'il sera possible d'atteindre la stabilité, la fiabilité et la sécurité nécessaires du serveur.

Il existe également une opinion généralement acceptée (et à notre avis erronée) selon laquelle les utilisateurs d'ordinateurs personnels n'ont besoin ni du système d'exploitation Microsoft Windows NT/2000/XP, ni du système de fichiers NTFS.

Bien entendu, si l'ordinateur est utilisé exclusivement pour les jeux, pour des raisons de compatibilité, il est préférable d'installer Microsoft Windows 98/ME et de formater les disques en FAT. Cependant, si vous travaillez non seulement au bureau, mais aussi à la maison, il est préférable d'utiliser des solutions modernes, professionnelles et fiables. Cela permettra notamment d'organiser la protection contre les intrusions sur votre ordinateur via Internet, de limiter l'accès aux répertoires et fichiers contenant des données critiques, et également d'augmenter les chances de réussite de la récupération des informations en cas de pannes de divers types.

VLADIMIR MECHKOV

Architecture du système de fichiers FAT

Caractéristiques générales du système de fichiers FAT. Structure de partition avec le système de fichiers FAT

Le système de fichiers FAT (File Allocation Table) a été développé par Bill Gates et Mark McDonald en 1977 et était à l'origine utilisé dans le système d'exploitation 86-DOS. Pour assurer la portabilité des programmes du système d'exploitation CP/M vers 86-DOS, les restrictions précédemment acceptées sur les noms de fichiers ont été conservées. 86-DOS a ensuite été acquis par Microsoft et est devenu la base de MS-DOS 1.0, sorti en août 1981. FAT a été conçu pour fonctionner avec des disquettes inférieures à 1 Mo et ne prenait pas initialement en charge les disques durs.

La structure de la partition FAT est illustrée dans la figure.

Dans le système de fichiers FAT, l'espace disque d'une partition logique est divisé en deux zones : la zone système et la zone de données (voir Fig. 1). La zone système est créée et initialisée lors du formatage, puis mise à jour lorsque la structure du fichier est manipulée. La zone système des systèmes de fichiers FAT comprend les composants suivants :

  • enregistrement de démarrage (BR);
  • zone de réserve;
  • tables d'allocation de fichiers ;
  • zone du répertoire racine (n'existe pas en FAT32).

La zone de données d'un disque logique contient des fichiers et des répertoires subordonnés à la racine et est divisée en sections de même taille - des clusters. Un cluster peut être constitué d'un ou plusieurs secteurs situés séquentiellement sur un disque. Le nombre de secteurs dans un cluster doit être un multiple de 2N et peut prendre des valeurs de 1 à 64. La taille du cluster dépend du type de système de fichiers utilisé et de la taille du disque logique.

Objectif, structure et types de tableau d'allocation de fichiers

FAT tire son nom de la table d'allocation de fichiers du même nom – File Allocation Table, FAT. La table d'allocation de fichiers stocke des informations sur les clusters d'un disque logique. Chaque cluster possède un élément de table FAT correspondant contenant des informations indiquant si le cluster est libre ou occupé par des données de fichier. Si le cluster est occupé par un fichier, alors l'adresse du cluster contenant la partie suivante du fichier est indiquée dans l'élément correspondant de la table d'allocation des fichiers. Le numéro du cluster initial occupé par un fichier est stocké dans l'entrée du répertoire contenant l'entrée du fichier. Le dernier élément de la liste des clusters contient le signe de fin de fichier (EOF – End Of File). Les deux premiers éléments FAT sont réservés.

Le système de fichiers FAT remplit toujours l'espace disque libre de manière séquentielle du début à la fin. Lors de la création d'un nouveau fichier ou de l'augmentation d'un fichier existant, il recherche le tout premier cluster libre dans la table d'allocation de fichiers. Si pendant le fonctionnement, certains fichiers ont été supprimés et d'autres ont été modifiés en taille, les clusters vides résultants seront dispersés sur le disque. Si les clusters contenant les données du fichier ne sont pas alignés, le fichier devient fragmenté.

Il existe les types de FAT suivants : FAT12, FAT16, FAT32. Les noms des types FAT sont dérivés de la taille de l'élément : l'élément FAT12 a une taille de 12 bits (1,5 octets), FAT16 - 16 bits (2 octets), FAT32 - 32 bits (4 octets). Dans FAT32, les quatre bits les plus significatifs sont réservés et ignorés lors du fonctionnement du système d'exploitation.

Répertoire racine

Les tables d'allocation de fichiers sont suivies du répertoire racine. Chaque fichier et sous-répertoire du répertoire racine possède une entrée de répertoire de 32 octets contenant le nom du fichier, ses attributs (archivés, masqués, système et en lecture seule), ainsi que la date et l'heure de sa création (ou de sa dernière modification), comme ainsi que d'autres informations. Pour les systèmes de fichiers FAT12 et FAT16, la position du répertoire racine sur la partition et sa taille sont strictement fixées. En FAT32, le répertoire racine peut être situé n'importe où dans la zone de données de la partition et peut être de n'importe quelle taille.

Formats de nom de fichier

L'une des caractéristiques des versions antérieures de FAT (FAT12 et FAT16) est l'utilisation de noms de fichiers courts. Le nom court se compose de deux champs : un champ de 8 octets contenant le nom réel du fichier et un champ de 3 octets contenant l'extension (format "8.3"). Si le nom de fichier saisi par l'utilisateur comporte moins de 8 caractères, il est alors complété par des espaces (code 0x20) ; si l'extension saisie est inférieure à trois octets, elle est également complétée par des espaces.

La structure des éléments de répertoire pour un nom de fichier court est présentée dans le tableau 1.

Le premier octet du nom court sert d'indicateur d'annuaire occupé :

  • si le premier octet est 0xE5, alors l'entrée du répertoire est libre et peut être utilisée lors de la création d'un nouveau fichier ;
  • si le premier octet est 0x00, alors l'entrée du répertoire est libre et constitue le début d'une zone de répertoire propre (il n'y a aucune entrée activée après).

Tableau 1. Structure des éléments de répertoire pour un nom de fichier court

Biais

Taille (octets) Contenu
0x00 11 Nom de fichier court
0x0B 1 Attributs du fichier
0x0C 1 Réservé à Windows NT.
0x0D 1 Un champ spécifiant l'heure de création du fichier (contient des dizaines de millisecondes). Le champ est traité uniquement en FAT32
0x0E 1 Heure de création du fichier. Le champ est traité uniquement en FAT32
0x10 2 Date de création du fichier. Le champ est traité uniquement en FAT32
0x12 2 Date du dernier accès au fichier pour écrire ou lire des données. Le champ est traité uniquement en FAT32
0x14 2 Mot le plus significatif du premier numéro de cluster du fichier. Le champ est traité uniquement en FAT32
0x16 2 Heure de la dernière opération d'écriture dans le fichier
0x18 2 Date de la dernière opération d'écriture dans le fichier
0x1A 2 Mot faible du premier numéro de cluster du fichier
0x1C 4 Taille du fichier en octets

Il existe un certain nombre de restrictions sur l'utilisation de caractères ASCII dans un nom court :

  • vous ne pouvez pas utiliser de caractères avec des codes inférieurs à 0x20 (sauf le code 0x05 dans le premier octet du nom court) ;
  • vous ne pouvez pas utiliser de caractères avec les codes 0x22, 0x2A, 0x2B, 0x2C, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x5B, 0x5C, 0x5D, 0x7C ;
  • Vous ne pouvez pas utiliser de caractère espace (0x20) dans le premier octet du nom.

Les systèmes de fichiers FAT32 et VFAT (virtual FAT, extension FAT16) incluent la prise en charge des noms de fichiers longs (LFN). Pour stocker un nom long, des éléments de répertoire adjacents à l'élément principal sont utilisés. Le nom du fichier n'est pas écrit en caractères ASCII, mais en Unicode. Vous pouvez stocker un fragment de 13 caractères Unicode maximum dans une entrée de répertoire. La partie inutilisée du dernier fragment est remplie de codes 0xFFFF. La structure des éléments de répertoire pour un nom de fichier long est présentée dans le tableau 2.

Tableau 2. Structure des éléments de répertoire pour un nom de fichier long

Biais Taille (octets) Contenu
0x00 1 Numéro de fragment
0x01 10 Caractères 1 à 5 du nom de fichier en Unicode
0x0B 1 Attributs du fichier
0x0C 1 Octet de drapeaux
0x0D 1 Somme de contrôle du nom court
0x0E 12 Caractères 6 à 11 du nom de fichier en Unicode
0x1A 2 Numéro du premier cluster (rempli de zéros)
0x1C 4 Caractères 12-13 du nom de fichier en Unicode

Secteur de démarrage

Le premier secteur d'un disque logique avec un système FAT contient le secteur de démarrage et un bloc de paramètres BIOS. La section initiale de ce bloc est identique pour tous les types de FAT (Tableau 3). Les différences dans la structure des secteurs de démarrage pour différents types de FAT commencent au décalage 0x24. Pour FAT12 et FAT16, la structure est présentée dans le tableau 4, pour FAT32 - dans le tableau 5.

Tableau 3. Section initiale du secteur de démarrage

Biais Taille, octets Description
0x00 3 Saut inconditionnel (jmp) vers le code de démarrage
0x03 8 Identifiant du fabricant
0x0B 2 Nombre d'octets dans le secteur (512)
0x0D 1 Nombre de secteurs dans un cluster
0x0E 2 Nombre de secteurs de rechange dans la zone de réserve de la partition, à partir du premier secteur de la partition
0x10 1 Nombre de tables (copies) FAT
0x11 2 Pour FAT12/FAT16 - nombre de descripteurs de fichiers de 32 octets dans le répertoire racine ; pour FAT32 ce champ a la valeur 0
0x13 2 Nombre total de secteurs dans la partition ; si ce champ contient 0, alors le nombre de secteurs est précisé par le champ au décalage 0x20
0x15 1 Type de support. Pour un disque dur, la valeur est 0xF8 ; pour une disquette (2 faces, 18 secteurs par piste) – 0xF0
0x16 2 Pour FAT12/FAT16 ce champ contient le nombre de secteurs occupé par une copie de FAT ; pour FAT32 ce champ a la valeur 0
0x18 2 Nombre de secteurs par piste (pour interruption 0x13)
0x1A 2 Nombre de surfaces de travail (pour interruption 0x13)
0x1C 4 Nombre de secteurs cachés avant partition
0x20 4 Le nombre total de secteurs dans la partition. Le champ est utilisé si la section sur 65535 secteurs, sinon le champ contient 0.

Tableau 4. Structure du secteur de démarrage FAT12/FAT16

Biais Taille, octet Description 0x24 1 Numéro de lecteur pour l'interruption 0x13 0x25 1 0x26 1 Indicateur d'enregistrement de démarrage étendu (0x29) 0x27 4 Numéro de lecteur logique 0x2B 11 Étiquette du disque 0x36 8 Chaîne de texte avec l'abréviation du type de système de fichiers

Tableau 5. Structure du secteur de démarrage FAT32

Taille, octet Description 4 Nombre de secteurs occupés par une copie de FAT 2 Numéro FAT actif 2 Numéro de version FAT32 : octet de poids fort - numéro de version,junior – numéro de révision. Actuellement, la valeur est 0:0 4 Numéro de cluster pour le premier cluster du répertoire racine 2 Numéro de secteur de la structure FSINFO dans la zone de réserve du disque logique 2 Numéro de secteur (dans la zone de réserve du disque logique) utilisépour stocker une copie de sauvegarde du secteur de démarrage 12 Réservé (contient 0)

Biais
0x24
0x28
0x2A
0x2С
0x30
0x32
0x34

En plus des 2ème et 3ème champs répertoriés dans les tableaux, le secteur zéro du disque logique doit contenir le code 0x55 dans l'octet au décalage 0x1FE, et le code 0xAA dans l'octet suivant (offset 0x1FF). Les deux octets indiqués sont un signe du disque de démarrage.

Ainsi, le secteur de démarrage remplit deux fonctions importantes : il décrit la structure des données sur le disque, et permet également de démarrer le système d'exploitation.

Un disque logique avec une organisation FAT32 contient en outre une structure FSInfo située dans le premier secteur de la zone de réserve. Cette structure contient des informations sur le nombre de clusters libres sur le disque et le numéro du premier cluster libre dans la table FAT. Le format de la structure est décrit dans le tableau 6.

Tableau 6. Structure du secteur FSInfo et du secteur de démarrage de sauvegarde FAT32

Taille, octet Description 4 La valeur 0x41615252 est une signature qui indique que ce secteur contient la structure FSInfo 480 Réservé (contient 0) 4 Valeur 0x61417272 (signature) 4 Contient le nombre actuel de clusters libres sur le disque. Si le champ contient la valeur 0xFFFFFFFF, alors le nombre de clusters libres est inconnu et doit être calculé 4 Contient le numéro de cluster à partir duquel le pilote de disque doit commencer à rechercher des clusters libres. Si le champ contient la valeur 0xFFFFFFFF, alors la recherche de clusters libres doit commencer par le cluster numéro 2 12 Réservé (contient 0) 4 Signature 0xAA550000 – signe de la fin de la structure FSInfo

Biais
0x000
0x004
0x1E4
0x1E8
0x1EC
0x1F0
0x1FC

Pour accéder au contenu d'un fichier situé sur une partition avec le système de fichiers FAT, vous devez obtenir le numéro du premier cluster du fichier. Ce numéro, comme nous l'avons déjà établi, fait partie de l'entrée du répertoire contenant l'entrée du fichier. Le premier numéro de cluster correspond à l'élément de table FAT, qui stocke l'adresse du cluster contenant la partie suivante du fichier. L'élément FAT correspondant au dernier cluster de la chaîne contient la signature de fin de fichier. Pour FAT12, cette valeur est 0xFFF, pour FAT16 – 0xFFFF, pour FAT32 – 0xFFFFFFFF.

Examinons l'implémentation logicielle de l'algorithme de lecture pour chaque type de FAT, et commençons par FAT16.

Tous les textes sources discutés dans l'article sont disponibles sur le site Web de la revue.

Implémentation logicielle de l'algorithme de lecture d'un fichier depuis une partition logique avec le système de fichiers FAT16

Développons un module qui lit les N premiers clusters d'un fichier créé sur une partition avec le système de fichiers FAT16. Le paramètre N (nombre de clusters à lire) est une valeur variable et est précisée par l'utilisateur. Le nom du fichier correspond au format « 8.3 », c'est-à-dire c'est court. Le module fonctionne sous Linux OS.

Définissons les fichiers d'en-tête nécessaires :

#inclure

#inclure

#inclure

#inclure

#inclure

#include "split.h"

Le fichier d'en-tête split.h a le contenu suivant :

#inclure

#define SHORT_NAME 13 // longueur maximale d'un nom de fichier court

struct nom_split(

Nom U8 ; // nom de fichier

poste U8; // extension de fichier

Int name_len, // longueur du nom de fichier

Ext_len; // longueur de l'extension du fichier

La structure split_name est conçue pour stocker les composants d'un nom de fichier court (nom et extension) et leurs longueurs.

Le fichier d'en-tête définit les types structurels qui décrivent les principaux composants du système de fichiers FAT - le secteur de démarrage, le secteur FSInfo, les structures d'éléments de répertoire pour les noms de fichiers courts et longs.

Considérons brièvement les domaines inclus dans chacune de ces structures.

    1. Structure du secteur de démarrage struct fat_boot_sector :
      • __s8 identifiant_système– identifiant du système ;
      • __u8 sector_size – taille du secteur en octets ;
      • __u8 taille_cluster– la taille des clusters dans les secteurs ;
      • __u16 réservé– le nombre de secteurs de réserve dans la zone de réserve de la partition ;
      • __u8 graisses– nombre de copies FAT ;
      • __u8 répertoire_entrées– le nombre de descripteurs de fichiers de 32 octets dans le répertoire racine ;
      • __u8 secteurs– nombre de secteurs sur la partition ; si ce champ vaut 0, le champ total_sect est utilisé ;
      • __u8 médias– type de support sur lequel le système de fichiers a été créé ;
      • __u16 fat_length– Taille du FAT dans les secteurs ;
      • __u32 total_sect– taille de la partition FAT en secteurs (si le champ secteurs == 0).
      • __u32 fat32_length– Taille FAT32 en secteurs ;
      • __u32 root_cluster– numéro du premier cluster du répertoire racine ;
      • __u16 info_secteur– numéro du secteur contenant la structure FSInfo.

Les champs suivants de cette structure sont utilisés uniquement par FAT32 :

  1. Structure du secteur FSInfo struct fat_boot_fsinfo :
    • __u32 signature1– signature 0x41615252 ;
    • __u32 signature2– signature 0x61417272 ;
    • __u32 clusters_gratuits– nombre de clusters libres. Si le champ contient -1, la recherche des clusters libres doit commencer par le cluster numéro 2.
  2. Structure de structure d'élément de répertoire de nom court msdos_dir_entry :
    • Nom __s8, poste– nom et extension du fichier ;
    • __u8 attr– les attributs du fichier ;
    • __u8 ctime_ms– ce champ précise le temps de création du fichier en ms (seul FAT32 est utilisé) ;
    • __u16 heure– heure de création du fichier (seul FAT32 est utilisé) ;
    • __u16 date– date de création du fichier (seul FAT32 est utilisé) ;
    • __u16 date– date du dernier accès au fichier (seul FAT32 est utilisé) ;
    • __u16 starthi– les 16 bits de poids fort du premier numéro de cluster du fichier (seul FAT32 est utilisé) ;
    • __u16 heure, date, début– heure et date de création du fichier, numéro du premier cluster du fichier ;
    • __u32 taille– taille du fichier (en octets).
  3. Structure des éléments de répertoire de noms longs :
    • __u8 identifiant– numéro d'élément;
    • __u8 nom0_4– les caractères 1 à 5 du nom ;
    • __u8 attr– les attributs du fichier ;
    • __u8 alias_checksum– somme de contrôle du nom court ;
    • __u8 nom5_10– les symboles 6 à 11 du nom ;
    • __u8 nom11_12– les symboles 12 – 13 du nom.

Continuons à considérer l'implémentation logicielle de l'algorithme et déterminons le nom de la partition sur laquelle le système de fichiers FAT16 a été créé :

#ifndef FAT16_PART_NAME

#define FAT16_PART_NAME "/dev/hda1"

#fin si

Structures mondiales :

struct fat_boot_sector fbs; // structure du secteur de démarrage

struct msdos_dir_entry dentry ; // structure des éléments de répertoire

Variables globales:

U16 *gros16 ; // copie la table FAT16 ici

Taille_secteur U16 ; // taille du secteur (à partir de FAT16)

U16 répertoire_entrées ; // nombre de descripteurs de 32 octets

// dans le répertoire racine (0 pour FAT32)

Secteurs U16 ; // nombre total de secteurs dans la partition

U32 fat16_size; // Taille FAT16

U32 taille_racine ; // taille du répertoire racine

U16 octet_per_cluster ; // taille du cluster en octets

U16 next_cluster ; // cluster suivant dans la chaîne

entier gras;

Commençons par la fonction principale :

int main()

Numéro int ;

Nous spécifions le nom complet du fichier dont nous voulons lire le contenu. Je vous rappelle que nous travaillons uniquement avec des noms de fichiers courts. La procédure à suivre pour travailler avec des noms longs n'est pas abordée dans cet article.

U8 *full_path = "/Dossier1/Dossier2/text.txt";

Ouvrez le fichier de l'appareil :

Difficile = ouvert (FAT16_PART_NAME, O_RDONLY);

Si (dur< 0) {

Erreur(FAT16_PART_NAME);

Sortie(-1);

Nous lisons les 10 premiers clusters du fichier. La lecture est effectuée par la fonction fat16_read_file(). Les paramètres de la fonction sont le nom complet du fichier et le nombre de clusters à lire. La fonction renvoie le nombre de clusters lus ou -1 si une erreur s'est produite lors de la lecture :

Num = fat16_read_file(full_path, 10);

Si (numéro< 0) perror("fat16_read_file");

Sinon printf("Lire %d clusters ", num);

Fermez le fichier de périphérique et quittez :

Fermer (dur);

Renvoie 0 ;

La fonction de lecture des clusters de fichiers a la forme suivante :

int fat16_read_file(__u8 *full_path, int num)

Structure split_name sn ; // structure pour stocker les composants du fichier

U8 tmp_name_buff; // tampon pour le stockage temporaire des composants du chemin complet du fichier

Int statique i = 1 ;

Int n;

U8 *tmp_buff;

U16 start_cluster, next_cluster ;

Nous avons répertorié les paramètres de la fonction en considérant la fonction principale.

Opérations préparatoires - réinitialiser le tampon tmp_name_buff et la structure sn struct split_name :

Le premier caractère du chemin d'accès absolu d'un fichier doit être une barre oblique (/). Vérifions ceci :

Lisez le secteur de démarrage de la partition :

Si(read_fbs()< 0) return -1;

Le secteur de démarrage en lecture se trouve désormais dans la structure globale struct fat_boot_sector fbs. Copions la taille du secteur, le nombre d'entrées dans le répertoire racine et le nombre total de secteurs sur la partition à partir de cette structure :

Déterminons la taille du cluster en octets :

Byte_per_cluster = fbs.cluster_size * 512

Affichons les informations situées dans le secteur de démarrage :

Printf("ID système - %s ", fbs.system_id);

Printf("Taille du secteur - %d ", sector_size);

Printf("Taille du cluster - %d ", fbs.cluster_size);

Printf("Réservé - %d ", fbs.réservé);

Printf("Numéro de FAT - %d ",fbs.fats);

Printf("Entrées du répertoire - %d ", dir_entries);

Printf("Secteurs - %d ", secteurs);

Printf("Médias - 0x%X ", fbs.media);

Printf("Longueur FAT16 - %u ", fbs.fat_length);

Printf("Secte totale - %u ", fbs.total_sect);

Printf("Octet par cluster - %d ", byte_per_cluster);

Nous calculons la taille de FAT16 en octets et la lisons :

Fat16_size = fbs.fat_length * 512 ;

Si(read_fat16()< 0) return -1;

Lecture du répertoire racine :

Si(read_root_dentry()< 0) return -1;

Le pointeur dir_entry est maintenant positionné à l'emplacement mémoire contenant les entrées du répertoire racine. La taille de cette zone mémoire est égale à la taille du répertoire racine (root_size).

Sauvegardons (pour contrôle) le contenu du répertoire racine dans un fichier séparé :

#ifdef DÉBOGAGE

Fermer(gros);

#fin si

Nous calculons le début de la zone de données :

Data_start = 512 * fbs.reserved + fat16_size * fbs.fats + root_size ;

Ayant toutes les entrées dans le répertoire racine, nous pouvons accéder au contenu du fichier test.txt. A cet effet, nous organisons un cycle. Dans le corps de la boucle, nous analyserons le nom complet du fichier, en mettant en évidence ses éléments - les sous-répertoires (nous en avons deux, Folder1 et Folder2) et le nom du fichier que nous recherchons (test.txt).

Tandis que(1) (

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

Pour(n = 0 ; n< SHORT_NAME; n++, i++) {

Si((tmp_name_buff[n] == "/") || (tmp_name_buff[n] == "?")) (

je++;

Casser;

Tmp_name_buff[n] = "?";

Nous remplissons la structure sn struct split_name avec les informations appropriées. La fonction split_name effectue le remplissage et vérifie la conformité du nom du fichier au format « 8.3 » :

< 0) {

Printf("nom non valide");

Renvoie -1 ;

Pour chaque élément du nom complet du fichier, nous définissons un cluster initial. Pour ce faire, nous recherchons dans les éléments du répertoire (en commençant par la racine) une entrée correspondant à l'élément de nom complet, et lisons cette entrée. La procédure de recherche est effectuée par la fonction get_dentry() :

Si(get_dentry(&sn)< 0) {

Printf("Aucun fichier de ce type!");

Renvoie -1 ;

Vérification des attributs du fichier. S'il s'agit d'un répertoire, lisez son contenu et continuez la boucle :

Si(dentry.attr & 0x10) (

Si (read_directory (dentry.start)< 0) return -1;

Continuer;

S'il s'agit d'un fichier, nous lisons les premiers num clusters. Pour contrôle, nous enregistrerons les informations lues dans un fichier séparé :

Si(dentry.attr & 0x20) (

Start_cluster = dentaire.start;

Tmp_buff = (__u8 *)malloc(byte_per_cluster); // le contenu du cluster sera lu ici

N = open("clust", O_CREAT|O_RDWR, 0600); // enregistre les informations lues dans ce fichier

Si(n< 0) {

Perror("ouvrir");

Renvoie -1 ;

Pour lire des clusters de fichiers, on organise une boucle :

Pour (i = 0; je< num; i++) {

Nous lisons le contenu du cluster dans le tampon tmp_buff et le sauvegardons dans un fichier séparé :

< 0) return -1;

< 0) {

Perror("écrire");

Fermer(n);

Renvoie -1 ;

Nous lisons dans FAT16 le numéro du prochain cluster occupé par ce fichier. Si c'est le dernier cluster, on interrompt la boucle et retournons à la fonction principale :

#ifdef DÉBOGAGE

Printf("OK. Lu ");

Printf("prochain cluster du fichier - 0x%X .. ", next_cluster);

#fin si

Si(next_cluster == EOF_FAT16) (

#ifdef DÉBOGAGE

Printf("dernier cluster.");

#fin si

Gratuit(tmp_buff);

Fermer(n);

Renvoie ++i;

#ifdef DÉBOGAGE

Printf("arrêter la lecture ");

#fin si

Renvoyez-moi ;

La lecture du secteur de démarrage FAT16 est effectuée par la fonction read_fbs(). Le résultat est placé dans la structure globale fbs :

int read_fbs()

Si(lire(dur,(__u8 *)&fbs, taillede(fbs))< 0) return -1;

Renvoie 0 ;

La lecture de la table d'allocation de fichiers du système de fichiers FAT16 est effectuée par la fonction read_fat16() :

int read_fat16()

Recherche U64 = (__u64)(fbs.reserved) * 512 ; // décalage vers FAT16 depuis le début de la partition

Fat16 = (void *)malloc(fat16_size);

Si(pread64(dur, (__u8 *)fat16, fat16_size, chercher)< 0) return -1;

Renvoie 0 ;

La fonction read_root_dentry() lit le répertoire racine :

int read_root_dentry()

Recherche U64 = (__u64)fbs.reserved * 512 + fat16_size * fbs.fats; // décalage vers le répertoire racine depuis le début de la partition

Root_size = 32 * dir_entries ; // calcule la taille du répertoire racine

Dir_entry = (__u8 *)malloc(root_size);

If(!dir_entry) renvoie -1 ;

Memset(dir_entry, 0, root_size);

Si (pread64 (dur, dir_entry, root_size, seek)< 0) return -1;

Renvoie 0 ;

La lecture d'un cluster appartenant à un fichier est effectuée par la fonction read_cluster(). Les paramètres d'entrée de la fonction sont le numéro de cluster cluster_num et un pointeur vers le tampon __u8 *tmp_buff, où le résultat de la lecture doit être placé. Le décalage par rapport au cluster sur la partition est calculé à l'aide de la formule (voir) :

SEEK = DATA_START + (CLUSTER_NUM - 2) * BYTE_PER_CLUSTER,

  • CHERCHER– décalage par rapport au cluster sur la partition
  • DATA_START– début de la zone de données
  • CLUSTER_NUM– numéro de série du cluster
  • BYTE_PER_CLUSTER– taille du cluster en octets

int read_cluster(__u16 cluster_num, __u8 *tmp_buff)

Recherche U64 = (__u64)(byte_per_cluster) * (cluster_num - 2) + data_start ; // calcule le décalage par rapport au cluster

< 0) return -1;

Renvoie 0 ;

La fonction read_directory lit les entrées d'un répertoire (pas du répertoire racine) et place le résultat dans l'emplacement mémoire sur lequel le pointeur dir_entry est défini :

int read_directory(__u16 start_cluster)

Int je = 1 ;

U16 next_cluster ;

Pour(; ;i++) (

Nous allouons de la mémoire pour stocker le contenu du répertoire, lisons le contenu du cluster de départ et obtenons la valeur du cluster suivant à partir de la table FAT16 :

If(!dir_entry) renvoie -1 ;

< 0) return -1;

Next_cluster = fat16 ;

Sauvegardons le contenu du répertoire dans un fichier séparé (pour contrôle) :

#ifdef DÉBOGAGE

Printf("Cluster suivant - 0x%X ", next_cluster);

Fat = open("dir16", O_CREAT|O_WRONLY, 0600);

Write(fat, dir_entry, root_size);

Fermer(gros);

#fin si

Si le dernier cluster est atteint, on sort de la boucle, sinon on continue la lecture du répertoire, en augmentant la taille du buffer dir_entry d'un cluster supplémentaire :

Si (next_cluster & EOF_FAT16) pause ;

Start_cluster = next_cluster ;

Renvoie 0 ;

La fonction get_dentry() recherche dans le contenu du répertoire un élément correspondant au fichier recherché. Les paramètres d'entrée de cette fonction sont un pointeur vers la structure struct split_name *sn contenant les éléments du nom de fichier court :

Int je = 0 ;

Le tampon global dir_entry contient un tableau d'entrées de répertoire dans lequel nous allons chercher une entrée de fichier (ou de répertoire). Pour chercher, nous organisons un cycle. Dans le corps de la boucle, nous copions les éléments du répertoire dans la structure globale dentry et comparons les valeurs des champs name et ext de cette structure avec les champs correspondants de la structure struct split_name *sn. La correspondance de ces champs signifie que nous avons trouvé une entrée pour le fichier que nous recherchons dans le tableau des éléments du répertoire :

pour(; ; i++) (

If(!(memcmp(dentry.name, sn->name, sn->name_len)) &&

!(memcmp(dentry.ext, sn->ext, sn->ext_len)))

Casser;

If(!dentry.name) renvoie -1 ;

#ifdef DÉBOGAGE

Printf("nom - %s ", dentry.name);

Printf("start cluster - 0x%X ", dentry.start);

Printf("taille du fichier - %u ", dentry.size);

Printf("attribut de fichier - 0x%X ", dentry.attr);

#fin si

Renvoie 0 ;

Tout le code ci-dessus se trouve dans le répertoire FAT16, fichier fat16.c. Pour obtenir un module exécutable, créez un Makefile avec le contenu suivant :

INCDIR = /usr/src/linux/include

PHONY = propre

Fat16 : fat16.o split.o

Gcc -I$(INCDIR) $^ -g -o $@

%.o : %.c

Gcc -I$(INCDIR) -DDEBUG -c $^

Faire le ménage:

Rm -f *.o

Rm -f ./graisse16

Implémentation logicielle de l'algorithme de lecture d'un fichier depuis une partition logique avec le système de fichiers FAT12

De manière générale, l'algorithme de lecture d'un fichier depuis une partition FAT12 est identique à l'algorithme de lecture d'un fichier depuis une partition FAT16. La différence réside dans la procédure de lecture des éléments de la table FAT12. Nous avons considéré la table FAT16 comme un simple tableau d'éléments de 16 bits. Pour lire les éléments de la table FAT12, l'algorithme suivant est proposé :

  • multipliez le numéro de l'élément par 1,5 ;
  • extraire un mot de 16 bits de FAT en utilisant le résultat de l'opération précédente comme décalage ;
  • si le numéro de l'élément est pair, effectuer l'opération ET sur le mot lu et le masque 0x0FFF. Si le nombre est impair, décalez le mot lu dans le tableau de 4 bits vers les chiffres inférieurs.

Sur la base de cet algorithme, nous implémentons la fonction de lecture des éléments de la table FAT12 :

int get_cluster(__u16 cluster_num)

Recherche U16 ;

Grappe U16 ;

Nous calculons le décalage dans la table FAT12 et lisons un mot de 16 bits dans la table :

Recherche = (cluster_num * 3) / 2 ;

Memcpy((__u8 *)&clust, (__u8 *)(fat12 + seek), 2);

Si le numéro de départ du cluster est un nombre pair, on décale la valeur lue dans la table de 4 bits vers les bits de poids faible, s'il est impair, on la résume avec 0x0FFF :

Si(cluster_num % 2) cluster >>= 4 ;

Sinon cluster &= 0x0FFF;

Ce fragment peut également être implémenté en assembleur :

" xorw %%ax, %%ax "

" au fait 0 $, %%cx "

"jnc1f"

" Shrw 4 $, %%dx "

"jmp2f"

"1 : etw $0x0FFF, %%dx "

"2 : déplacement %%dx, %%ax "

:"=a" (suivant)

:"d" (cluster), "c" (cluster_num));

On renvoie le résultat :

Groupe de retour ;

Examinons de plus près l'algorithme lui-même. Supposons qu'un fichier ait été créé sur une partition FAT12 occupant les 9ème et 10ème clusters. Chaque élément FAT12 occupe 12 bits. Parce que dans le tableau, nous lisons des éléments de 16 bits, alors le décalage par rapport au 9ème élément sera égal à 13 octets (9 * 1,5 = 13, le reste est supprimé), tandis que les 4 bits inférieurs appartiendront au 8ème élément FAT. Ils doivent être écartés, et pour ce faire, il suffit de décaler l'élément lu de 4 bits vers les chiffres inférieurs, ce qui est fourni par l'algorithme. Le décalage par rapport au 10ème élément sera de 15 octets et les 4 bits de poids fort appartiendront au 11ème élément FAT. Pour les écarter, il faut effectuer une opération ET sur le 10ème élément et le masque 0x0FFF, qui correspond également à l'algorithme ci-dessus.

Les textes sources du module de lecture d'un fichier depuis une partition FAT12 se trouvent dans le répertoire FAT12, fichier fat12.c.

Implémentation logicielle de l'algorithme de lecture d'un fichier à partir d'une partition logique avec le système de fichiers FAT32

L'algorithme de lecture d'un fichier à partir d'une partition avec le système de fichiers FAT32 n'est pratiquement pas différent de l'algorithme pour FAT16, sauf que dans FAT32, le répertoire racine peut être situé n'importe où sur la partition et avoir une taille arbitraire. Par conséquent, pour rendre les choses plus intéressantes, compliquons la tâche - supposons que nous ne connaissions que le numéro de la partition avec le système de fichiers FAT32. Pour lire les informations de cette partition, vous devez d'abord déterminer ses coordonnées - le décalage par rapport à la partition depuis le début du disque. Et pour cela, vous devez avoir une idée de la structure logique du disque dur.

Structure logique d'un disque dur

Considérons la structure logique d'un disque dur conforme à la norme Microsoft - « partition principale – partition étendue – partitions non-DOS ».

L'espace disque dur peut être organisé en une ou plusieurs partitions, et les partitions peuvent contenir un ou plusieurs lecteurs logiques.

Le Master Boot Record (MBR) se trouve sur le disque dur à l'adresse physique 0-0-1. La structure MBR contient les éléments suivants :

  • bootstrap non-système (NSB) ;
  • table décrivant les partitions du disque (table de partition, PT). Situé dans le MBR au décalage 0x1BE et occupe 64 octets ;
  • Signature MBR. Les deux derniers octets du MBR doivent contenir le numéro 0xAA55.

La table des partitions décrit l'emplacement et les caractéristiques des partitions disponibles sur le disque dur. Les partitions de disque peuvent être de deux types : primaires (primaire, principale) et étendues (étendues). Le nombre maximum de partitions principales est de quatre. La présence d'au moins une partition principale sur le disque est obligatoire. Une partition étendue peut être divisée en un grand nombre de sous-partitions - des lecteurs logiques. Une structure simplifiée du MBR est présentée dans le tableau 7. La table de partition est située à la fin du MBR ; 16 octets sont alloués pour décrire la partition dans la table.

Tableau 7. Structure du MBR

Biais Taille, octets 0 446 0x1BE 16 0x1CE 16 0x1DE 16 0x1EE 16 0x1FE 2

La structure des entrées de la table de partition est présentée dans le tableau 8.

Tableau 8. Structure des entrées de la table de partition

Biais Taille, octets Contenu
0x00 1 Signe d'activité (0 - la partition n'est pas active, 0x80 – la partition est active)
0x01 1 Le numéro de la tête de disque à partir de laquelle commence la partition
0x02 2 Numéro de cylindre et numéro de secteur à partir duquel commence la section
0x04 1 Code du type de partition de l'ID système
0x05 1 Numéro de la tête de disque où se termine la partition
0x06 2 Numéro de cylindre et numéro de secteur qui termine la section
0x08 4 Numéro absolu (logique) du secteur de départ de la partition
0x0C 4 Taille de la partition (nombre de secteurs)

Le premier octet de l'élément section est l'indicateur d'activité de la section (0 – inactif, 0x80 – actif). Il est utilisé pour déterminer si la partition est en cours de démarrage du système et s'il est nécessaire de charger le système d'exploitation à partir de celle-ci au démarrage de l'ordinateur. Une seule section peut être active. Le drapeau d'activité de partition est suivi des coordonnées du début de la partition - trois octets indiquant le numéro de tête, le numéro de secteur et le numéro de cylindre. Les numéros de cylindre et de secteur sont spécifiés au format d'interruption Int 0x13, c'est-à-dire les bits 0 à 5 contiennent le numéro de secteur, les bits 6 à 7 – les deux bits les plus significatifs du numéro de cylindre à 10 bits, les bits 8 à 15 – les huit bits les moins significatifs du numéro de cylindre. Ceci est suivi d'un code d'identification système, indiquant que cette section appartient à un système d'exploitation particulier. L'identifiant occupe un octet. Derrière l'identifiant du système se trouvent les coordonnées de la fin de la section - trois octets contenant respectivement les numéros de la tête, du secteur et du cylindre. Les quatre octets suivants correspondent au nombre de secteurs avant la partition et les quatre derniers octets correspondent à la taille de la partition en secteurs.

Ainsi, un élément de table de partition peut être décrit en utilisant la structure suivante :

struct pt_struct (

U8 amorçable ; // indicateur d'activité de section

U8 start_part; // coordonnées du début de la section

U8 type_part; // identifiant du système

U8 end_part; // coordonnées de la fin de la section

U32 secte_avant; // nombre de secteurs avant la partition

U32 secte_total ; // taille de la partition en secteurs (nombre de secteurs dans la partition)

L'élément de partition primaire pointe directement vers le secteur de démarrage du disque logique (il n'y a toujours qu'un seul disque logique dans la partition primaire), et l'élément de partition étendue pointe directement vers une liste de disques logiques constituée de structures appelées MBR secondaire (Secondary MBR, SMBR).

Chaque disque de la partition étendue possède son propre bloc SMBR. SMBR a une structure similaire à MBR, mais il n'a pas d'enregistrement de démarrage (rempli de zéros) et seuls deux des quatre champs de descripteur de partition sont utilisés. Le premier élément de la section pointe vers le disque logique, le deuxième élément pointe vers la structure SMBR suivante dans la liste. Le dernier SMBR de la liste contient un code de partition nul dans son deuxième élément.

Revenons au module de lecture d'un fichier depuis une partition FAT32.

Fichiers d'en-tête :

#inclure

#inclure

#inclure

#inclure

#inclure

Signature MBR :

#définir SIGNATURE 0xAA55

Fichier de périphérique à partir duquel les informations de partition seront lues :

#define DEVICE "/dev/hda"

Taille de l'élément de la table de partition (16 octets) :

#définir PT_SIZE 0x10

Le tableau de structures suivant mappe le code de type d'une section à sa représentation symbolique :

types de systèmes de structure (

Type_pièce U8 ;

U8 *nom_pièce ;

struct systypes i386_sys_types = (

(0x00, "Vide"),

(0x01, "FAT12"),

(0x04, "FAT16<32M"},

(0x05, "Étendu"),

(0x06, "FAT16"),

(0x0b, "Win95 FAT32"),

(0x0c, "Win95 FAT32 (LBA)"),

(0x0e, "Win95 FAT16 (LBA)"),

(0x0f, "Win95 Ext"d (LBA)"),

(0x82, "échange Linux"),

(0x83, "Linux"),

(0x85, "Linux étendu"),

(0x07, "HPFS/NTFS")

Déterminons le nombre d'éléments dans le tableau i386_sys_types à l'aide de la macro PART_NUM :

#define PART_NUM (sizeof(i386_sys_types) / sizeof(i386_sys_types))

Fixons une limite au nombre de disques logiques :

#définir MAX_PART 20

Le tableau de structure suivant contiendra des informations sur les lecteurs logiques du périphérique (disque dur) :

struct pt_struct (

U8 amorçable ;

U8 start_part;

U8 type_part;

U8 end_part;

U32 secte_avant;

U32 secte_total ;

) pt_t;

int dur; // descripteur de fichier de périphérique

U8 membres; // compte le MBR ici

Numéro de la partition sur laquelle le système de fichiers FAT32 a été créé :

#définir FAT32_PART_NUM 5

Structures du secteur de démarrage, du secteur FSInfo et de l'entrée du répertoire (définies dans le fichier ):

struct fat_boot_sector fbs;

struct fat_boot_fsinfo fsinfo;

struct msdos_dir_entry dentry ;

U32 *fat32 = NULL; // copie la table FAT32 ici

Taille_secteur U16 ; // taille du secteur (à partir de FAT32)

U16 répertoire_entrées ; // 0 pour FAT32

Secteurs U16 ; // nombre de secteurs sur la partition

U32 fat32_size; // Taille FAT32

U32 data_start ; // début de la zone de données

U16 octet_per_cluster ; // combien d'octets y a-t-il dans le cluster (taille du cluster en octets)

U32 next_cluster ; // cluster suivant dans la chaîne

cluster_racine U32 ; // Cluster ROOT - cluster initial du répertoire racine

U8 *dir_entry = NULL; // pointeur vers les entrées du répertoire

U64 start_seek = 0 ; // décalage de départ par rapport à la partition (en octets)

Fonction principale:

int main()

Numéro int = 0 ;

Int numéro_cluster = 5 ; // combien de clusters lire dans le fichier

U8 *full_path = "/Dossier1/Dossier2/readme"; // fichier à lire

Nous ouvrons l'appareil, obtenons des informations sur la table de partition sur l'appareil et affichons des informations sur les partitions :

Difficile = ouvert (DEV_NAME, O_RDONLY);

Si (dur< 0) {

Perreur(DEV_NAME);

Sortie(-1);

Si (get_pt_info (dur)< 0) {

Perror("get_pt_info");

Sortie(-1);

Show_pt_info();

Nous calculons le décalage de départ par rapport à la partition :

Start_seek = (__u64)(pt_t.sect_before) * 512 ;

Lisez les clusters appartenant au fichier :

Num = fat32_read_file(full_path, cluster_num);

Si (numéro< 0) perror("fat32_read_file");

Sinon printf("Lire %d clusters\n", num);

Fermer (dur);

Renvoie 0 ;

Les informations sur la table de partition sont lues par la fonction get_pt_info() :

int get_pt_info (int dur)

Int je = 0 ;

Recherche U64 ;

Nous lisons la table de partition du MBR et vérifions la signature :

Read_main_ptable(dur);

Si(check_sign()< 0) {

Printf("Signature non valide !\n");

Renvoie -1 ;

Nous recherchons l'identifiant de la section étendue. S'il y en a un, nous calculons le décalage par rapport à la partition étendue et lisons les informations sur les disques logiques :

pour (; je< 4; i++) {

Si((pt_t[i].type_part == 0xF) || \

(pt_t[i].type_part == 0x5) || \

(pt_t[i].type_part == 0x0C)) (

Rechercher = (__u64)pt_t[i].sect_before * 512;

Read_ext_ptable(dur, chercher);

Casser;

Renvoie 0 ;

Fonction de lecture de table de partition read_main_ptable() :

void read_main_ptable (int dur)

Si (lire (dur, mbr, 512)< 0) {

Perror("lire");

Fermer (dur);

Sortie(-1);

Memset((void *)pt_t, 0, (PT_SIZE * 4));

Memcpy((void *)pt_t, mbr + 0x1BE, (PT_SIZE * 4));

Retour;

Fonction de vérification de signature check_sign() :

int check_sign()

Signe U16 = 0 ;

Memcpy((void *)&sign, (void *)(mbr + 0x1FE), 2);

#ifdef DÉBOGAGE

Printf("Signature - 0x%X\n", signe);

#fin si

Si(signe != SIGNATURE) renvoie -1;

Renvoie 0 ;

Fonction de lecture de table de partition étendue :

void read_ext_ptable (int dur, recherche __u64)

Numéro int = 4 ; // à partir de cette position, le tableau des structures pt_t sera rempli d'informations sur les lecteurs logiques

U8 petit groupe;

Des données d'entrée:

  • dur– descripteur de fichier de dispositif ;
  • chercher– décalage vers la partition étendue depuis le début du disque (en octets).

Pour obtenir des informations sur les disques logiques, nous organisons une boucle :

Pour(;;num++) (

On lit SMBR, situé au décalage de recherche par rapport au début du disque :

Memset((void *)smbr, 0, 512);

Pread64 (dur, smbr, 512, recherche) ;

Nous remplissons deux éléments de la table pt_t, en commençant par la position num. Le premier élément pointera vers le lecteur logique et le second pointera vers la structure SMBR suivante :

Memset((void *)&pt_t, 0, PT_SIZE * 2);

Memcpy((void *)&pt_t, smbr + 0x1BE, PT_SIZE * 2);

Nous apportons une modification au champ « Numéro de secteur de démarrage » - le comptage se fait à partir du début du disque :

Pt_t.sect_before += (recherche / 512);

Si le code du type de partition est zéro, alors il n'y a plus de disques logiques :

If(!(pt_t.type_part)) break;

Nous calculons le décalage par rapport au SMBR suivant :

Recherche = ((__u64)(pt_t.sect_before + pt_t.sect_total)) * 512 ;

Retour;

La fonction show_pt_info() affiche des informations sur les lecteurs logiques trouvés sur le périphérique :

vide show_pt_info()

Int je = 0, n ;

#ifdef DÉBOGAGE

Printf("Le nombre de partitions sur le disque est %d\n", PART_NUM);

#fin si

Pour (; je< MAX_PART; i++) {

If(!pt_t[i].type_part) break;

Printf("\nType de partition %d - ", i);

Pour(n = 0; n< PART_NUM; n++) {

Si(pt_t[i].type_part == i386_sys_types[n].part_type) (

Printf("%s\n", i386_sys_types[n].part_name);

Casser;

If(n == PART_NUM) printf("type inconnu\n");

Printf("Signe de démarrage - 0x%X\n", pt_t[i].bootable);

Printf("Secteurs dans la partition %d - %d\n", i, pt_t[i].sect_total);

Printf("Secteurs avant la partition %d - %d\n\n", i, pt_t[i].sect_before);

Retour;

La lecture des clusters de fichiers à partir d'une partition FAT32 est effectuée par la fonction fat32_read_file(). Cette fonction a beaucoup en commun avec la fonction fat16_read_file(), veuillez donc vous référer au point 6 pour des commentaires détaillés :

int fat32_read_file(__u8 *full_path, int num)

Structure split_name sn ;

U8 tmp_name_buff;

Int je = 1, n;

U32 start_cluster, next_cluster ;

U8 *tmp_buff;

Opérations préparatoires - nous nettoyons le tampon, la structure et vérifions la première barre oblique :

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

If(full_path != "/") return -1;

Lecture du secteur de démarrage :

Si(read_fbs()< 0) return -1;

Memcpy((void *)§or_size, (void *)fbs.sector_size, 2);

Memcpy((void *)&dir_entries, (void *)fbs.dir_entries, 2);

Memcpy((void *)§eurs, (void *)fbs.sectors, 2);

Nous lisons la structure FSInfo et affichons la signature qui s'y trouve :

Si(read_fs_info()< 0) return -1;

Printf("Signature1 - 0x%X\n", fsinfo.signature1);

Printf("Signature2 - 0x%X\n", fsinfo.signature2);

Fat32_size = fbs.fat32_length * 512 ; // Taille FAT32 en octets

Data_start = 512 * fbs.reserved + fat32_size * 2 ; // début du champ de données

Byte_per_cluster = fbs.cluster_size * 512 ; // taille du cluster en octets

Root_cluster = fbs.root_cluster ; // numéro de cluster du répertoire racine

Lecture de FAT32 :

Si(read_fat32()< 0) return -1;

Allocation de mémoire pour les entrées du répertoire :

Dir_entry = (__u8 *)malloc(byte_per_cluster);

If(!dir_entry) renvoie -1 ;

Lecture du répertoire racine :

Si (read_directory (root_cluster)< 0) return -1;

Nous analysons le chemin complet du fichier et divisons chaque élément en ses composants :

Tandis que(1) (

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

Pour(n = 0 ; n< SHORT_NAME; n++, i++) {

Tmp_name_buff[n] = chemin_complet[i];

Si((tmp_name_buff[n] == "/") || (tmp_name_buff[n] == "\0")) (

je++;

Casser;

Tmp_name_buff[n] = "\0" ;

Si(split_name(tmp_name_buff, &sn)< 0) {

Printf("nom non valide\n");

Renvoie -1 ;

Si(get_dentry(&sn)< 0) {

Printf("Aucun fichier de ce type !\n");

Renvoie -1 ;

Pour obtenir le numéro de départ d'un cluster dans le système de fichiers FAT32, vous devez utiliser le mot le plus élevé du numéro du premier cluster du fichier - le champ starthi de la structure dentry :

Start_cluster = (((__u32)dentry.starthi<< 16) | dentry.start);

Vérification de l'octet d'attribut :

If(dentry.attr & 0x10) ( // c'est le répertoire

Si (read_directory (start_cluster)< 0) return -1;

Continuer;

If(dentry.attr & 0x20) ( // et ceci est un fichier

Tmp_buff = (__u8 *)malloc(byte_per_cluster);

N = open("clust", O_CREAT|O_RDWR, 0600);

Si(n< 0) {

Perror("ouvrir");

Renvoie -1 ;

Printf("premier cluster du fichier - 0x%X .. ", start_cluster);

Pour (i = 0; je< num; i++) {

Memset(tmp_buff, 0, byte_per_cluster);

Si (read_cluster (start_cluster, tmp_buff)< 0) return -1;

Si (write (n, tmp_buff, byte_per_cluster)< 0) {

Perror("écrire");

Renvoie -1 ;

Si(next_cluster == EOF_FAT32) (

Gratuit(tmp_buff);

Fermer(n);

Renvoie ++i;

Start_cluster = next_cluster ;

Renvoyez-moi ;

Le but des trois fonctions suivantes est d'obtenir le contenu de la zone système, c'est-à-dire secteur de démarrage, structure FSInfo et table FAT32 :

1) la fonction read_fbs() lit le secteur de démarrage :

int read_fbs()

Si(pread64(dur, (__u8 *)&fbs, sizeof(fbs), start_seek)< 0) return -1;

Renvoie 0 ;

2) la fonction read_fs_info() lit la structure FSInfo :

int read_fs_info()

Recherche U64 = (__u64)fbs.info_sector * 512 + start_seek ;

Si(pread64(dur, (__u8 *)&fsinfo, sizeof(fsinfo), seek)< 0) return -1;

Renvoie 0 ;

3) la fonction read_fat32() lit la table FAT32 :

int read_fat32()

Recherche U64 = (__u64)fbs.reserved * 512 + start_seek ;

Fat32 = (void *)malloc(fat32_size);

Si(!fat32) renvoie -1 ;

Si(pread64(dur, (__u8 *)fat32, fat32_size, chercher)< 0) return -1;

Renvoie 0 ;

La fonction read_cluster() lit le cluster avec le numéro spécifié :

int read_cluster(__u32 cluster_num, __u8 *tmp_buff)

Recherche U64 = (__u64)(byte_per_cluster) * (cluster_num - 2) + data_start + start_seek ;

Si (pread64 (dur, tmp_buff, byte_per_cluster, recherche)< 0) return -1;

Renvoie 0 ;

La fonction read_directory() permet de lire des répertoires (y compris le répertoire racine) :

int read_directory(__u32 start_cluster)

Int je = 2;

U32 next_cluster ;

Les paramètres de la fonction sont le cluster de départ du répertoire. Nous lisons le contenu du répertoire dans le buffer global dir_entry :

Si (read_cluster (start_cluster, dir_entry)< 0) return -1;

Next_cluster = fat32;

Si le répertoire occupe un cluster, quittez ; sinon, augmentez la taille de la mémoire et continuez à lire :

Pour(; ;i++) (

Start_cluster = next_cluster ;

Dir_entry = (__u8 *)realloc(dir_entry, i * byte_per_cluster);

If(!dir_entry) renvoie -1 ;

Si(read_cluster(start_cluster, (dir_entry + (i - 1) * byte_per_cluster))< 0) return -1;

Next_cluster = fat32;

If((next_cluster == EOF_FAT32) || (next_cluster == 0xFFFFFF8)) renvoie 0 ;

Renvoie 0 ;

La dernière fonction que nous examinerons recherche dans le contenu d'un répertoire un élément qui correspond au fichier que nous recherchons :

int get_dentry(struct split_name *sn)

Int je = 0 ;

Le pointeur dir_entry est positionné sur une zone de mémoire contenant un tableau d'entrées de répertoire dans lequel nous allons rechercher le fichier (ou répertoire). Pour rechercher, nous organisons un cycle et plaçons l'enregistrement trouvé dans la structure globale dentry :

Pour(;;i++) (

Memcpy((void *)&dentry, dir_entry + i * sizeof(dentry), sizeof(dentry));

If(!(memcmp(dentry.name, sn->name, sn->name_len)) &&

!(memcmp(dentry.ext, sn->ext, sn->ext_len)))

Casser;

If(!dentry.name) renvoie -1 ;

Renvoie 0 ;

Ceci conclut notre revue du module de lecture d'un fichier à partir d'une partition FAT32.

Le code source du module se trouve dans le répertoire FAT32, fichier fat32.c.

Différences dans l'organisation du stockage des enregistrements de fichiers dans des répertoires pour les systèmes de fichiers FAT et EXT2

Quelques mots sur les différences dans l'organisation du stockage des enregistrements de fichiers dans les répertoires des systèmes de fichiers FAT et EXT2. La structure du système de fichiers EXT2 a été discutée dans .

Nous venons de faire connaissance avec FAT - dans celui-ci, tous les éléments du répertoire ont une valeur fixe. Lorsqu'un fichier est créé, le pilote du système de fichiers recherche la première position inoccupée et la remplit avec des informations sur le fichier. Si la longueur du répertoire ne rentre pas dans un cluster, alors un autre cluster lui est alloué, etc.

Regardons comment les choses se passent dans EXT2.

Disons que nous avons une partition avec le système de fichiers EXT2, la taille du bloc est de 4096 octets. Dans cette section, nous créons un répertoire. La taille du répertoire sera égale à la taille du bloc - 4096 octets. Dans un répertoire, le système d'exploitation crée immédiatement deux entrées : une entrée pour le répertoire courant et une entrée pour le répertoire parent. L'entrée du répertoire actuel prendra 12 octets, tandis que l'entrée du parent fera 4 084 octets. Créons un fichier dans ce répertoire. Après cela, il y aura trois entrées dans le répertoire : une entrée du répertoire actuel d'une longueur de 12 octets, une entrée du répertoire parent d'une longueur de 12 octets et une entrée du fichier créé d'une longueur de, comme vous l'avez probablement deviné, 4072 octets. Si nous supprimons le fichier créé, la longueur de l'entrée du répertoire parent augmente à nouveau jusqu'à 4084 octets.

Ainsi, lors de la création d'un fichier, le pilote du système de fichiers EXT2 recherche l'entrée de longueur maximale dans le répertoire et la divise, laissant ainsi la place à une nouvelle entrée. Eh bien, s'il n'y a toujours pas assez d'espace, un autre bloc est alloué au répertoire et la longueur du répertoire devient 8 192 octets.

Et en conclusion, une petite modification de l'article « Architecture du système de fichiers EXT2 ».

Ce changement concerne la fonction get_i_num() permettant de déterminer le numéro d'inode par nom de fichier. L'ancienne version de cette fonction ressemblait à ceci :

int get_i_num(char *nom)

Int je = 0, rec_len = 0 ;

Structure ext2_dir_entry_2 dent ;

Pour (; je< 700; i++) {

If(!memcmp(dent.name, name, dent.name_len)) break;

Rec_len += dent.rec_len;

Renvoie dent.inode;

Version corrigée:

int get_i_num(char *nom)

* Le paramètre de fonction est le nom du fichier. La valeur de retour est le numéro d'inode du fichier.

Int rec_len = 0 ;

Structure ext2_dir_entry_2 dent ; // cette structure décrit le format de l'entrée du répertoire racine :

* Le tampon global contient un tableau d'entrées de répertoire. Pour déterminer le numéro de série du fichier inode, vous devez trouver

* dans ce tableau il y a une entrée avec le nom de ce fichier. Pour ce faire, on organise une boucle :

Pour(;;) (

/* Copie les entrées du répertoire dans la structure dent : */

Memcpy((void *)&dent, (buff + rec_len), sizeof(dent));

* Une longueur de nom de fichier de zéro signifie que nous avons parcouru toutes les entrées du répertoire

* et aucune entrée avec notre nom de fichier n'a été trouvée. Il est donc temps de revenir en arrière :

If(!dent.name_len) renvoie -1 ;

/* La recherche est effectuée en comparant les noms de fichiers. Si les noms correspondent, on sort de la boucle : */

If(!memcmp(dent.name, name, strlen(name))) break;

/* Si les noms ne correspondent pas, passez à l'entrée suivante : */

Rec_len += dent.rec_len;

/* En cas de succès, renvoie le numéro d'inode du fichier : */

Renvoie dent.inode;

Littérature:

  1. V. Koulakov. Programmation au niveau matériel : un ouvrage de référence spécial. 2e éd. / – Saint-Pétersbourg : Peter, 2003 – 848 p.
  2. A.V. Gordeev, A.Yu.Molchanov. Logiciel système / – Saint-Pétersbourg : Peter – 2002
  3. Meshkov V. Architecture du système de fichiers ext2. – Magazine « Administrateur système », n° 11(12), novembre 2003 – 26-32 p.

En contact avec