12 février 2014

Systèmes de fichiers

Un système de fichiers (SGF) ou file system (fs) est chargé de gérer l’organisation des informations mémorisées sur les périphériques de bloc tels que les disques durs, clef USB...
L’ext (extended file system) est le premier fs pour GNU/Linux créé en 1992 par Rémy Card pour pallier les nombreuses limitations du système de fichiers utilisé jusqu’alors, Minix FS de Andrew Tanenbaum. La longueur maximale du nom de fichier est de 14 caractères. Une partition n’excède pas plus de 64 Mio...
Puis ext est remplacé par ext2, lequel est inclus dans le noyau Linux 0.99.15 en décembre 1993.

1. EXT2

Le Second Extended File System, plus connu sous le nom ext2, utilise le bloc comme unité de stockage.
Les caractéristiques de ext2 :
Caractéristique
Capacité
Taille maximale de fichier
16 Gio - 2 Tio
Nombre maximal de fichiers
Variable
Taille maximale du nom de fichier
255 caractères
Taille maximale de volume
2 Tio - 32 Tio
Taille maximale d’une partition
32 Tio

a. Bloc

Une partition ou un disque formatés avec ext2 est divisé en petits groupes de secteurs appelés « blocs ». Ces blocs sont ensuite regroupés en grandes unités appelées « groupes de blocs ».
La taille des blocs est déterminée pendant le formatage du disque. Ceci a un impact sur les performances, la taille maximale d’un fichier, et la taille maximale du système de fichiers. Les tailles de bloc couramment mises en œuvre sont 1 Kio, 2 Kio, 4 Kio et 8 Kio.
La commande badblocks permet de rechercher des blocs défectueux sur un périphérique de bloc, plus particulièrement une partition de disque.
Syntaxe
badblocks <options> <partition>
Options nécessaires :
Option courte
Description
-n
Utilise le mode de non-destruction lecture/écriture (read/write).
-v
Mode verbeux (verbose).
-s
Affiche la progression en %.
Exemple avec Debian :
Analyser en mode non-destruction lecture/écriture la partition /dev/sdb1 :
# badblocks -nvs /dev/sdb1 
Vérification des blocs défectueux dans un mode non destructif de  
lecture-écriture  
Du bloc 0 au bloc 5242879  
Vérification des blocs défectueux (test non destructif de lecture- 
écriture)  
Test en cours avec un motif aléatoire : complété 
Passe complétée, 0 blocs défectueux repérés. (0/0/0 erreurs) 
Dans cet exemple, aucun bloc n’est défectueux.

b. Superbloc

Le superbloc (superblock) contient toutes les informations relatives à la configuration du système de fichiers comme le nombre total d’inodes, les blocs du système de fichiers et le nombre d’inodes disponibles, etc. Il existe plusieurs copies du superbloc sur le disque.
La commande dumpe2fs affiche des informations provenant du superbloc.
Syntaxe
dumpe2fs <option> <partition>
Option nécessaire :
Option courte
Description
-h
Affiche uniquement les informations de superbloc.
Exemple avec Debian
Afficher les informations du superbloc de la partition /dev/sdb1 :
# dumpe2fs -h /dev/sdb1  
dumpe2fs 1.42.5 (29-Jul-2012)  
Filesystem volume name:   <none>  
Last mounted on:          <not available>  
Filesystem UUID:          d83eb92e-9575-4756-b606-c653c1c4702d  
Filesystem magic number:  0xEF53  
Filesystem revision #:    1 (dynamic)  
Filesystem features:      ext_attr resize_inode dir_index filetype  
sparse_super large_file  
Filesystem flags:         signed_directory_hash  
Default mount options:    user_xattr acl  
Filesystem state:         clean  
Errors behavior:          Continue  
Filesystem OS type:       Linux  
Inode count:              183264  
Block count:              732160  
Reserved block count:     36608  
Free blocks:              719574  
Free inodes:              183253  
First block:              0  
Block size:               4096  
Fragment size:            4096  
Reserved GDT blocks:      178  
Blocks per group:         32768  
Fragments per group:      32768  
Inodes per group:         7968  
Inode blocks per group:   498  
Filesystem created:       Sun Sep  1 16:33:34 2013  
Last mount time:          n/a  
Last write time:          Sun Sep  1 16:33:34 2013  
Mount count:              0  
Maximum mount count:      -1  
Last checked:             Sun Sep  1 16:33:34 2013  
Check interval:           0 (<none>)  
Reserved blocks uid:      0 (user root)  
Reserved blocks gid:      0 (group root)  
First inode:              11  
Inode size:               256  
Required extra isize:     28  
Desired extra isize:      28  
Default directory hash:   half_md4  
Directory Hash Seed:      b1ace00e-8575-4a7a-bbd8-6e6a0d0430ca 

