CH 19-Les Systèmes de Fichiers Linux
CH 19-Les Systèmes de Fichiers Linux
CH 19-Les Systèmes de Fichiers Linux
1
2 BTS SRI S5 : Système d’exploitation GNU/Linux
Système Caractéristiques
de fichiers
ext2 Extension du système de fichiers ext. Stable, usage général, peut être rétréci
ou agrandi. Ce système de fichiers n'a pas la fonctionnalité de journalisation.
XFS Stable, usage général, une récupération rapide, peut être étendu en ligne
1.1 ext2
Le système de fichier ext2 a été, jusqu'à la fin des années 1990, le système de fichiers de
Linux. Il a la réputation d'un système de fichiers fiable et stable. Il a été éclipsé par d'autres
systèmes de fichiers à journal, mais il a toujours son utilité. En particulier, ext2 peut être un
bon choix pour une petite partition ou pour les disques amovibles de petites tailles. Sur ces
petites partitions, la taille du journal utilisé par ces systèmes de fichiers à journal peut
servir à stocker les données.
1.2 ext3
Le système de fichiers ext3 est une extension de ext2. Il ajoute une fonctionnalité de
journalisation qui augmente sa fiabilité, sans changer la structure fondamentale héritée de
ext2. On peut toujours monter un système de fichiers ext3 comme étant un système de
fichier ext2 en désactivant la fonctionnalité de journalisation.
Il est possible de convertir un système de fichiers ext2 en un système de fichiers ext3
2
2 BTS SRI S5 : Système d’exploitation GNU/Linux
#tune2fs -j /dev/sda2
2
Le système de fichiers ext3 réserve une zone du disque pour le fichier journal . Quand une
opération sur le système de fichiers se produit, les modifications nécessaires sont d'abord
écrites dans le fichier journal. Ensuite le système de fichiers est modifié. Si une coupure de
courant ou une panne système survient pendant la mise à jour, on peut se référer au
fichier journal pour reconstruire un système de fichiers cohérent.
La technique de journalisation permet de réduire considérablement le temps nécessaire au
système de fichiers pour effectuer des contrôles de cohérence. Sauf pour des pannes
matérielles, l'état d'un système de fichiers ext3 peut être presque instantanément évalué et
restauré.
1.3 ext4
Le système de fichier ext4 est la nouvelle génération de la famille ext. ext4 ajoute la
possibilité de travailler avec des disques très volumineux (plus de 32 téraoctets) ou de très
gros fichiers (ceux de plus de 2 To), ainsi que des extensions destinées à améliorer les
performances et à la défragmentation en ligne.
1.4 XFS
Silicon Graphics (SGI) a crée le système de fichier XFS pour son système d'exploitation
IRIX, par la suite elle a donné le code source de XFS à Linux. XFS a acquis une réputation
de robustesse, de rapidité et de flexibilité sur IRIX. La taille d'un système de fichier XFS
peut être agrandie en ligne, à condition qu'il y ait de l'espace non alloué disponible sur le
disque contenant le système de fichiers.
1.5 JFS
IBM a développé le système de fichiers journalisé JFS (Journaled File System) pour son
système d'exploitation AIX. JFS est considéré comme un bon système de fichiers
journalisé qui fonctionne bien avec des fichiers de tailles variables. Il est également
considéré comme un système de fichiers léger qui n'utilise pas de grandes quantités de
CPU lors d'une activité importante du disque.
2
Sur les fichiers journaux, voir « Administration du système GNU/Linux »
3
2 BTS SRI S5 : Système d’exploitation GNU/Linux
Option Description
4
2 BTS SRI S5 : Système d’exploitation GNU/Linux
EXEMPLE
L'exemple suivant illustre la création d'un système de fichiers ext3 sur la partition
/dev/sdb1 :
# mkfs.ext3 /dev/sdb1
mke2fs 1.40.8 (
13-Mar-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
122880 inodes, 489974 blocks
24498 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=503316480
15 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
On peut aussi voir une série de statistiques sur la taille du système de fichiers et comment
l’espace de stockage a été alloué.
5
2 BTS SRI S5 : Système d’exploitation GNU/Linux
EXEMPLE
Le système de fichiers contient 489 974 blocs et 12 2880 inodes. La taille d'un bloc est
4 096 octets. Chaque fichier correspond à un inode unique. L'inode est une structure de
données contenant des informations sur le fichier associé. Les informations stockées dans
un inode sont : l'utilisateur propriétaire du fichier, le groupe propriétaire du fichier, le type
de fichier, les droits d'accès, la date du dernier accès au fichier, la date de dernière
modification du fichier, la date de dernière modification de l'inode, la taille du fichier et les
adresses des blocs disques contenant le fichier.
Et on peut noter que des blocs sont réservés pour le super-utilisateur (root) :
Les blocs réservés pour le super-utilisateur sont définis de sorte qu'un utilisateur autre que
root ne puisse pas remplir tout un système de fichiers. Si c’était le cas, le super-utilisateur
ne pourrait plus se connecter, et les services s’exécutant en tant que super-utilisateur
seraient incapables d’écrire des données sur le disque.
La taille par défaut des blocs réservés pour le super-utilisateur est de 5 % de la taille du
système de fichier. Ce pourcentage convient si le système de fichiers racine a une taille de
quelques gigaoctets. En revanche, si le système de fichiers à une taille d’un téraoctet, la
taille des blocs réservés pour le super-utilisateur est de 50 gigaoctets. Dans ce cas, pour
éviter qu’un tel espace ne puisse être utilisé pour le stockage des données des utilisateurs,
il est logique de modifier le pourcentage.
L'option -m de la commande mkfs.ext3 permet de définir ce pourcentage de blocs réservés
pour le super-utilisateur. Sa valeur est 0 lors de la création du système de fichiers, et on
peut la modifier plus tard avec la commande tune2fs.
Enfin, la sortie de la commande mkfs.ext3 indique qu'on peut modifier les conditions
déclanchement de la vérification automatique du système de fichiers :
Par défaut, une nouvelle vérification est faite dès que l’une des deux conditions suivantes
est réalisée : 25 montages ont été faits depuis la dernière vérification, ou 180 jours se sont
écoulés.
2.2 Le superbloc
Les systèmes de fichiers ext3 et ext2 ont la même structure de base. Cette structure est
composée par un superbloc suivi de plusieurs groupes de blocs :
6
2 BTS SRI S5 : Système d’exploitation GNU/Linux
# dumpe2fs /dev/sda1
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: bb19cad6-586d-48bc-83c1-5bed78bdcd2e
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index
filetype needs_recovery
Inode count: 305824
Block count: 1220932
Reserved block count: 61046
Free blocks: 718222
Free inodes: 280072
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 298
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8048
Inode blocks per group: 503
7
2 BTS SRI S5 : Système d’exploitation GNU/Linux
....
Groupe 1 : (Blocs 32768-65535)
superbloc Secours à 32768, Descripteurs de groupes à 32769-32769
Blocs réservés GDT à 32770-33067
Bitmap de blocs à 33068 (+300), Bitmap d'i-noeuds à 33069 (+301)
Table d'i-noeuds à 33070-33572 (+302)
0 blocs libres, 6818 i-noeuds libres, 243 répertoires
Blocs libres :
I-noeuds libres : 9279-16096
# mkswap /dev/sda2
8
2 BTS SRI S5 : Système d’exploitation GNU/Linux
Option Fonction
-c N Ajuste le nombre maximal de montages entre deux vérifications du système
de fichiers. Si N vaut 0 ou -1, le nombre de fois que le système de fichiers a
été monté sera ignoré par la commande e2fsck et par le noyau.
9
2 BTS SRI S5 : Système d’exploitation GNU/Linux
− blocs de données marqués comme libres mais également utilisés dans un fichier ;
− inodes non référencés ;
− répertoires non reliés au système de fichiers ;
− informations incorrectes dans le superbloc.
Les disques sont généralement analysés au démarrage du système avec la commande
fsck -p. Cette commande examine et corrige les systèmes de fichiers listés dans le fichier
/etc/fstab. Linux garde une trace des systèmes de fichiers qui ont été correctement
démontés. Concernant les systèmes de fichiers qui ne sont pas démontés correctement,
Linux procède à leur analyse et à leur correction. Si une certaine forme de journalisation
est activée, fsck indique que le système de fichiers est journalisé et applique le dernier
état cohérent du système de fichiers.
EXEMPLE
Pour analyser le système de fichiers /dev/sda5 :
# fsck -p /dev/sda5
La commande fsck -p lit le fichier /etc/fstab pour savoir quels sont les systèmes de
fichiers à contrôler. Elle les traite par ordre numérique croissant, en se basant sur la valeur
contenue dans la dernière colonne de chaque ligne. La partition racine est toujours vérifiée
en premier.
Même si tous les démontages des systèmes de fichiers ont été faits correctement, on peut
forcer la vérification après un certain nombre de montages. La valeur par défaut est 25
démontages. C’est une bonne précaution, toutefois, sur les ordinateurs de bureau où les
montages de systèmes de fichiers sont fréquents, faire un fsck tous les 25 montages peut
devenir fastidieux. On peut donc fixer à 50 le nombre maximum de montages entre deux
vérifications.
EXEMPLE
# tune2fs -c 50 /dev/sda3
tune2fs 1.35 (28-Feb-2004)
Setting maximal mount count to 50
10
2 BTS SRI S5 : Système d’exploitation GNU/Linux
# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=152114 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=608454, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# xfs_info /mnt
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=152114 blks
= sectsz=512 attr=2
data = bsize=4096 blocks=608454, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal bsize=4096 blocks=2560, version=2
11
2 BTS SRI S5 : Système d’exploitation GNU/Linux
# xfs_info /mnt
meta-data=/dev/sdb1 isize=256 agcount=8, agsize=65536 blks
12
2 BTS SRI S5 : Système d’exploitation GNU/Linux
= sectsz=512 attr=2
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# df -h /mnt
Sys. de fichiers Taille Uti. Disp. Uti% Monté sur
/dev/sdb1 2,0G 4,3M 2,0G 1% /mnt
− Démontage et montage du système de fichiers afin de s'assurer que toutes les données
et les métadonnées ont été écrites sur le disque. La commande sync ne garantit pas cela
avec le système de fichiers XFS. En effet, les modifications de métadonnées peuvent
être dans le journal sur le disque, mais pas encore dans les inodes.
# umount /mnt
# mount /dev/sdb1 /mnt
13
2 BTS SRI S5 : Système d’exploitation GNU/Linux
# rm -rf /mnt/*
# ls -la /mnt
total 4
drwxr-xr-x 2 root root 6 10 sept. 10:18 .
drwxr-xr-x 22 root root 4096 7 sept. 10:05 ..
# xfsrestore -f /root/sauv .
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.0.4 (dump format 3.0) - Running single-threaded
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: debian
xfsrestore: mount point: /mnt
xfsrestore: volume: /dev/sdb1
…...
14
2 BTS SRI S5 : Système d’exploitation GNU/Linux
EXEMPLE
L'exemple suivant illustre l'utilisation de eCryptFS pour le cryptage des fichiers sur une
partition de type XFS.
− Installation du paquetage ecryptfs-utils :
− Montage de la partition (de type eCryptFS) à chiffrer. Ceci définit une couche permettant
de crypter les données avant d'être traduites sous forme de blocs de données, et écrites
sur la partition /dev/sdb1 :
Passphrase:
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
2) blowfish: blocksize = 16; min keysize = 16; max keysize = 56 (not
loaded)
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not
loaded)
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 (not
loaded)
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded)
Selection [aes]:
15
2 BTS SRI S5 : Système d’exploitation GNU/Linux
− Création d'un fichier crypté sous le répertoire /mnt. Tant que le montage eCryptFS est
actif, on peut lire le contenu de ce fichier :
# umount /mnt
# cat /mnt/fichier1
cat: /mnt/file1: Aucun fichier ou dossier de ce type
# cd /mnt
# ls
ECRYPTFS_FNEK_ENCRYPTED.FWYN9CSdkSZCR-SvSR-
ejPZ3C2geW1FVeA7mPFMk7S6Wbuvx8aelsCNP0---
On peut voir aussi que le nom de fichier /mnt/fichier1 est crypté. On pourra lire à
nouveau ce fichier une fois qu'on monte /mnt en utilisant eCryptFS avec la même clé
définie précédemment.
16
2 BTS SRI S5 : Système d’exploitation GNU/Linux
La commande mkisofs dispose de plusieurs options, certaines sont utilisées pour ajouter
les extensions ISO 9660 :
– -R : ajoute l'extension Rock Ridge, les fichiers conservent alors leurs droits d'accès et
leurs propriétaires ;
– -r : ajoute l'extension Rock Ridge, change les propriétaires des fichiers à root et donne
un accès en lecture seul à tous les utilisateurs ;
– -J : ajoute l'extension Joliet ;
– -T : Crée des tables de traduction des fichiers destinés aux systèmes ne supportant
pas l'extension Rock Ridge ;
17
2 BTS SRI S5 : Système d’exploitation GNU/Linux
# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro,commit=0)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
/dev/sda7 on /home type ext3 (rw,commit=0)
/dev/sda5 on /usr type ext3 (rw,commit=0)
...
/dev/sr0 on /media/disk type iso9660
(ro,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,iocharset=utf8,mode=0400,
dmode=0500)
On peut voir que le périphérique cédérom /dev/sr0 est monté sous le répertoire
/media/disk
– Copier le contenu d'un cédérom vers vers un fichier image :
# dd if=/dev/sr0 of=monimage.iso
18
2 BTS SRI S5 : Système d’exploitation GNU/Linux
$ cdrecord -scanbus
scsibus1:
1,0,0 100) 'MATSHITA' 'DVD-RAM UJ880AS ' '1.50' Removable CD-ROM
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) *
1,6,0 106) *
1,7,0 107) *
19
2 BTS SRI S5 : Système d’exploitation GNU/Linux
Figure 7
uevent
Noyau Linux udev
EXEMPLE
On utilise la commande udevadm monitor --environment pour capturer le message du
noyau (uevent), envoyé suite à la connexion d'un disque USB.
Lorsque le noyau détecte le disque USB, il crée une entrée dans le système de fichiers
sysfs. L'attribut DEVPATH représente l'emplacement de cette entrée dans le répertoire
20
2 BTS SRI S5 : Système d’exploitation GNU/Linux
/sys. L'attribut DEVNAME indique que ce périphérique est le numéro 4 sur le bus USB
numéro 2.
L'attribut PRODUCT indique que le code vendeur est 781, et le code produit 5406. En se
3
référant à la page www.linux-usb.org/usb.ids on peut voir que ces codes correspondent
au vendeur « SanDisk Corp » et à la clé USB « Cruzer Micro U3 ».
Le numéro de séquence est incrémenté pour chaque message uevent émis. Enfin, le
numéro majeur (189) et le numéro mineur (131) de périphérique sont inclus dans le
message uevent. Tous les périphériques gérés par un même pilote ont le même numéro
majeur. Le numéro mineur est utilisé par le noyau afin de distinguer les périphériques
gérés par un même pilote.
Udev examine les attributs du périphérique détecté pour sélectionner et appliquer les
règles correspondantes.
$ cat /sys/block/sdc/size
7978637
L'objet ici est un disque dur sdc représenté par le répertoire /sys/block/sdc/. L'attribut size
du disque est représenté par le fichier /sys/block/sdc/size et a pour valeur la chaîne de
caractères «7978637 » contenue dans le fichier /sys/block/sdc/size.
La commande udevadm permet aussi de recueillir les attributs d'un périphérique à partir de
sa représentation sysfs. Ces informations permettent de construire les règles udev.
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
3
On trouve dans cette page la liste de tous les périphériques USB connus. Chaque périphérique USB
est identifié par un code constructeur et un code produit.
21
2 BTS SRI S5 : Système d’exploitation GNU/Linux
22
2 BTS SRI S5 : Système d’exploitation GNU/Linux
Les opérateurs suivants sont utilisés avec les clés d'assignation :
– = pour assigner une nouvelle valeur à une clé. Si la clé contient déjà une ou plusieurs
valeurs, cette nouvelle valeur les remplace ;
– += pour ajouter une valeur à la clé. Si la clé contient déjà une liste de valeurs, cette
nouvelle valeur est ajoutée à cette liste ;
– := pour assigner une nouvelle valeur à une clé et interdire toute modification ultérieure
par d'autres règles.
Les principales clés utilisées dans les règles udev sont :
– ACTION, contient le nom de l'évènement uevent ;
– DEVPATH, définit le chemin d'accès sysfs aux informations sur le périphérique ;
– KERNEL, indique le nom attribué par le noyau au périphérique ;
– NAME, définit le nom de fichier périphérique à créer sur le répertoire /dev ;
– SYMLINK, contient les noms des liens symboliques à créer ;
– SUBSYSTEM, indique le type de périphérique : block ou character ;
– DRIVER, définit le pilote de périphérique ;
– LABEL, contient une étiquette qui peut être utilisée avec la clé GOTO ;
– GOTO, permet de passer à l'étiquette définie avec la clé LABEL ;
– RUN, indique le nom d’un programme à exécuter.
Des caractères jokers peuvent être utilisés dans les valeurs des clés :
– * : remplace zéro, un ou plusieurs caractères ;
– ? : remplace un et un seul caractère ;
– une liste de caractères entre crochets, par exemple [13478], remplace un et un seul
caractère, qui doit être l’un des caractères listés. Il est possible de spécifier des
intervalles de caractères, par exemple le caractère remplacé par [0-9] peut être
n’importe quel chiffre ;
– une liste de caractères entre crochets et précédée par un point d’exclamation, par
exemple [!13478], remplace un et un seul caractère, qui ne doit être aucun des
caractères listés.
EXEMPLES
KERNEL=="sd[!0-9] correspond aux noms des périphériques sda, sdb, sdc, etc ...
KERNEL=="tty[SR] correspond soit à « ttyS » soit à « ttyR »
Enfin on peut utiliser dans les règles udev des variables prédéfinies. Les variables les
plus utilisées sont :
– %k ou $kernel, nom assigné par le noyau à un périphérique ;
23
2 BTS SRI S5 : Système d’exploitation GNU/Linux
24
2 BTS SRI S5 : Système d’exploitation GNU/Linux
# cat /etc/auto.master
/mnt/nfs /etc/auto.nfs --timeout=10
# cat /etc/auto.nfs
zied -rw 172.31.209.135:/home/zied
hedi -rw 172.31.209.135:/home/hedi
Exercices
1. Quel point de montage doit-on associer avec les partitions swap ?
A. /home
B. /
C. /proc
D. aucun
2. Laquelle des options suivantes est utilisée avec la commande fsck, afin
d'utiliser un type de système de fichiers ?
A. t
B. A
C. f
D. C