EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire


Conforme à XHTML 1.0 Strict Conforme à CSS!

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Système de fichier de Linux

Historique

15 avril 2014 : Achèvement de cette page.

Difficulté

Pour : tout visiteur curieux.

 Introduction

Ext2 ou Ext2fs (en anglais, second extended file system) est le système de fichiers historique de GNU/Linux.
Ext3 apporte une fonctionnalité supplémentaire : la journalisation.
Ext4 est le successeur du système de fichiers ext3.

Une qualité fréquemment attribuée à ce système de fichiers serait de ne pas se fragmenter (à l'opposé de FAT ou NTFS utilisés par Windows), au motif que les données y seraient organisée de façon plus efficace. En réalité, ext2 limite la fragmentation mais ne l'empêche pas complètement.

Les différentes manipulations se font sur une disquette formatée en ext2. Un répertoire tmp a été créé, puis 3 fichiers y ont été copiés (.bashrc .dmrc .xsession-errors). Enfin, le fichier .xsession-errors est effacé.
Bien sûr, les disquettes ne sont pratiquement plus utilisées, mais elles sont intéressantes sur le plan didactique.

Haut

 Notions de fichier

Avec Linux, tout est traité comme fichier : les fichiers bien sûr, mais aussi les répertoires, les périphériques tels que disque, disquette, clé USB ...

La commande ls

La commande ls -l permet de lister ces fichiers et, par là, de connaître la nature exacte du fichier, avec ses caractéristiques
Avec l'option -l, le résultat de la commande donne :

Voici un extrait de la commande ls -l sur mon répertoire
drwxr-xr-x  2 georges georges  1024 févr. 16 20:42 Bureau/
drwxr-xr-x 33 georges georges  2048 mars  23 09:26 Documents/
-rw-rw-r--  1 georges georges 13705 févr. 18  2010 Eliott.odg
lrwxrwxrwx  1 georges georges    28 mars  25 10:37 Noe.odg -> /home/georges/Images/Noe.odg
et un extrait de la commande ls -l sur le répertoire /dev (périphériques)
drwxr-xr-x 3 root root 60 mars 24 16:38 bus/
lrwxrwxrwx 1 root root 3 mars 24 16:38 cdrom -> sr0
brw-rw----+ 1 root cdrom 11, 0 mars 24 16:38 sr0
brw-rw---- 1 root floppy 2, 0 mars 24 16:38 fd0
brw-rw---- 1 root disk 8, 1 mars 24 16:38 sda1
crw--w---- 1 root tty 4, 1 mars 24 16:38 tty1

Haut

 Les inodes

Mais, en creusant un peu plus cette notion de fichier, nous voyons que l'accès ne se fait pas par le nom du fichier ou du périphérique.
Les noms sont utiles aux humains, mais le système de fichiers reconnaît un fichier par un numéro, et pas par son nom. Ce numéro, par lequel le système d'exploitation atteint l'emplacement et les attributs d'un fichier, est appelé numéro d'inode.

Définition

On peut dire que c'est une structure de données qui garde la trace de toutes les informations sur un fichier.
Vous stockez vos informations dans un fichier et le système d'exploitation stocke les informations de ce fichier dans un inode.

Utilisation

Quand un utilisateur ou un programme doit accéder à un fichier, le système d'exploitation recherche d'abord, dans une table appelée table d'inode, le numéro unique de l'inode de ce fichier.
Pour atteindre un fichier dont on connait le nom, il faut trouver l'inode correspondant. Par contre, avec le numéro d'inode il n'est pas nécessaire de connaître le nom du fichier pour accéder aux données.

Contenu de l'inode

Connaissant le nom d'un fichier ou d'un répertoire, vous trouvez le contenu de son inode avec la commande :
stat fichier ou stat répertoire.

Voici quelques extraits, pour une disquette montée, survolez
  • le répertoire racine de la disquettestat /run/media/paiiou/disk
    Fichier : "/run/media/paiiou/disk"
    Taille : 1024  Blocs : 2  Blocs d'E/S : 1024 répertoire
    Périphérique : 200h/512d  Inoeud : 2  Liens : 4
    Accès : (0755/drwxr-xr-x) UID (0/root) GID (0/root)
    ...
    				
  • un sous-répertoire de la disquettestat /run/media/paiiou/disk/tmp
    Fichier : "/run/media/paiiou/disk/tmp"
    Taille : 1024  Blocs : 2  Blocs d'E/S : 1024 répertoire
    Périphérique : 200h/512d  Inoeud : 12  Liens : 2
    Accès : (0755/drwxr-xr-x) UID (0/root) GID (0/root)
    ...
    				
  • un fichier de ce sous-répertoirestat /run/media/paiiou/disk/tmp/.dmrc
    Fichier : "/run/media/paiiou/disk/tmp/.dmrc"
    Taille : 46  Blocs : 2  Blocs d'E/S : 1024 fichier
    Périphérique : 200h/512d  Inoeud : 14  Liens :1
    Accès : (0644/-rw-r--r--) UID (500/paiiou) GID (500/paiiou)
    ...
    				
Haut

 Structure physique

Elle est très différente de celle de MS-DOS : un disque est découpé en blocs (1024 octets ou un multiple).

 Les blocs

Bloc ext2

Premier bloc

Le premier bloc a toujours 1024 octets.
Il est réservé au secteur de boot (512 octets + 512 octets additionnels).
Il n'est ni utilisé ni géré par ext2.
Lorsque le secteur ne sert pas à l'amorçage, ce premier bloc reste vide.

Autres blocs

Les autres blocs sont réunis en groupes.

 Les groupes

Le premier groupe (groupe 0) commence donc par le bloc n° 2.

Chaque groupe contient :

  1. un superbloc : il contient la description de l'organisation logique du disque.
    le contenu de ce bloc est limité à 1024 octets, même si la taille du bloc est plus grande.
  2. un ou plusieurs blocs descripteurs : ils contiennent la description du groupe.
  3. un bloc du bitmap du bloc
  4. un bloc du bitmap des inodes
  5. un ou plusieurs blocs de la table des inodes
  6. les blocs des données

 Le superbloc

Il contient une description de la taille de base et de la forme de ce système de fichiers.
Ces informations permettent au gestionnaire du système de fichiers d'utiliser et de maintenir ce système de fichiers. Habituellement, seul le superbloc du groupe 0 est lu lors du montage du système. Cependant, chaque groupe contient une copie du superbloc, utilisée en cas de corruption du système de fichiers.

Remarque : une disquette formatée avec ext2 ne contient qu'un seul groupe.

D'autres informations y sont également disponibles :

Contenu du superbloc de ma disquette, survolez

Le superbloc débute au deuxième bloc (bloc 1) à l'adresse 0400h. Les adresses sont notées en hexadécimal.

taille début fin   valeur (disquette) Description
  4    400h  403h  B8 00 00 00 =  184 Nbre total d'inodes
  4    404h  407h  A0 05 00 00 = 1440 Taille du système, en nbre de blocs
  4    408h  40Bh  48 00 00 00 =   72 Nbre de blocs réservés
  4    40Ch  40Fh  6E 05 00 00 = 1390 Blocs libres
  4    410h  413h  AA 00 00 00 =  170 Inodes libres
  4    414h  417h  01 00 00 00 =    1 N° du premier bloc utilisable (toujours 1)
  4    418h  41Bh  00 00 00 00 =      Taille de bloc
  4    41Ch  41Fh  00 00 00 00 =      Taille de fragment
  4    420h  423h  00 20 00 00 = 8192 Blocs par groupe
  4    424h  427h  00 20 00 00 = 8192 Fragments par groupe
  4    428h  42Bh  B8 00 00 00 =  184 Nbre d'inodes par groupe
  4    42Ch  42Fh  00 00 00 00 =      Date du dernier montage (non disponible)
  4    430h  433h  xx xx xx xx =      Date de la dernière écriture
  2    434h  435h  01 00       =    1 Nbre de montages
  2    436h  437h  FF FF       =      Nbre maxi de montages avant contrôle
  2    438h  439h  53 EF       =      Magic signature
  2    43Ah  43Bh  01 00       =      Drapeau du statut
  2    43Ch  43Dh  01 00       =      Propriété, en cas de détection d'erreur
  2    43Eh  43Fh  00 00       =      Indice de révision (mineur)
  4    440h  443h  xx xx xx xx =      Date du dernier contrôle
  4    444h  447h  00 00 00 00 =      Intervale des contrôles
  4    448h  44Bh  00 00 00 00 =      Système d'exploitation lors de la création
  4    44Ch  44Fh  01 00 00 00 =    1 Niveau de révision
  2    450h  451h  00 00       =    0 user ID des blocs réservés (root)
  2    452h  453h  00 00       =    0 group ID des blocs réservés (root)
  4    454h  457h  0B 00 00 00 =   11 N° du premier inode non réservé
  2    458h  459h  80 00       =  128 Taille de la structure des inodes
  2    45Ah  45Bh  00 00       =    0 N° du groupe contenant ce superbloc
  4    45Ch  45Fh  38 00 00 00 =      Compatible features bitmap
  4    460h  463h  02 00 00 00 =      Incompatible features bitmap
  4    464h  467h  01 00 00 00 =      Read-only-compatible features bitmap
 16    468h  477h  4da21ff3-81cf-4b2e-8b4a-a4297651cd7328d2 Identifiant du système de fichiers
 16    478h  487h  00 ...             Nom de volume
 64    488h  4C7h  00 ...             Chemin vers le dernier point de montage
  4    4C8h  4CBh  00 00 00 00 =      Utilisé pour la compression
  1    4CCh  4CCh  00          =      Number of blocks to preallocate
  1    4CDh  4CDh  00          =      Number of blocks to preallocate for directories
 16    4CEh  4FBh  05 00 ...          Grain pour le hachage de l'indexation des répertoires
  1    4FCh  4FCh  01          =    1 Version par défaut du hachage
  3    4FEh  4FFh  00 00 00           Remplissage
  4    500h  503h  0C 00 00 00 =   12 Options de montage, par défaut
  4    504h  507h  00 00 00 00
  4    508h  50Bh  7E F7 4A 53        ?
818                                  Remplissage jusqu'à 1024 octets
			
Haut

 Descripteur de groupe

Chaque groupe de blocs possède une structure qui la décrit. Tout comme pour le superbloc, tous les descripteurs de groupe sont dupliqués dans chaque groupe, ces descripteurs étant identiques pour tous les groupes.

Chaque descripteur contient les éléments suivants :

Les descripteurs de groupe sont placés les uns après les autres ensemble ils forment la table de descripteur de groupe.

Chaque groupe de blocs contient la table entière de descripteurs de groupe, après sa copie du Superbloc. Mais seule la première copie (dans le groupe de bloc 0) est réellement utilisée par le système de fichiers EXT2. Les autres exemplaires sont des copies de sécurité tout comme les copies du superbloc.

Contenu du descripteur de groupe de ma disquette, survolez

Le descripteur de groupe débute au troisième bloc (bloc 2) à l'adresse 08 00h. Les adresses sont notées en hexadécimal.

taille début fin   valeur (disquette) Description
  4    800h  803h  08 00 00 00 =    8 N° de bloc de 'bloc bitmap'
  4    804h  807h  09 00 00 00 =    9 N° de bloc de 'inode bitmap'
  4    808h  80Bh  0A 00 00 00 =   10 N° de bloc de la première table inode
  2    80Ch  80Dh  6E 05       = 1390 Nbre de blocs libres dans le groupe
  2    80Eh  80Fh  AA 00       =  170 Nbre de inodes libres dans le groupe
  2    810h  811h  03 00       =    3 Nbre de répertoires dans le groupe
  2    812h  813h  00 00       =      Alignement sur un mot entier
  4    814h  817h  00 00 00 00 =      Remplissage
			
Haut

 Block Bitmap

Le groupe de blocs contient un bloc qui est une carte de l'ensemble des blocs du groupe.
Chaque bit de cette carte représente le statut d'un bloc.Le bloc 0 est géré par le bit 0 du bloc ...
Une valeur de 1 signifie que le bloc est alloué, alors que le 0 indique que le bloc est libre.

Examen du début de la carte des blocs, survolez

Les applications qui permettent de lire les fichiers binaires travaillent habituellement en mots de 8 bits.
Pour chaque mot, le bit le plus faible se trouve à droite dans la représentation binaire du mot.

Le descripteur de groupe nous dit que le bloc bitmap porte le numéro 8 (adresse 2000h). En voici le début :
en notation hexadécimale : FF FF FF FF FF FF 01 00
et en notation binaire : 11111111 11111111 11111111 11111111 11111111 11111111 00000001 00000000

La numérotation des blocs démarre à 0 (dernier bloc = 1439 pour un total de 1440). Ainsi,
le bloc 0 est géré par le bit 0 du mot 0 de la carte (bitmap),
le bloc 1 est géré par le bit 1 du mot 0,
le bloc 2 est géré par le bit 2 du mot 0 ...
le bloc 7 est géré par le bit 7 du mot 0 ...
le bloc 8 est géré par le bit 0 du mot 1,
le bloc 9 est géré par le bit 1 du mot 1 ...
le bloc 15 est géré par le bit 7 du mot 1,
le bloc 16 est géré par le bit 0 du mot 2 ...
le bloc 24 est géré par le bit 0 du mot 3 ...
le bloc 32 est géré par le bit 0 du mot 4 ...
le bloc 40 est géré par le bit 0 du mot 5 ...
le bloc 48 est géré par le bit 0 du mot 6 ...
le bloc 56 est géré par le bit 0 du mot 7 ...

Et dans l'exemple ci-dessus, les blocs 0 à 48 sont utilisés.

Haut

 Inode Bitmap

Tout comme pour la carte des blocs, il y a une carte des inodes.
La constitution de ce bloc des inodes est exactement la même que celle du bitmap des blocs.

Dans un groupe, il y a nettement moins d'inodes attribués que de blocs utilisés.

Examen du début de la carte des inodes, survolez

Les applications qui permettent de lire les fichiers binaires travaillent habituellement en mots de 8 bits.
Pour chaque mot, le bit le plus faible se trouve à droite dans la représentation binaire du mot.

Le descripteur de groupe nous dit que le bloc inodes porte le numéro 9 (adresse 2400h). En voici le début :
en notation hexadécimale : FF 3F 00
et en notation binaire : 11111111 00000011 00000000

Contrairement à celle des blocs, la numérotation des inodes démarre à 1 (dernier inode = 184 pour un total de 184). Ainsi,
l'inode 1 est géré par le bit 0 du mot 0 de la carte (inodes),
l'inode 2 est géré par le bit 1 du mot 0,
l'inode 3 est géré par le bit 2 du mot 0 ...
l'inode 8 est géré par le bit 7 du mot 0 ...
l'inode 9 est géré par le bit 0 du mot 1,
l'inode 10 est géré par le bit 1 du mot 1 ...
l'inode 16 est géré par le bit 7 du mot 1,
l'inode 17 est géré par le bit 0 du mot 2 ...

Et dans l'exemple ci-dessus, les inodes 1 à 10 sont utilisés.

Haut

 Inode Table

Tous les inodes sont regroupés dans une table. Il y a une table inode par groupe de blocs.
Comme déjà évoqué plus haut, un inode est utilisé pour garder la trace de chaque répertoire, fichier régulier, lien symbolique, fichier spécial : l'emplacement des données, la taille, le type, les droits d'accès du fichier sont tous stockés dans les inodes.
Par contre, il n'y a aucun nom de fichier stocké dans l'inode lui-même, les noms sont contenus uniquement dans les fichiers décrivant les répertoires.

Les 10 premiers inodes sont réservés :

  1. inode 1 : alloué aux blocs défectueux selon mke2fs/e2fsck -c (sur ma disquette, il n'y a encore que les dates habituelles)
  2. inode 2 : répertoire racine du système de fichiers, UID=0 GID=0, (toujours inode 2)
  3. inode 3 à 6 : non utilisés (remplis de 0)
  4. inode 7 : chargeur de démarrage
  5. inode 8 à 10 : non utilisés (remplis de 0)

Le premier inode non réservé est donc le numéro 11 et il correspond toujours au répertoire racine de ce système de fichiers.

Trouver la table des inodes, survolez

L'adresse de début de table est dans le descripteur de groupe, sous la forme du N° de bloc, en 0808h-080Bh. Pour ma disquette, c'est le bloc N° 10. Avec des blocs de 1024 octets, cela correspond à l'adresse 10240, soit 28 00h en hexadécimal.
La taille de l'inode se trouve dans le superbloc, en 0458h-0459h et est de 128 octets, pour la disquette examinée. Les inodes 1 à 10 se trouvent donc respectivement aux adresses 2800h, 2880h, 2900h, 2980h, 2A00h, 2A80h, 2B00h, 2B80h, 2C00h, 2C80h. Le premier inode non réservé se trouve en 2D00h, et c'est donc toujours le répertoire racine du système.

Structure d'un inode
Structure d'un inode, survolez

C'est l'inode 12, celui d'un répertoire, qui est analysé (il débute en 2D80h) :

Une fois que la table est localisée, il est possible de s'intéresser à son contenu.

taille début  fin  valeur (disquette) Description
  2   2D80h 2D81h  ED 41              Type de fichier (4=répertoire, 8= fichier) et permissions (1ED=rwxr-xr-x)
  2   2D82h 2D83h  00 00       =    0 ID utilisateur (0=root)
  4   2D84h 2D87h  00 04 00 00 = 1024 Taille en octets (32 bits de poids faible)
  4   2D88h 2D8Bh  5A F9 36 53        Date dernier accès (en temps POSIX. 5336F95A=1396111706=29 mars 2014 16:48:26)
  4   2D8Ch 2D8Fh  xx xx xx xx        Date création (en temps POSIX)
  4   2D90h 2D93h  xx xx xx xx        Date dernière modification (en temps POSIX)
  4   2D94h 2D97h  00 00 00 00        Date effacement (il n'y a pas eu d'effacement)
  2   2D98h 2D99h  00 00       =    0 ID groupe
  2   2D9Ah 2D9Bh  02 00       =    2 Nbre de liens physiques (0 = non alloué)
  4   2D9Ch 2D9Fh  02 00 00 00 =    2 Nbre de secteurs utilisés (pas de blocs)
  4   2DA0h 2DA3h  00 00 00 00        Drapeaux
  4   2DA4h 2DA7h  00 00 00 00        Valeur fonction du système d'exploitation
  4   2DA8h 2DABh  2F 00 00 00        Pointeur direct 0, vers le bloc des données
  4   2DACh 2DAFh  00 00 00 00        Pointeur direct 1, vers le bloc des données (non utilisé, ici)
  4   2DB0h 2DB3h  00 00 00 00        Pointeur direct 2, vers le bloc des données (non utilisé, ici)
  4   2DB4h 2DB7h  00 00 00 00        Pointeur direct 3, vers le bloc des données (non utilisé, ici)
  4   2DB8h 2DBBh  00 00 00 00        Pointeur direct 4, vers le bloc des données (non utilisé, ici)
  4   2DBCh 2DBFh  00 00 00 00        Pointeur direct 5, vers le bloc des données (non utilisé, ici)
  4   2DC0h 2DC3h  00 00 00 00        Pointeur direct 6, vers le bloc des données (non utilisé, ici)
  4   2DC4h 2DC7h  00 00 00 00        Pointeur direct 7, vers le bloc des données (non utilisé, ici)
  4   2DC8h 2DCBh  00 00 00 00        Pointeur direct 8, vers le bloc des données (non utilisé, ici)
  4   2DCCh 2DCFh  00 00 00 00        Pointeur direct 9, vers le bloc des données (non utilisé, ici)
  4   2DD0h 2DD3h  00 00 00 00        Pointeur direct 10, vers le bloc des données (non utilisé, ici)
  4   2DD4h 2DD7h  00 00 00 00        Pointeur direct 11, vers le bloc des données (non utilisé, ici)
  4   2DD8h 2DDBh  00 00 00 00        Pointeur indirect simple, vers un bloc de pointeurs de données (non utilisé, ici)
  4   2DDCh 2DDFh  00 00 00 00        Pointeur indirect double, vers un bloc de pointeurs indirect simple (non utilisé, ici)
  4   2DE0h 2DE3h  00 00 00 00        Pointeur indirect tripe, vers un bloc de pointeurs indirect double (non utilisé, ici)
  4   2DE4h 2DE7h  AF 7D 95 E2        Generation number (utilisé par NFS)
  4   2DE8h 2DEBh  00 00 00 00        Non utilisé
  4   2DECh 2DEFh  00 00 00 00        Non utilisé
  4   2DF0h 2DF3h  00 00 00 00        Non utilisé
 12   2DF4h 2DFFh  00 00 00 00        Seconde valeur fonction du système d'exploitation (non utilisé, ici)
			

Les pointeurs

Les inodes de la table ne donnent donc ni le nom des fichiers (au sens global), ni le contenu des fichiers.
Par contre, les inodes contiennent des champs (des pointeurs) qui renvoient chacun à un numéro de bloc et ce sont ces blocs qui contiennent les données.

Les différents pointeurs sont utilisés en fonction des besoins : le premier pointe vers le premier bloc de données. Si ce bloc est insuffisant, un deuxième champ pointe vers un deuxième bloc, etc ...
Les 12 premiers pointeurs (0 à 11) contiennent directement les adresses des 12 premiers blocs de données (à raison d'une adresse par bloc).
Si ces 12 blocs sont insuffisants pour contenir toutes les données, un 13ème est utilisé. Il est indirect, c'est-à-dire qu'il pointe vers une adresse qui contient d'autres pointeurs.
Une 14ème entrée peut être utilisée et elle est doublement indirecte. Enfin, si besoin, une 15ème entrée est triplement indirecte. Cette démultiplication des pointeurs (et donc des blocs de données) permet de gérer des fichiers de très grande taille.

Haut

 Les répertoires

Au niveau de la table des inodes, un répertoire est traité de la même façon qu'un fichier. L'inode donne les renseignements concernant des divers droits, les diverses dates, ainsi que des pointeurs.
Dans le cas d'un répertoire, un seul bloc de données est souvent suffisant (et donc un seul pointeur).

Le bloc pointé par ce pointeur comprend différentes entrées, une pour chaque fichier ou sous-répertoire, avec les éléments suivants :

Les différentes entrées se succèdent, à la file. Le début de la suivante étant déterminé par la longueur de l'actuelle.
Remarque : il est possible d'avoir un "trou" entre deux entrées, ce trou correspondant à une entrée qui a été effacée (inode=0).

Une entrée de répertoire, survolez

C'est l'inode 12, celui d'un répertoire, qui est analysé (le pointeur revoie au bloc 2Fh = 47)
Son adresse est alors 47 * 1024 = 48128 = BC00h) :

taille début  fin  valeur (disquette) Description
  4   BC00h BC03h  0C 00 00 00 =   12 inode de la première entrée (12 puisque . représente le répertoire actuel)
  2   BC04h BC05h  0C 00       =   12 Longueur de cette entrée
  1   BC06h BC06h  01          =    1 Longueur du nom de l'entrée
  1   BC07h BC07h  02          =    2 Type de l'entrée (1=fichier, 2=répertoire)
  1   BC08h BC08h  2E                 Nom = . (longueur définie ci-dessus = 1)
Le début de cette 2ème entrée est défini ci-dessus par la longueur de la 1ère entrée
  4   BC0Ch BC0Fh  02 00 00 00 =    2 inode de la 2ème entrée (2 puisque .. revient au répertoire racine de ce système de fichiers)
  2   BC10h BC11h  0C 00       =   12 Longueur de cette entrée
  1   BC12h BC12h  02          =    2 Longueur du nom de l'entrée
  1   BC13h BC13h  02          =    2 Type de l'entrée (1=fichier, 2=répertoire)
  2   BC14h BC15h  2E 2E              Nom = .. (longueur définie ci-dessus = 2)
Le début de cette 3ème entrée est défini ci-dessus par la longueur de la 2ère entrée
  4   BC18h BC1Bh  0D 00 00 00 =   13 inode de la 3ème entrée
  2   BC1Ch BC1Dh  10 00       =   16 Longueur de cette entrée (elle peut 'recouvrir' des entrées effacées)
  1   BC1Eh BC1Eh  07          =    7 Longueur du nom de l'entrée
  1   BC1Fh BC1Fh  01          =    1 Type de l'entrée (1=fichier, 2=répertoire)
  3   BC20h BC26h  2E 62 61 73 68 72 63 Nom = .bashrc (longueur définie ci-dessus = 7)
Le début de cette 4ème entrée est défini ci-dessus par la longueur de la 3ère entrée
  4   BC28h BC2Bh  0E 00 00 00 =   14 inode de la 4ème entrée
  2   BC2Ch BC2Dh  D8 03       =  984 Longueur de cette entrée (étant la dernière entrée utilisée, elle couvre le reste du bloc)
  1   BC2Eh BC2Eh  05          =    5 Longueur du nom de l'entrée
  1   BC2Fh BC2Fh  01          =    1 Type de l'entrée (1=fichier, 2=répertoire)
  3   BC20h BC22h  2E 64 6D 72 73     Nom = .dmrc (longueur définie ci-dessus = 5)
Cette 5ème entrée correspond au fichier qui a été effacé
  4   BC38h BC3Bh  00 00 00 00 =      inode de la 5ème entrée : sa valeur est ramenée à 0 lors de l'effacement
  2   BC3Ch BC3Dh  C8 03       =  968 Longueur de cette entrée, l'ancienne valeur n'est pas modifiée
  1   BC3Eh BC3Eh  10          =   16 Longueur du nom de l'entrée
  1   BC3Fh BC3Fh  01          =    1 Type de l'entrée (1=fichier, 2=répertoire)
  3   BC30h BC32h  2E 78 73 65 73 73 69 6F 6E 2D 65 72 72 6F 72 73 Nom = .xsession-errors (longueur définie ci-dessus = 16)
			
Haut

 Trouver le contenu d'un fichier

Avec Linux, le nom complet d'un fichier consiste en une suite de répertoires séparés par '/' (le chemin d'accès), suivi du nom du fichier. Exemple :
/tmp/.dmrc où le premier / est le répertoire racine de la disquette et tmp est le répertoire contenant le fichier.

Nous avons vu, ci-dessus, que l'inode du répertoire racine porte le numéro 2 (parmi les inodes réservés). C'est notre point de départ.

Examen de cet inode 2 : d'après la table des inodes, il se trouve en 2880, le premier pointeur se trouve en 28A8 et contient 21h, ce qui veut dire qu'il pointe le bloc N° 33, situé en 8400h (1024 * 33 = 33692 = 8400h). Ce bloc contient des entrées de répertoires.
En dehors des répertoires . et .., il y a deux autres entrées : lost+found (inode11) et tmp (inode 12).

Examen de cet inode 12 : d'après la table des inodes, il se trouve en 2D80, le premier pointeur se trouve en 2DA8 et contient 2Fh, ce qui veut dire qu'il pointe le bloc N° 47, situé en BC00h (1024 * 47 = 48128 = BC00h). Ce bloc contient des entrées de répertoires.
En dehors des répertoires . et .., il y a trois autres entrées, des fichiers : .bashrc (inode13), .dmrc (inode 14) et .xsession-errors (inode 15).

Examen de cet inode 14 (correspondant à .dmrc) : d'après la table des inodes, il se trouve en 2E80,, le premier pointeur se trouve en 2EA8 et contient 31h,, ce qui veut dire qu'il pointe le bloc N° 49, situé en C400h (1024 * 49 = 50176 = C400h).

Ce fichier est un fichier texte commençant par : [Desktop]...

Haut

 Effacement d'un fichier

Sur ma disquette de test, j'efface le fichier .xsession-errors.

Que se passe-t-il lorsque j'efface le fichier ?

superbloc

blocs libres : le nombre est augmenté du nombre de blocs utilisés par le fichier
inodes libres : le nombre est augmenté de 1

descripteur de groupe

blocs libres dans le groupe : le nombre est augmenté du nombre de blocs utilisés par le fichier
inodes libres dans le groupe : le nombre est augmenté de 1

bloc bitmap

le(s) bloc(s) correspondant(s) est(sont) libéré(s)

inode bitmap

l'inode correspondant est libéré

table des inodes

dans l'inode correspondant au fichier,
la date d'effacement est complétée,
le nombre de liens est ramené à 0,
mais le nom du fichier et le pointeur ne sont pas modifiés et les données restent accessibles

Haut