c. Inodes

L’inode (« index » et « node ») est une structure de données qui contient des informations sur les fichiers stockés comme leur créateur, leur propriétaire, leur type d’accès... Un numéro d’inode correspond à un fichier dans le système de fichiers. Le nombre maximum d’inodes, et donc le nombre maximum de fichiers et de dossiers, est défini lors de l’installation du système de fichiers.
Les 10 premiers champs sur 13 contiennent les adresses des 10 premiers blocs de données du fichier à raison d’une adresse par bloc. Si les blocs sur lesquels pointent les 10 premiers champs ne sont pas suffisants alors les champs 11, 12 et 13 sont utilisés. Ils fonctionnent selon un système d’indirection. Il existe trois niveaux d’indirection :
  • La simple indirection, utilisée par le champ 11.
  • La double indirection, utilisée par le champ 12.
  • La triple indirection, utilisée par le champ 13.
images/08EI16.png
Le champ 11 est une simple indirection. Il pointe vers un bloc d’adresses. Ce bloc d’adresses contient 256 pointeurs vers des blocs de données.
Si besoin, le système peut utiliser le bloc 12 qui est une double indirection. Ce bloc pointe comme le champ 11 vers un bloc d’adresses. Cependant, ce dernier ne pointe pas vers 256 blocs de données. Il pointe vers 256 autres blocs d’adresses, lesquels pointent vers 256 blocs de données.
Quant au 13ème champ, il correspond à une triple indirection. Il pointe vers un bloc de 256 adresses. Chaque bloc pointe sur un bloc de 256 adresses qui pointent elles aussi sur 256 blocs d’adresses. Ces dernières pointent à leur tour vers 256 blocs de données.
La taille maximale d’un fichier peut alors être calculée en multipliant par 1024 octets le nombre de blocs de données total : 1024 * (10 + 256ˆ1 + 256ˆ2 + 256ˆ3).
La commande stat est le nom d’un appel système mais aussi d’une commande faisant partie du paquetage coreutils ou GNU core utilities. Cet outil permet d’obtenir des informations sur des fichiers ou les répertoires.
Syntaxe
stat <fichier>
Pas d’options pour cette commande.
Exemples avec Debian :
# stat $(which ls)  
  Fichier : « /bin/ls »  
   Taille : 114032      Blocs : 224     ES blocs : 4096   fichier  
Device : fe00h/65024d   Inode : 130948      Liens : 1  
Accès : (0755/-rwxr-xr-x)  UID : (  0/  root)   GID : (  0/  root)  
Accès : 2013-09-01 12:30:44.830431016 +0200  
Modi. : 2013-01-26 22:07:42.000000000 +0100  
Chgt  : 2013-07-22 18:32:20.398809963 +0200  
Créé  : - 

d. Créer un système de fichiers ext2

La commande mke2fs permet de formater une partition au format ext2 à condition qu’elle ne soit pas montée.
Syntaxe
mke2fs <partition>
Pas d’options pour cette commande.
Exemple avec Debian
Créer un système de fichiers ext2 sur /dev/sdb1 :
# mke2fs /dev/sdb1  
mke2fs 1.42.5 (29-Jul-2012)  
Étiquette de système de fichiers=  
Type de système d’exploitation : Linux  
Taille de bloc=4096 (log=2)  
Taille de fragment=4096 (log=2)  
« Stride » = 0 blocs, « Stripe width » = 0 blocs  
183264 i-noeuds, 732160 blocs  
36608 blocs (5.00%) réservés pour le super utilisateur  
Premier bloc de données=0  
Nombre maximum de blocs du système de fichiers=750780416  
23 groupes de blocs  
32768 blocs par groupe, 32768 fragments par groupe  
7968 i-noeuds par groupe  
Superblocs de secours stockés sur les blocs :  
   32768, 98304, 163840, 229376, 294912  
 
