Fstab : rôles, outils et types de montage sous Linux
Sommaire
I. Présentation
Il y a peu, nous avons vu comment exploiter les fonctionnalités d’une image initrd. Maintenant, voyons comment interpréter les informations contenues dans le fichier /etc/fstab. Cela amène aussi à étudier les différents montages et à connaître les outils de manipulation de ces mêmes montages.
Je vous propose le découpage en trois parties pour ce petit tutoriel, conçu un peu comme un aide-mémoire à l’intention des administrateurs système :
- Rôle et fonctions du fichier /etc/fstab
- Type de montage
- Outils de manipulation des montages
II. Rôles & fonctions du fichier /etc/fstab
Le fichier /etc/fstab est l’un des plus importants du système GNU/Linux car il permet d’automatiser les montages des différentes partitions système à présenter sur un serveur. Il est constitué d’enregistrements formatés en six champs :
- le périphérique
- le point de montage
- le type de système de fichiers
- les options
- le flag de sauvegarde
- le flag réparation
- Le périphérique
Il s’agit du nom de fichier périphérique associé à la partition à présenter au système d’exploitation. La plupart du temps, il s’agit d’un nom de fichier de type /dev/. Il peut aussi s’agit d’un nom de partage, lorsqu’il s’agit de la présentation d’un partage NAS ou NFS.
Exemple : partage NAS ISILON
… isilon01:/home /home nfs defaults,auto,nfsvers=3 0 0
Ce montage est un partage avec le système ISILON de la firme EMC² et permet de présenter au serveur local, un montage /home de type NFS, stocké physiquement sur la baie NAS (et non sur le serveur local).
- Le point de montage
Il s’agit de l’emplacement physique du montage présenté. Il s’agit donc d’un sous-répertoire de l’arborescence du système. Ce champ permet à la commande mount de savoir à quel endroit le périphérique doit apparaître dans l’arborescence du système de fichiers. Dans l’exemple présenté ci-dessus, le montage se fera sur /home.
- Le type de système de fichiers
Il s’agit ici d’indiquer quel est le type du contenu du périphérique. Pour une partition locale, on peut trouver des systèmes de fichiers ext3, ext4, xfs, jfs ou reiserFS. Pour un disque on présentera un système de fichiers vfat, alors que pour un CD-Rom on montera un système is9660. On peut également rencontrer des montages via des partages NFS (pour les architectures Unix/Linux), CIFS (pour des architectures mixtes) et SMB (pour des partages (Windows).
- Les options
Ce champ indique à la commande de montage comment il doit procéder au montage en respectant les droits du fichier contenu sur le système de fichiers ainsi que les rôles des utilisateurs (peuvent-ils ou non monter eux-mêmes ce périphérique ?), ou encore est-il possible d’exécuter ou non des binaires sur ce montage ?
- La sauvegarde du montage
Ce champ n’est guère utilisé maintenant. On pouvait le valoriser à 1 pour un montage de type ext2. Mais, depuis les types de systèmes de fichiers ont beaucoup évolué et ce champ n’est plus utilisé. On le laisse donc à 0.
- Réparation automatique
Grâce à l’utilitaire fsck, on peut à l’aide de cet indicateur demander à ce que le système de fichiers soit testé périodiquement avant le montage (en phase de démarrage). Il suffit simplement d’indiquer une valeur non nulle. La vérification s’effectue dans l’ordre croissant des valeurs. On indique systématiquement 1 pour la partition racine (/), puis 2, 3, etc. pour les autres partitions.
Le montage de la partition racine (/ pour les geeks), est très important. Sans cette partition on ne pourra pas utiliser le système et on risque même d’avoir un message de type ‘kernel panic’. Dans certaines configurations, la déclaration de ce montage s’effectue via le n° UUID (voir à ce sujet le tutoriel "CentOS : Identifier les périphériques blocs".
ATTENTION : ceci vaut également pour la partition /boot (qui peut aussi être présentée sous forme d’UUID) et qui est strictement nécessaire lors de la phase de boot de la machine.
Par ailleurs, dans les dernières versions du noyau linux, on utilise également la déclaration de pseudo-systèmes de fichiers :
/proc permettant de communiquer directement avec le noyau (type proc)
/dev/pts permettant l’allocation à la demande des terminaux (type devpts)
/dev allouant à la demande les fichiers périphériques (type devfs)
/proc/bus/usb faisant l’interface avec le sous-système USB (type usbfs)
/sys contenant les informations de /proc non liées aux processus et offrant une nouvelle interface de communication avec le noyau et devant remplacer les montages devfs.
/dev/shm et/ou /tmp présentant l’espace de stockage RAM.
REMARQUE : Comme la mémoire RAM est plus rapide que le stockage disque, ce genre d’espace peut servir pour des petits fichiers temporaires auxquels on accède régulièrement de façon répétitive. Après un reboot ces fichiers disparaissent.
Le fichier /etc/fstab est fortement lié aux commandes mount ou umount (pour le montage et démontage des partitions) et fsck (pour les vérifications automatiques lors des redémarrages système). Dans la majorité des cas, ce fichier permet de rendre les opérations de montages plus simples, en ne mentionnant que le nom du point de montage sur lequel on souhaite présenter la partition. Cela évite toute la mécanique déclarative systématique des options.
Exemple : si l’on a dans /etc/fstab la ligne ci-dessous on peut monter /logi/bdd :
/dev/mapper/vg01-logi /logi/bdd xfs suid,_netdev 0 2
Le montage de la partition pourra alors se faire en exécutant simplement l’instruction suivante :
# mount /logi/bdd
Il faut distinguer le fichier /etc/fstab de la base /etc/mtab. Le premier permet d’indiquer au système d’exploitation quels sont les montages disponibles alors que le second liste ceux actuellement montés. Il est fortement recommandé de ne jamais modifier le fichier /etc/mtab. Ce dernier contient l’ensemble des montages réalisés aussi bien via /etc/fstab qu’en ligne de commande.
III. Les options des partitions de /etc/fstab
Toutes les options décrites dans le manuel en ligne, concernant le fichier /etc/fstab, ne sont pas systématiquement applicables. On va s’intéresser ici aux fonctions principales :
- user/nouser
- exec/noexec
- auto/noauto
- ro/rw
- suid
- uid/gid
- umask
- conv
- Option user/nouser
Lorsque l’on souhaite faire en sorte que le montage soit effectué par un utilisateur standard, et pas uniquement par root, on peut alors préciser l’option user. Par défaut, aucun utilisateur (option nouser), autre que root ne peut réaliser de montage de partition.
Exemple : montage de la partition vfat sur /mnt/win :
/dev/sda3 /mnt/win vfat user,exec 0 0
- Option exec/noexec
Si l’on souhaite pouvoir exécuter des programmes sur une partition hétérogène à monter (par exemple, un système de fichiers vfat, n’utilisant pas les mêmes notions de droits POSIX que ceux des systèmes Unix/Linux), il est nécessaire de positionner l’option exec.
- Option auto/noauto
Dans certains cas, on souhaite déclarer la partition à monter, dans le fichier /etc/fstab mais faire en sorte qu’elle ne le soit pas de façon automatique. Il faut alors utiliser l’option noauto. Ainsi, on devra monter celle-ci manuellement, à la demande. Par défaut, les montages seront présentés au système, de façon automatique (option auto).
Exemple : déclaration d’une partition de partages /share :
/dev/mapper/mpath3 /share xfs defaults,noauto 0 0
- Option ro/rw
Afin de monter une partition en mode lecture seule, on utilisera l’option ro pour Read Only. A l’inverse pour effectuer un montage du système de fichiers en mode lecture/écriture, il faudra utiliser l’option rw pour Read Write.
ATTENTION : dans certain cas de figure, le passage d’un mode à l’autre peut corrompre le système de fichiers client. Il est donc conseillé de lire attentivement les notices et le manuel en ligne avant de modifier cette option sur des partitions en production.
- Option suid
Cette option ne s’applique qu’aux systèmes disposant d’une gestion de droits suid. Cela permet d’utiliser les programmes du montage en utilisant le bit set-UID (ou set-GID), surclassant les droits standards (Owner/Group/World).
ATTENTION : un simple utilisateur de base utilisant des partitions ayant les droits setuid pour le compte de root permet à cet utilisateur de disposer du rôle de super-utilisateur dans cet environnement. Cela ouvre alors un certain nombre de brèches de sécurité !
- Option uid/gid
Ces options permettent de préciser quel utilisateur (fonction uid) et quel groupe (fonction gid) peuvent effectuer le montage de cette partition en forçant l’appartenance des fichiers avec ces identifiants.
Exemple : montage de la partition /data pour le compte bob et le groupe users :
/dev/mapper/mpath4 /data xfs uid=bob,gid=users 0 0
Les fichiers de la partition ainsi montée appartiendront tous à l’utilisateur bob et au groupe users. Si l’on ne précise rien au niveau du fichier /etc/fstab les fichiers appartiennent alors à l’utilisateur (et au groupe) ayant effectué l’opération de montage, donc : root (par défaut). Les options peuvent être exprimées en littéral (comme dans l’exemple ci-dessus) ou en numérique.
- Option umask
Cette option force un umask pour l’ensemble des fichiers du système de fichiers présenté. On rappelle que l’umask est un masque de bits des permissions (il s’agit donc d’une différence entre les droits maximum 777 et la valeur du umask).
Exemple : pour forcer un masque en ‘rwxr-xr--’ on doit déclarer :
/dev/mapper/mpath4 /data xfs user,umask=023 0 0
- Option conv
Dans certaines situations, les fichiers texte d’une partition autre que Linux, n’ont pas le même format que ceux des systèmes Unix/Linux. Pour un noyau linux, cette option permet d’effectuer une conversion automatique. Si la conversion mentionne le format ‘binary’ (qui est le comportement par défaut), aucun changement n’est effectué (et par la même occasion aucune corruption ne peut survenir). Dans le cas où l’on mentionne le format ‘text’, tous les fichiers présentés comme étant de type texte auront leur format internet converti.
ATTENTION : cela peut poser problème dans certaines situation où un fichier image (de type .jpg ou .png) sera probablement corrompu car certains de ses octets auront été déplacés ou modifiés.
Dans le cas où le format sélectionné est ‘auto’ certains fichiers comme les fichiers d’extensions .exe, .com, etc. ne sont pas convertis. Cela peut également poser quelques soucis, mais en tout cas, moins qu’avec le format ‘text’. Le plus naturel est donc de laisser le format ‘binary’.
IV. Le montage des partitions
Tout nouveau périphérique de stockage, une fois détecté devrait être automatiquement monté. Mais, il peut arriver que pour certains montages ce ne soit pas le cas ou que l’on souhaite effectuer soi-même l’opération de présentation du système de fichiers au système d’exploitation.
Toutes les lignes déclarées dans /etc/fstab peuvent alors être montées automatiquement. Mais, elles correspondent également à une commande particulière de montage que l’on peut exécuter via la commande mount. Afin de présenter un système de fichiers au niveau de sa machine, il faut connaître le nom physique de celui-ci, correspondant le plus souvent au premier champ du fichier /etc/fstab. Il faut également connaître le type de ce montage (correspondant au troisième champ du fichier /etc/fstab), ainsi que le nom du système de fichiers sur lequel on souhaite réaliser le montage (le deuxième champ du fichier /etc/fstab). La commande a donc le profil suivant :
# mount /dev/sda3 –t xfs /mnt/soft
REMARQUE : il va sans dire qu’il faut évidemment avoir créé le répertoire /mnt/soft pour pouvoir effectuer le montage de cette partition sur ce système de fichiers.
Les options (correspondant alors au champ quatrième champ du fichier /etc/fstab) peuvent être mentionnées via l’indicateur –o. Par exemple, pour mentionner que l’on a un umask à 022 sur la partition on devra exécuter l’instruction suivante :
# mount –o umask=022 /dev/sdc2 /logi/prod
Par ailleurs, on peut également monter des fichiers tels que les images ISO à l’aide de la commande ci-dessous:
# mount –o loop image.iso /mnt/logiciels
RAPPEL : pour monter un CD/DVD il faut alors spécifier le type iso9660 correspondant au type JOLIET de ce type de media :
# mount –t iso9660 /dev/cdrom0 /media/cdrom
Lorsque l’on souhaite mettre en place des partitions "chrootées" (cas des montages FTP, DNS, Web, etc.), ou pour monter des fichiers dans un système de fichiers en lecture seule (comme c’est le cas des CD/DVD), on va chercher à utiliser l’option --bind :
# mount –bind /home/phil/Fichier-vers1 /media/cdrom/Fichier-version-KO
Il ne faut pas s’y tromper, cela ressemble à un lien logique, mais cela va bien au-delà. Dans l’exemple ci-dessus, on cherche à remplacer le fichier Fichier-version-KO par une autre version plus récente, en considérant que /media/cdrom est un lecteur CD/DVD non inscriptible en lecture seule.
Lorsqu’une commande devient trop longue ou trop complexe à saisir, il devient alors urgent de la déclarer directement dans le fichier /etc/fstab qui saura automatiser les opérations de montages et de réparations. Bien évidemment, afin de démonter une partition, on a recours à la commande inverse umount.
De façon standard, le démontage d’une partition s’effectue simplement en utilisant le formalisme suivant :
# umount /dev/sda3
Si une partition semble occupée, il convient de s’enquérir du client occupant ses ressources, en utilisant l’une des commandes suivantes :
- fuser : pour connaître le processus occupant un système de fichiers ou un répertoire.
- lsof : pour lister les fichiers ouverts et les programmes ou utilisateurs liés.
Dans le premier cas, on utilisera alors la commande ci-dessous pour tuer les processus liés au système de fichiers :
# fuser -km /logi
Dans le second cas, on peut au minimum récupérer les fichiers ouverts par un utilisateur (où <User> est le nom de l’utilisateur en question):
# lsof -u <User>
On peut également savoir qui utilise un répertoire :
# lsof +D /logi
Ou encore savoir quels sont tous les fichiers ouverts depuis un périphérique de type bloc :
# lsof /dev/sdc3
Dans le même esprit, on peut aussi lister les fichiers ouverts par un processus particulier ou ses connexions réseau :
# lsof -p <PID> # lsof -i
Toutefois, pour la commande umount, signalons une options très pratique (accessible depuis le noyau 2.4.11) : -l. Cette dernière permet le démontage "paresseux", en détachant immédiatement le volume de la hiérarchie de système de fichiers et en nettoyant toutes ses références :
# umount -l /mnt/soft
Cette commande est surtout pratique dans le cas de partage SMB, CIFS voire NFS, qui ne répondent plus et que l’on souhaite redémarrer ou réinitialiser (ou pour les paresseux qui ne souhaitent pas s’encombrer d’une phase de recherche des clients occupant le système de fichiers). Dans le cas de périphérique loop, on peut le libérer grâce à l’option –d ou à la commande losetup –d.
V. Les réparations avec fsck
Comme on l’a mentionné précédemment, tout système de fichiers montés ou non peut être vérifié à l’aide de la commande fsck. Cet outil permet de s’assurer de l’intégrité et éventuellement de réparer les systèmes de fichiers présents sur un système. Chaque type de système de fichiers possède sa propre commande.
Exemple : pour un système de fichier ext4 :
/usr/sbin/fsck.ext4
En fait, la commande fsck générale est un programme en mode console. Il se décompose en plusieurs sous-programmes appelés automatiquement selon le type de partition.
ATTENTION : pour pouvoir vérifier et réparer un montage, la partition doit être obligatoirement démontée, donc non accessible, comme on peut le faire avec un liveCD, par exemple :
# umount /dev/sdc2
Une fois la partition démontée, il est alors possible de lancer la commande ci-dessous permettant de déclencher à la fois la vérification d’intégrité du système de fichiers et, éventuellement, sa réparation :
# fsck /dev/sdc2
RAPPEL : pour connaître le nom d’un périphérique, il suffit simplement d’exécuter la commande suivante :
# fdisk -l| awk '{print $2}'|grep "^\/dev\/mapper\/vg"
On peut alors facilement lister les caractéristiques de la partition sous-jacente choisie, en l’interrogeant via la commande tune2fs suivante:
# tune2fs /dev/mapper/vg00-root
Cette commande permet d'ajuster les paramètres des systèmes de fichiers ext2, ext3 et ext4. Pour des partitions de type xfs, il faut utiliser à la place la commande xfs_info. Avec la commande tune2fs, on peut notamment visualiser la fréquence d’analyse de la partition :
# tune2fs -l /dev/mapper/vg00-root tune2fs 1.42.9 (28-Dec-2013) Filesystem volume name: lv_root Last mounted on: / Filesystem UUID: ec091599-7ad0-4d77-af0e-483e809d49df Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 655360 Block count: 2621440 Reserved block count: 131072 Free blocks: 676481 Free inodes: 618172 First block: 0 Block size: 4096 Fragment size: 4096 Group descriptor size: 64 Reserved GDT blocks: 1024 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 RAID stride: 8 RAID stripe width: 8 Flex block group size: 16 Filesystem created: Fri Feb 24 16:11:00 2017 Last mount time: Tue Oct 24 11:19:23 2017 Last write time: Tue Oct 24 11:19:21 2017 Mount count: 11 Maximum mount count: 30 …
Si l’on souhaite augmenter le nombre de montage avant une vérification d’usage, pour le passer de 30 à 40, il faut alors exécuter la commande suivante :
# tune2fs –c 40 /dev/mapper/vg00-root
Pour désactiver cette fonctionnalité (correspondant au "0" du dernier champ du fichier /etc/fstab, il faut exécuter l’instruction ci-dessous :
# tune2fs –c-1 /dev/mapper/vg00-root
La commande tune2fs est très complète (et complexe). Il est fortement conseillé de bien lire le manuel en ligne. Lorsque l’on connaît le type de la partition et que l’on souhaite forcer l’ensemble des questions, on peut exécuter :
# fsck.ext4 –y /dev/sdc2
Cette commande peut être plus moins verbeuse selon que l’on ajoute l’option –v. Il est même possible de suivre l’évolution de la vérification en ajoutant l’option –C0.
ASTUCE : lorsque l’on souhaite analyser voire réparer un système de fichiers déjà monté, il est impératif de le démonter pour effectuer cette analyse. Pour se faire, on peut effectuer le démontage via la commande suivante :
# mount –n –oremount,ro /dev/sdc2 # fsck /dev/sdc2 # mount –n –oremount,rw /dev/sdc2
VI. Conclusion
J’espère que désormais, les commandes de montage, démontage, d’analyse et de réparation de systèmes de fichiers n’ont plus de secret pour vous. Il est vrai que ces fonctions permettent de maintenir l’intégrité du système d’exploitation. Il est donc essentiel de ne jamais oublier d’effectuer ces petites vérifications qui ne prennent que quelques minutes régulièrement, mais évitent de grands soucis pouvant entraîner la perte de service pendant de très longues heures.