Systèmes de fichiers LINUX


Sous LINUX, TOUT EST FICHIER,
organisé suivant une UNIQUE ARBORESCENCE
(dont la racine est nommée / et dont l'administrateur est root)

Systèmes de fichiers

Un système de fichiers est une façon d'organiser et de stocker une arborescence sur un support (disque, disquette, cd ...). Chaque OS propriétaire a développé sa propre organisation.
On peut faire cohabiter plusieurs systèmes dans des partitions d'un même disque.

Linux possède son système appelé ext2 mais peut en gérer d'autres. La liste en est donnée dans /proc/filesystems
L'utilisateur peut donc accéder sous Linux à d'autres systèmes de fichiers, comme DOS, Vfat,..provenant d'un périphérique ou importé par le réseau.

Comme pour l'utilisateur tout est fichier, tous les systèmes de fichiers quels que soient leur emplacement physique doivent être intégrés dans l'UNIQUE arborescence logique du système Linux.
Cette arborescence peut donc être construite (et évoluer) à partir de diverses partitions qui peuvent être situées sur plusieurs disques. Cela réalise une intégration et une abstraction plus poussée que dans le monde Windows où les partitions et lecteurs auquels sont affectées les lettres A: C: D: ... demeurent des entités séparées. Naturellement la partition sur laquelle est situé le répertoire racine joue un rôle particulier.

Le processus de montage, avec sa commande mount, décrite plus loin, est le moyen de faire correspondre parties de l'arborescence et partitions physiques de disque. Il permet de plus d'affecter tout système extérieur (disquette, cdrom, dk zip, rép. réseau ...) à un répertoire créé pour cela dans l'arborescence.
Il suffira ensuite de se déplacer à ce répertoire, appelé point de montage, en fait un répertoire "d'accrochage", pour accéder à ses fichiers (bien sûr, conformément aux permissions que possède l'utilisateur )

Les différentes catégories de fichiers

Arborescence du système Linux

La racine est le sommet de la hiérarchie des répertoires. Il s'agit d'une arborescence logique, indépendante de l'implantation physique des divers sous-répertoires, qui peut s'étendre sur plusieurs partitions incluses sur un ou plusieurs disques, et même sur des disques réseaux.
Sa structure est standard, avec des extensions imposées par les distributions.
Toute modification est de la compétence exclusive de l'administrateur, à l'exception des répertoires personnels situés dans /home.
Il est recommendé de respecter cette architecture standard.

Liste des répertoires principaux et leur rôle :

/ le répertoire racine

Parcourir et lister les répertoires

Voici les commandes indispensables (suivies bien sûr d'une validation) pour visiter l'arborescence.

ls     commande générale d'accès aux infos des fichiers du rép. courant
         essayer ls, puis successivement ls -l,    ls -a
ls rep
cd chemin le chemin peut être absolu (indiqué à partir de la racine) ou relatif (à partir du  rép. courant)
cd ..
cd     raccourci vers le rép. personnel
file fichier renseigne sur la nature du contenu du fichier
pwd     donne le nom complet du rép. courant
mkdir rep    pour créer un sous-rep du rep courant
rmdir rep    pour supprimer un sous-rep vide


     Expérimentations
Faire de nombreux essais avec ces commandes.
Faire le lien entre la commande file et le 1er caractère affiché  sur chaque ligne par ls -l
Un utilisateur stagex peut-il créer des rép. un peu partout ? essayer par exemple dans /etc ou dans /usr


Monter un système de fichiers

Commandes de montage/démontage

Gestion avec Linuxconf


Installer une nouvelle partition

Dans certains cas il peut s'avérer indispensable d'étendre le système de fichiers sur un nouveau disque dur, ou une partition récupérée ...
L'objectif consiste à assigner à une sous-arborescence du système de fichiers, cette nouvelle ressource périphérique, par le processus de montage.
Soit une nouvelle partition /dev/hda3, jusqu'ici "libre", à monter sur /home.
  1. Avec fdisk, lui affecter un système 83 linux
  2. La formater
    mkfs -t ext2 -c -v /dev/hda3
    formate en blocs de 1024 en vérifiant les blocs(-c), puis écrit la table des inodes.
  3. effectuer une copie
    cp -r /home /root
    le déplacement de /home, dans /root par exemple. En effet /home est présent actuellement sur hda1, et il va être ensuite physiquement affecté sur hda3
    Les rép. personnels sont actuellement dans /root/home
  4. monter la partition hda3 en /home
    mount /dev/hda3 /home
    Expliquer les résultats des commandes :
    df 
    ll /home
  5. récupérer le contenu de /home
    mv /root/home/*   /home
  6. pour automatiser le montage de /dev/hda3 lors d'un redémarrage du système, ajouter dans la table de montage /etc/fstab la ligne :
    /dev/hda3 /home ext2 defaults 1 2


Compléments

Le fichier /etc/fstab

Rappel :
Le processus init (exécuté au démarrage), après chargement du noyau, vérifie les systèmes de fichiers déclarés dans la table du fichier et effectue leur éventuel montage automatique.

Ce fichier /etc/fstab constitue une véritable "table de montage". Il fait l'inventaire des divers systèmes de fichiers que le noyau Linux est susceptible de gérer, précise la façon de les monter, s'ils doivent l'être au démarrage, etc ..

Structure de fstab
Sur chaque ligne on trouve la description du montage d'un système, avec 6 champs :

  1. nom du fichier spécial (ou du système distant)
  2. nom du point de montage, habituellement un sous-rep (éventuellement à créer) de /mnt
  3. le type de fichiers : ext2 (Linux), msdos, vfat (Win9x), ntfs (NT), iso9660 (Cd-rom), nfs
  4. liste d'options de montage, séparés par des virgules
    Les options par défaut sont rw,suid, dev, exec, auto, nouser
  5. paramètre pour dump (commande de sauvegarde)
    Une valeur 0 signifie que le système de fichiers ne sera pas sauvegardé lors d'un dump
  6. paramètre pour (commande de vérification des fichiers)
    Il indique l'ordre dans lequel fsck devra vérifier les fichiers, 1 en priorité (c'est normalement la partition racine /, 2 sinon, et 0 pour ne pas demander de vérification.
exemple 1
/dev/hda1    /mnt/diskc    vfat    user, auto,rw
signifie :
/dev/hda1 est le descripteur de périphérique 1ère partition du 1er disque IDE
/mnt/diskc est le répertoire de montage
vfat est le type de système de fichiers (autres ext2, msdos, iso9660, nfs, swap)

exemple 2
/dev/hdb1    /mnt/disk_d    vfat    user, auto
au lancement du système, ou par la commande mount -a, le système de fichiers Windows 95, installé sur la 1ère partition du 2ème disque (unité D:\), sera monté automatiquement par tous les utilisateurs et accessible dans le répertoire /mnt/disk_d

remarques
Les lignes contenant l'option noauto ne sont pas montées lors du démarrage du système, mais sont utiles pour renseigner sur les paramètres à appliquer lorsqu'on effectuera le montage.
L'option user est nécessaire pour indiquer que n'importe quel utilisateur pourra monter et démonter le périphérique; sinon cette tâche est réservé au root.
Pour le montage de système distant nfs, les options rsize et wsize sont optionnelles, mais permettent d'augmenter sensiblement les performances.


Expérimentations

  1. Editer /etc/fstab et comprendre ses directives
  2. Monter et démonter "à la main" le périphérique /dev/cdrom. Peut-on enlever le cd-rom avant de le démonter ?
  3. Faire les mêmes manip sous X-KDE

Les inodes

Chaque système de fichiers tient à jour une table des descripteurs des fichiers qu'utilise le système d'exploitation pour accéder aux fichiers.
Cette table se compose pour chaque fichier, d'une entrée appelée inode, repérée par un index appelé le numéro d'inode

La liste des systèmes de fichiers gérés par Linux est visible sur /proc/filesystems

Il existe un outil de vérification et de réparation des systèmes : fsck, qui s'effectue sur un système ou sous-systèmes, un rép. obligatoirement démonté
par exemple, pour vérifier le rép. des users : fsck /home

Les fichiers spéciaux de /dev comporte l'attribut b (mode bloc) ou c (mode caractères)


Les liens (ln)

Les liens sont utiles pour faire apparaître un même fichier dans plusieurs répertoires, ou sous des noms différents. Ils évitent les duplications et assurent la cohérence des mises à jour
On distingue en fait deux sortes de liens :
  1. les liens durs associent deux ou plusieurs fichiers à un même espace sur le disque, les deux fichiers restant indépendants. Par exemple : ln linux.txt /home/stagex/linux-lien-dur.txt
    Le fichier linux-test-lien-dur est créé dans le répertoire /home/stagex. On peut constater que ces 2 fichiers ont la même taille. Au niveau gestion ils sont indépendants, tout en partageant le même espace disque et donc le même inode. Toute modification de l'un, modifie l'autre ! Mais la suppression de l'un, casse le lien, mais ne supprime pas physiquement l'autre.

  2. Les liens symboliques
    [root@p0x /home/httpd/html/LinuxCours] ln -s index.html /home/jean/accueil.html La commande ls -F passée dans le répertoire /home/jean montre que le fichier accueil.html pointe sur index.html (ainsi, une requête sur accueil.html, va ouvrir index.html
    Le lien symbolique fait référence à un fichier dans un répertoire. La suppression du fichier source entraînera un changement de comportement du fichier lien qui sera considéré comme "cassé" ("broken").

Observations

Passez les commandes adduser et useradd : elles semblent identiques, puisqu'on obtient le même message d'aide !
Pour comprendre :
  1. cherchez où elles se trouvent : whereis ...
  2. examiner ces 2 fichiers : ls -l add* et ls -l user*
  3. comparez les tailles, les droits. Conclusion.