Allocation des tables de groupe : complété  
Écriture des tables d’i-noeuds : complété 
Écriture des superblocs et de l’information de comptabilité du  
système de fichiers : complété 

2. EXT3

Développé par Stephen Tweedie, ext3 est une évolution de ext2 qui permet de journaliser le système de fichiers. Il est présent dans la branche 2.4.15 du noyau Linux en novembre 2001.
Un système qui sait lire et écrire une partition ext2 est parfaitement capable de lire et d’écrire une partition ext3 sans la journalisation.
Les caractéristiques de ext3 sont identiques à celles de ext2.

a. La journalisation

Un journal trace les opérations d’écriture tant qu’elles ne sont pas terminées, et cela en vue de garantir l’intégrité des données en cas d’arrêt brutal.
L’intérêt est de pouvoir plus facilement et plus rapidement récupérer les données en cas d’arrêt brutal du système d’exploitation puisque les partitions n’ont pas été correctement synchronisées.
Sans la journalisation, un outil de récupération de données utilisé après un arrêt brutal doit parcourir l’intégralité du système de fichiers pour vérifier sa cohérence. Si la taille du système de fichiers est importante, l’opération peut durer longtemps avec un risque de perte de données.

b. Convertir une partition ext2 en ext3

La conversion s’effectue avec la commande tune2fs à condition que la partition soit démontée.
Syntaxe
tune2fs <option> <partition>
Option nécessaire :
Option courte
Description
-j
Ajoute un journal.
Exemple avec Debian
Convertir /dev/sdb1 :
# tune2fs -j /dev/sdb1  
tune2fs 1.42.5 (29-Jul-2012)  
Création de l’i-noeud du journal : complété

c. Créer un système de fichiers ext3

Vous disposez des commandes mke2fs et mkfs.ext3 :
Syntaxe
mke2fs <option> <partition>
Option nécessaire :
Option courte
Description
-j
Ajoute un journal au système de fichiers.
Syntaxe
mkfs.ext3 <partition>
Pas d’options.
Exemple avec Debian
Créer un système de fichiers ext3 sur /dev/sdb1 en utilisant mke2fs :
# mke2fs -j /dev/sdb1  
mke2fs 1.42.5 (29-Jul-2012)  
Étiquette de système de fichiers=  
Type de système d’exploitation : Linux  
Taille de bloc=4096 (log=2)  
Taille de fragment=4096 (log=2)  
« Stride » = 0 blocs, « Stripe width » = 0 blocs  
183264 i-noeuds, 732160 blocs  
36608 blocs (5.00%) réservés pour le super utilisateur  
Premier bloc de données=0  
Nombre maximum de blocs du système de fichiers=750780416  
23 groupes de blocs  
32768 blocs par groupe, 32768 fragments par groupe  
7968 i-noeuds par groupe  
Superblocs de secours stockés sur les blocs :  
   32768, 98304, 163840, 229376, 294912  
 
Allocation des tables de groupe : complété  
Écriture des tables d’i-noeuds : complété 
Création du journal (16384 blocs) : complété  
Écriture des superblocs et de l’information de comptabilité du  
système de fichiers : complété 
Créer un système de fichiers ext3 sur /dev/sdb1 en utilisant mkfs.ext3 :
# mkfs.ext3 /dev/sdb1  
mke2fs 1.42.5 (29-Jul-2012)  
Étiquette de système de fichiers=  
Type de système d’exploitation : Linux  
Taille de bloc=4096 (log=2)  
Taille de fragment=4096 (log=2)  
« Stride » = 0 blocs, « Stripe width » = 0 blocs  
183264 i-noeuds, 732160 blocs  
36608 blocs (5.00%) réservés pour le super utilisateur  
Premier bloc de données=0  
Nombre maximum de blocs du système de fichiers=750780416  
23 groupes de blocs  
32768 blocs par groupe, 32768 fragments par groupe  
7968 i-noeuds par groupe  
Superblocs de secours stockés sur les blocs :  
   32768, 98304, 163840, 229376, 294912  
 
Allocation des tables de groupe : complété  
Écriture des tables d’i-noeuds : complété  
Création du journal (16384 blocs) : complété  
Écriture des superblocs et de l’information de comptabilité du  
système de fichiers : complété 

3. EXT4

