Systèmes de fichiers sous Linux : Guide complet
Systèmes de fichiers sous Linux : Guide complet
1 – Présentation :
Un système de fichier (FS pour File System) définit la façon dont seront stockées les informations
sur les mémoires de masse (périphériques de stockage type disque dur) ainsi que l'organisation
des fichiers. Il permet aussi à l'utilisateur d'accéder aux fichiers de manière transparente.
Chaque système de fichier est plus ou moins lié à un système d'exploitation particulier :
- Windows :
o FS d'installation : FAT, NTFS
o FS reconnus en natif : FAT, NTFS, ExFAT
- Linux :
o FS d'installation : ext, ReiserFS, etc…
o FS reconnus en natif : tous (ou presque)
2 – Principes de base :
a – Le bloc :
C'est l'unité de base, indivisible, du système de fichier. Par conséquent, un fichier sera composé
d'un nombre fini de blocs, et d'au moins 1 bloc.
Le choix de la taille d'un bloc est donc primordiale sur les performances d'un système de fichiers :
- Si on choisit un bloc de grande taille, on gaspillera de l'espace disque pour les petits
fichiers. En effet, soit un disque de 500Go avec des blocs de 8ko. On aura donc
536 870 912 000/8 192=65 536 000 blocs. On pourra donc remplir entièrement le
disque avec 65 536 000 fichiers de 1 octet, en n'utilisant effectivement que 62,5 Mo
du disque.
Or, statistiquement, la majorité des fichiers sont des fichiers de petite taille.
Sous Linux, la taille de blocs par défaut est de 4096 octets (4ko).
b – Le super bloc :
Les systèmes de fichiers sous Linux possède tous au moins un superbloc. Celui-ci contient des
informations sur le système de fichier lui-même :
- Son type
- Sa taille
- Son statut
- La localisation d'autres zones de méta-données (superblocs secondaires, tables
d'inodes)
1
Le superbloc est une zone critique du disque : sa corruption peut entraîner une impossibilité de
lire les données stockées sur le disque. C'est pour cela qu'il en existe des copies synchrones sur
le disque : si le superbloc primaire ne peut être lu, alors c'est le secondaire qui sera utilisé.
c - Les inodes :
Un inode (ou i-nœud) est une structure de données associée à un fichier physique sur le disque,
et un seul, contenant des informations sur ce fichier et son contenu. Les inodes sont stockés
dans la table d'inode située après le superbloc.
On peut connaître le numéro de l'inode associé à un fichier avec l'option –i de la commande ls.
Exemple :
user1@debian7:~/rep1$ ls -il
total 4
132344 -rw-r--r-- 3 user1 user1 84 oct. 26 18:20 fic1
132336 -rw-r--r-- 2 user1 user1 168 oct. 26 17:02 fic2
392635 -rw-r--r-- 1 user1 user1 0 nov. 16 21:31 fic3
NB : les fichiers du FS qui sont des liens physiques vers le même fichier physique ont le même
numéro d'inode.
La norme POSIX définit les attributs qu'un inode doit au minimum posséder pour un fichier :
- taille du fichier
- identifiant du périphérique où se trouve le fichier
- propriétaire du fichier
- groupe du fichier
- numéro d'inode du fichier
- droits du fichier
- date de dernière modification de l'inode (change time)
- date de dernière modification du contenu du fichier (modification time)
- date de dernier accès au fichier (access time)
- nombre de liens physiques sur le fichier
Un inode contient aussi les adresses des blocs disque composant le fichier physique.
2
3
Cette méthode a de nombreux avantages :
- les fichiers de petite taille (les plus nombreux) sont accessibles rapidement en
adressage direct (avec des blocs de 4K, jusqu'à une taille de 4*12=48ko) ou en
indirection simple (jusqu'à une taille de (1024+12)*4=4144ko≈4Mo).
- Le système peut gérer des fichiers de grande taille (jusqu'à une taille de
(12+1024+10242+10243)*4=4To).
d – Les répertoires :
Comme on l'a vu, le nom du fichier ne se trouve pas dans l'inode. Il se trouve dans le répertoire
que l'on peut voir comme un tableau à 2 colonnes qui contient les inodes et les noms des fichiers
associés qui se trouvent dans le répertoire.
ext4 est le système de fichiers par défaut des systèmes Linux récents. Il est considéré comme
stable depuis le noyau 2.6.28.
ext4 :
- supporte les types de fichiers standards Unix suivants : fichiers réguliers, répertoires,
fichiers périphériques spéciaux et liens symboliques.
- implémente des liens symboliques rapides. Un lien symbolique rapide n'utilise aucun
bloc de donnée sur le système de fichiers.
- permet la journalisation.
- supporte les volumes de très grande capacité (jusqu'à 1 Eo (260 octets)) et les fichiers
jusqu'à 16 To).
- Supporte les extents : l'allocation des blocs est contigüe et permet donc de réduire la
fragmentation tout en augmentant les performances sur les gros fichiers. De plus, il
faut moins de métadonnées pour stocker les informations des blocs grâce à leur
contiguïté.
- est rétro-compatible avec ext2 et ext3 qui peuvent être montés en ext4.
ReiserFS est un autre système de fichiers utilisé sous Linux, même s'il l'est beaucoup moins que
les ext.
ReiserFS :
- est très efficace sur les petits fichiers.
4
4 – Dénomination des disques :
Les fichiers désignant les périphériques se trouvent dans le répertoire /dev. La nomenclature
pour désigner les disques (ou les partitions) est très précise sous linux et a la forme suivante :
/dev/sdXY
On peut voir la liste des partitions d'un système linux avec la commande :
fdisk –l
C'est la commande mkfs (make file system) qui permet de créer un système de fichier sur un
disque.
Il n'y a pas de formatage à proprement parler sous Linux, l'appel à mkfs écrit le système de
fichier sans la phase préalable de remplissage du disque par des zéros et la vérification des
secteurs du formatage sous windows.
Syntaxe :
En fait, mkfs est un alias : grâce au paramètre typeFS, ce sont les commandes mkfs.typeFS qui
seront appelées : mkfs.ext4 sera exécutée quand on exécutera mkfs –t ext4.
5
II – Montage d'un périphérique :
1 – Définition :
Avant de pouvoir accéder à un périphérique de stockage, il faut le monter. C'est-à-dire qu'il faut
lui attribuer un point d'entrée dans l'arborescence du système de fichiers.
Le point d'entrée sera un répertoire déjà existant du système de fichiers, qui sera appelé point de
montage.
Si le point de montage n'est pas vide, alors son contenu sera inaccessible le temps que le
périphérique y sera monté. On pourra de nouveau y accéder une fois le périphérique démonté.
2 – La commande mount :
Sans argument, ni option, elle affiche la liste des partitions montées sur le système, avec les
options de montage associées, et les points de montage.
Syntaxe :
qui permet de monter un périphérique sans connaître sa dénomination, uniquement avec le label
défini lors de la création du système de fichiers. Cela est notamment très pratique si l'on change
l'ordre des disques.
Options de montage :
sync/async : les écritures sur le périphérique seront effectuées en temps réel (sync : plus sûr
mais plus lent) ou différées via un tampon (async : plus performant mais moins sûr).
user/nouser : n'importe qui peut monter le système de fichiers (user) ou seul le root le peut
(nouser)
Pour modifier une option d'un système déjà monté, on utilise l'option remount en plus de l'option
concernée (sur les FS compatibles avec cette option, sinon on démonte et remonte).
6
Démontage d'un système de fichiers :
Syntaxe :
umount point_de_montage
umount ne fonctionnera pas si au moins un fichier du périphérique concerné est utilisé par un
processus.
Syntaxe :
lsof point_de_montage
La commande fuser (à installer avec le paquet psmisc) avec l'option –k permet de tuer tout
processus accédant à un point de montage particulier :
fuser -k point_de_montage
3 – Le fichier /etc/fstab :
où - périphérique :
o dénomination du périphérique à monter (/dev/sdXY)
o label du périphérique à monter (LABEL=nom_du_label)
o UUID du périphérique à monter (UUID=valeur_de_l'uuid)
NB : on trouve les labels et UUIDs des différents disques dans les répertoires /dev/disk/by-label
et /dev/disk/by-uuid.
Tous les systèmes de fichiers contenus dans /etc/fstab ne contenant pas l'option noauto seront
montés automatiquement lors du boot : / est monté en premier, puis le swap, les autres
systèmes de fichiers et enfin les systèmes de fichiers virtuels (/proc, /sys, etc…).
Un périphérique déclaré dans /etc/fstab pourra être monté manuellement avec mount en lui
passant seulement l'identifiant de périphérique utilisé dans le fichier ou le point de montage.
La commande mount –a permet de monter tous les systèmes de fichiers déclarés dans /etc/fstab.
7
II – GRUB :
1 – Définition :
GRUB (GRand Unified Bootloader) est un chargeur de système. Il est exécuté après la phase de
démarrage matériel de la machine (BIOS ou UEFI) et va permettre à l'utilisateur de choisir (le cas
échéant) puis de lancer l'amorce du système d'exploitation.
Il peut gérer de nombreux systèmes d'exploitation : il est capable de charger un autre chargeur
de démarrage pour les systèmes qu'il ne gère pas en natif (par exemple pour Windows). Il peut
même charger par le réseau des images de systèmes d'exploitation et démarrer dessus.
2 – Fonctionnement :
GRUB est d'abord chargé en mémoire à partir du secteur de démarrage du disque dur.
Ensuite, il affiche un menu de sélection du système à charger (en mode graphique ou texte selon
la nature de la distribution qui l'a installé).
Une fois le système choisi ou le temps alloué à la sélection écoulé, soit GRUB laisse la main à un
autre chargeur pour les systèmes qu'il ne peut gérer (Windows), soit il charge le noyau du
système demandé et lui laisse la main (Linux et dérivés).
8
3 – Passage d'options au noyau :
Il est possible de passer au noyau Linux diverses options lors de la phase de démarrage via
GRUB.
Lorsque GRUB propose le choix parmi les différents systèmes qu'il est possible de charger, il faut
se mettre sur le système concerné et taper "e". S'ouvre alors le fichier de configuration de GRUB
pour le chargement du système concerné :
Dans ce fichier, la commande "linux" permet de charger le noyau. On définit les options après la
déclaration du noyau à charger (qui est un fichier de /boot dont le nom commence par vmlinuz).
root=UUID=66642ac1-3194-4ff2-87d5-c3d854238880
ro
quiet
root indique quel est le disque qu'il faudra monter en racine de l'arborescence (/). Ici, c'est
l'UUID du disque qui est utilisé pour le dénommer.
9
4 – Quelques options de démarrage :
nom=valeur1, valeur2, …
Où nom est le nom de l'option et valeur1, valeur2, etc… sont les valeurs éventuelles qu'on leur
donne.
10
5 - Configuration de GRUB2 :
Les scripts de /etc/grub.d sont numérotés pour être exécutés dans un ordre précis :
11
6 – Réparation de GRUB :
Il peut arriver que GRUB ne fonctionne plus et donc ne donne plus accès au système
d'exploitation. Cela peut arriver après une mauvaise configuration de grub.cfg, après l'installation
d'un OS qui a écrasé GRUB (Windows par exemple) ou tout simplement si on s'est trompé lors de
l'installation de Linux et qu'on n'a pas demandé l'installation de GRUB.
Cela se manifeste par un démarrage direct de Windows ou par un écran noir au démarrage, sans
aucune invite de commande.
Dans ces cas-là, il faut accéder au système pour (ré)installer GRUB avec la commande grub-
install.
La façon la plus simple pour cela est d'utiliser un périphérique amorçable qui contient une
distribution dédiée à ce genre de problèmes, telle que SuperGRUB.
NB : Pour une machine virtuelle, il suffit de mettre l'ISO de Supergrub dans le lecteur optique
virtuel et de démarrer. Supergrub va alors se charger.
Une fois SuperGRUB installé sur le périphérique amorçable, il faut démarrer la machine dessus
(via le BIOS ou l'UEFI), et sélectionner la détection de systèmes d'exploitation :
Vous arrivez alors sur un écran où se trouvent tous les OS présents sur votre machine :
12
Il faut alors choisir le système Linux et le lancer.
Si tout se passe bien, il est alors possible de se connecter au système.
root@debian:~#grub-install /dev/sdX
13
b – Erreur dans GRUB :
Il se peut que le fichier grub.cfg soit mal configuré et provoque une erreur. On se retrouve alors
avec une invite de commande grub> :
14
La commande 'ls' permet d'afficher les partitions du disque. Elles s'affichent sous la forme
(hdX,msdosY) où X représente le numéro du disque et Y celui de la partition.
Il faut alors chercher la partition contenant le système d'exploitation. Pour la reconnaître, elle
contient les répertoires de la FHS linux.
On va charger le noyau Linux à la main avec la commande linux en lui passant le nom du fichier
noyau et l'identifiant du disque racine :
où
- le nom du fichier noyau commence par vmlinuz (utiliser la tab-completion pour le nom
exact)
- la valeur de Z dépend de la valeur de X (si X=0 alors Z=a, si X=1 alors Z=b, etc…) et T
prend la valeur de Y.
On va ensuite charger une image minimale du système d'exploitation, sous la forme d'un disque
RAM (en mémoire vive), qui permettra de charger le système de fichiers principal par la suite :
grub>initrd /nom_du_fichier_du_ramdisk
où le nom du ramdisk commence par initrd (utiliser la tab-completion pour obtenir le nom
complet).
Une fois connecté au système, on doit réinstaller GRUB proprement (voir a-) ou corriger les
erreurs dans grub.cfg.
15
III – Les quotas disques
1 - Définition :
Ils permettent de fixer des limites par utilisateur ou par groupe sur le nombre de fichiers (limite
sur le nombre d'inodes) ou sur la taille du disque utilisée (limite sur le nombre de blocs).
Il existe, pour chaque type de quotas (groupe, utilisateur, inodes, blocs) deux limites :
- Limite dure : la quantité de blocs ou d'inodes définis par cette limite ne pourra jamais
être dépassée. Quand elle est atteinte, plus aucune création de fichiers ou augmentation
de taille de fichier possible.
- Limite douce : elle pourra être temporairement dépassée. On définit alors un délai de
grâce laissant le temps à l'utilisateur/groupe de revenir sous la limite douce. Au-delà de
ce temps la limite douce devient dure.
2 - Mise en place :
Il faut ensuite indiquer que les quotas seront activés lors du montage du système de fichiers où
ils seront mis en place.
Dans /etc/fstab, il faut ajouter sur la ligne du système de fichiers concerné, dans les options :
- usrquota pour activer les quotas par utilisateurs.
- grpquota pour activer les quotas par groupes.
aquota.user et aquota.group
avec la commande :
16
3 – Gestion des quotas :
NB : Par défaut, l'éditeur de texte est vi, on peut le changer avec la commande :
update-alternatives - -config editor
Système de fichiers – Nombre de blocs utilisés - Limite douce sur les blocs - Limite dure sur les
blocs - Nombre d'inodes utilisés - Limite douce sur les inodes - Limite dure sur les inodes
repquota point_de_montage permet d'afficher les quotas en cours sur le point de montage.
quotacheck -c point_de_montage : met à jour les fichiers de quotas (quotaoff conseillé avant)
4 – Délai de grâce :
Système de fichiers - Délai de grâce pour les blocs - Délai de grâce pour les inodes
17
IV - Commandes de gestion des disques :
blkid : affiche ou recherche les identifiants des périphériques blocs connectés au système (qu’ils
soient montés ou non) :
- la dénomination système
- l’UUID
- le label s’il existe
- le type du système de fichiers
blkid permet aussi de rechercher des périphériques répondant à certaines caractéristiques avec
l’option –t NOM=valeur.
Exemple :
root@debian7:~# blkid
/dev/sdb1: UUID="a3ed2fcf-8420-4c9e-94e4-3c5471ba5dd0" TYPE="ext4" PARTUUID="523ed54e-01"
/dev/sda1: UUID="8e3888f6-8b02-483e-ab3f-9ef66f34fbd8" TYPE="ext4" PARTUUID="8d9b7322-01"
/dev/sda5: UUID="53b58954-2957-4918-a065-91086432c194" TYPE="swap" PARTUUID="8d9b7322-05"
/dev/sr0: UUID="2016-01-19-16-46-09-00" LABEL="VBOXADDITIONS_5.0.14_105127" TYPE="iso9660"
root@debian7:~# blkid -t TYPE=ext4
/dev/sdb1: UUID="a3ed2fcf-8420-4c9e-94e4-3c5471ba5dd0" TYPE="ext4" PARTUUID="523ed54e-01"
/dev/sda1: UUID="8e3888f6-8b02-483e-ab3f-9ef66f34fbd8" TYPE="ext4" PARTUUID="8d9b7322-01"
root@debian7:~#
2 - Occupation du disque :
options :
-h : affichage en unité lisible.
-s : n'affiche que la taille totale de l'arborescence demandée.
18
3 – Maintenance :
fsck (File System Consistency checK) : permet de vérifier la cohérence d'un système de fichiers.
C'est une commande interactive : en cas de problème, elle demandera à l'utilisateur quoi faire
(option -p pour lancer une réparation automatique).
fsck est lancé automatiquement au démarrage du système, si le système de fichiers n'a pas été
vérifié depuis un certain temps ou depuis un certain nombre de montages.
19
V - Droits d'accès étendus :
1 - SUID et SGID :
Ces droits permettent de lancer un exécutable en endossant les droits du propriétaire du fichier
(SUID) ou du groupe auquel appartient le fichier (SGID).
Exemple :
La commande passwd modifie les fichiers d'utilisateurs normalement modifiables seulement par
le root. Elle possède donc le droit SUID donnant les droits root sur cette commande à ceux qui
l'utilisent.
Ce droit se matérialise par un s à la place du x dans les droits user (SUID) et dans les droits
group (SGID) :
Exemple :
Si le droit d'exécution n'est pas accordé, mais le SUID ou le SGID oui, ce qui est totalement
illogique, le SUID et le SGID concernant l'exécution, on aura un S à la place du s.
Exemple :
(S majuscule car le SGID est activé, mais il n'y a pas de droit en exécution pour le groupe)
2 - Le sticky bit :
Il permet de mettre en place une protection contre l'effacement de fichier dans un répertoire.
Il est notamment utile dans les répertoires publics où tout le monde a le droit de lire et d'écrire.
Comme c'est le droit en écriture du répertoire où il se trouve qui permet d'effacer un fichier, tout
le monde peut supprimer tous les fichiers.
Le stick bit, appliqué au répertoire, permet de supprimer la possibilité par un utilisateur d'effacer
un fichier qui ne lui appartient pas. Il pourra toujours le lire et le modifier.
20
Exemple :
3 - Changement de groupe/propriétaire :
Un utilisateur peut changer le groupe d'un fichier s'il fait partie du nouveau groupe et que le
fichier lui appartient :
21
VI - Localisation de fichiers :
1 - L'arborescence Linux :
2 - Recherche de fichiers :
a – Recherche statique :
La commande locate se base sur une base de données contenant l'emplacement de tous les
fichiers du système. Elle est donc très rapide mais ne prend pas en compte les modifications
depuis la dernière mise à jour de la base de données.
b – Recherche dynamique :
L'action par défaut est -print, qui affiche les résultats à l'écran
Critères de recherche :
Nom de fichier :
-name nom : recherche par nom de fichier, on peut utiliser les méta-caractères du shell (protégés
par desguillemtes ou des quotes), sensible à la casse.
-iname : idem –name mais non sensible à la casse.
22
Exemple :
Taille de fichier :
-size +nb: retourne les fichiers dont la taille est supérieure à nb blocs.
-size -nb: retourne les fichiers dont la taille est inférieure à nb blocs.
-size nb: retourne les fichiers dont la taille est égale à nb blocs.
Exemple :
user1@debian7:~$ find . -size +1M -print
./.cache/tracker/meta.db-wal
./.cache/tracker/meta.db
user1@debian7:~$
23
Date de modification :
Exemples :
Les critères -atime et –ctime fonctionnent comme mtime, mais concernent la date d'accès et la
date de création.
On a aussi les critères –mmin, -amin et –cmin qui fonctionnent de la même façon, mais avec les
minutes.
Utilisateur :
Multi-critères :
Exécution de commande :
Il est possible d'exécuter une commande sur les fichiers trouvés avec la directive –exec
On peut passer à la commande le nom des fichiers trouvés via la chaine '{ }'
Exemple :
24
c – Recherches sur les commandes :
• which nomcommande
• whereis nomcommande
25