Gestion de l’espace disque
L’ organisation du système de fichiers est une organisation logique basée sur une organisation physique constituée d’un ou plusieurs disques. Chacun est divisé en une ou plusieurs partitions physiques (P1, P2, etc.). L’ espace disque physique dispo- nible est ainsi découpé en disques logiques. Initialiser un disque logique consiste à créer sur ce disque un système de fichiers appelé file system. Sous Unix/Linux, l’utilisateur ne voit pas les disques physiques, pas plus que les partitions. Il n’y a pas de lettres d’unités. L’ arborescence de fichiers est construite au démarrage du système à partir de plusieurs file systems. Un file system particulier, le root file system contient la racine de l’arborescence, le noyau, les fichiers systèmes, et des répertoires vides ( /tmp, /usr,…) sur lesquels seront greffées des arborescences de fichiers se trouvant dans d’autres file systems. (Fig. 10.1).Lors du démarrage d’une machine, après recherche du disque système, chaque file system est rattaché, à l’aide de la commande mount, à un répertoire existant appelé point de montage ( mount point). La racine de ce file system prend alors pour nom celui du point de montage, et l’arborescence de fichier qu’il contient est alors totalement intégrée à l’arborescence de fichiers du système.La structure d’un file system est globalement la même dans toutes les versions d’Unix/Linux : chaque file system est composé d’un grand nombre de blocs contigus. La structure de base d’un file system est détaillée à la figure 10.2.
Sous Unix/Linux, un fichier est une suite d’octets (8 bits) non structurée (byte stream). Toutes les informations concernant un fichier sont regroupées dans une structure de données, appelée inode, décrivant la taille du fichier, son emplacement sur disque, son propriétaire, etc. (voir le paragraphe 10.1.2). Un fichier n’est pas repéré par son nom mais par le numéro (index) de l’inode qui le caractérise. Cet index permet de retrouver l’inode dans la table des inodes. C’est donc l’inode qui caractérise le fichierChaque inode est repéré par un numéro (index) variant de 1 à n et permettant de retrouver son emplacement dans la table des inodes. Aucun fichier n’utilise le numéro 1. Le numéro 2 représente la racine du file system. Les informations conte- nues dans un inode sont : Tout système Linux comporte au moins une partition spéciale appelée partition swap. Pour des raisons de performances, cette partition n’a pas de structure de file system. Elle est utilisée par Linux pour le gestion de la mémoire virtuelle : à un instant donné, la mémoire centrale (RAM) ne contient pas la totalité de la mémoire nécessaire aux processus en cours. Le mécanisme de mémoire virtuelle ne place en RAM que ce qui est indispensable à cet instant, et effectue un va-et-vient entre la RAM et la partition swap.
Commandes ln et mv
Nous l’avons dit précédemment : un fichier, en tant qu’espace disque, est repéré par son index et non par son nom. L’ index est le numéro de l’inode décrivant entière- ment le fichier sur disque. Un répertoire est un fichier de type particulier contenant des couples (index, nom_de_fichier).ficha et fichb portent le même index alors que essai porte un nouvel index. Le fichier fichb n’occupe pas de place supplémentaire sur le disque, contraire- ment au fichier essai. ficha et fichb sont deux noms différents du même fichier disque. Attention : les permissions sont décrites dans l’inode et ne sont donc pas associées à un nom de fichier :La commande rm (remove) supprime le nom et décrémente le nombre de liens contenus dans l’inode. Le fichier est physiquement supprimé si et seulement si le nombre de liens passe à zéro.Nous avons décrit les commandes mv et ln telles qu’elles fonctionnent à l’inté- rieur d’un file system. La numérotation des inodes est interne à chaque file system. De ce fait, ces deux commandes ne franchissent pas les limites d’un file system : deux fichiers différents appartenant à deux file system différents peuvent porter le même index (le même numéro d’inode). La logique décrite précédemment est alors inapplicable.