Ext4 garde une compatibilité avec son prédécesseur ext3. Il est considéré comme une étape intermédiaire en attendant une nouvelle génération de système de fichiers. Il est inclus dans le noyau Linux 2.6.19 (29 novembre 2006). Depuis la version 2.6.28 (24 décembre 2008) du noyau, ext4 est considéré comme stable.
Les caractéristiques de ext4 :
Caractéristiques
Capacités
Taille maximale de fichier
16 Tio
Nombre maximal de fichiers
4 milliards
Taille maximale du nom de fichier
256 octets
Taille maximale de volume
1 Eio (limité à 16 Tio par e2fsprogs)
La fonctionnalité majeure de ext4 est l’allocation par « extent » qui permet la pré-allocation d’une zone contiguë pour un fichier afin de minimiser la fragmentation. Elle est active par défaut depuis le noyau Linux 2.6.23. Auparavant, elle devait être explicitement indiquée lors du montage de la partition comme ceci :
# mount /dev/sda1 /mnt/point -t ext4dev -o extents

a. Convertir une partition ext3 en ext4

La conversion s’effectue avec la commande tune2fs à condition que la partition soit démontée.
Syntaxe
tune2fs <option> <partition>
Option nécessaire :
Option courte
Description
-O
Supprime les caractéristiques indiquées du système de fichiers.
uninit_bg permet au noyau d’initialiser la table des blocs et des inodes.
dir_index permet d’utiliser des arbres binaires hachés afin d’accélérer la recherche dans les répertoires de grande taille.
Exemple avec Debian
Convertir en ext4 la partition /dev/sdb1 :
# tune2fs -O extents,uninit_bg,dir_index /dev/sdb1  
tune2fs 1.42.5 (29-Jul-2012)

b. Créer un système de fichiers ext4

Vous disposez des commandes mke2fs et mkfs.ext4 :
Syntaxe
mke2fs <option> <partition>
Option nécessaire :
Option courte
Description
-t
Indique le type de système de fichiers.
Par exemple -t ext4.
Syntaxe
mkfs.ext4 <partition>
Pas d’options pour cette commande.
Exemple avec Debian
Créer un système de fichiers ext4 sur /dev/sdb1 en utilisant mke2fs :
# mke2fs -t ext4 /dev/sdb1  
mke2fs 1.42.5 (29-Jul-2012)  
Étiquette de système de fichiers=  
Type de système d’exploitation : Linux  
Taille de bloc=4096 (log=2)  
Taille de fragment=4096 (log=2)  
« Stride » = 0 blocs, « Stripe width » = 0 blocs  
183264 i-noeuds, 732160 blocs  
36608 blocs (5.00%) réservés pour le super utilisateur  
Premier bloc de données=0  
Nombre maximum de blocs du système de fichiers=750780416  
23 groupes de blocs  
32768 blocs par groupe, 32768 fragments par groupe  
7968 i-noeuds par groupe  
Superblocs de secours stockés sur les blocs :  
   32768, 98304, 163840, 229376, 294912  
 
Allocation des tables de groupe : complété  
Écriture des tables d’i-noeuds : complété 
Création du journal (16384 blocs) : complété  
Écriture des superblocs et de l’information de comptabilité  
du système de fichiers : complété 
Créer un système de fichiers ext4 sur /dev/sdb1 en utilisant mkfs.ext4 :
# mkfs.ext4 /dev/sdb1  
mke2fs 1.42.5 (29-Jul-2012)  
Étiquette de système de fichiers=  
Type de système d’exploitation : Linux  
Taille de bloc=4096 (log=2)  
Taille de fragment=4096 (log=2)  
« Stride » = 0 blocs, « Stripe width » = 0 blocs  
183264 i-noeuds, 732160 blocs  
36608 blocs (5.00%) réservés pour le super utilisateur  
Premier bloc de données=0  
Nombre maximum de blocs du système de fichiers=750780416  
23 groupes de blocs  
32768 blocs par groupe, 32768 fragments par groupe  
7968 i-noeuds par groupe  
Superblocs de secours stockés sur les blocs :  
   32768, 98304, 163840, 229376, 294912  
 
Allocation des tables de groupe : complété 
Écriture des tables d’i-noeuds : complété  
Création du journal (16384 blocs) : complété  
Écriture des superblocs et de l’information de comptabilité du  
système de fichiers : complété 

Aucun commentaire :

Enregistrer un commentaire