Linux – Principes et Programmation 6. Systèmes de fichiers VFS, ext2... CNAM NSY103 2009/2010 Yann GAUTHERON Extraits : http://fr.wikipedia.org/, LINUX Programmation système et réseau (Joëlle DELACROIX), C. Crochepeyre http://www.cnam.fr/ Systèmes de Gestion Fichiers ● ● Notions générales ● Fichier logique et fichier physique ● Notion de répertoire Système de fichier Linux ● ● ● Ext2 VFS : Système de gestion de fichiers virtuels ● Structure et Fonctionnement ● Primitives en C /proc ● Système de fichier particulier sous UNIX Systèmes de Gestion Fichiers ● Notions de base ● La mémoire centrale est une mémoire volatile ● Pouvoir stocker des informations de très grandes tailles ● ● Les informations ne doivent pas disparaître lorsque le processus qui les utilise se termine Plusieurs processus doivent pouvoir accéder aux informations – ● L'unité de conversation sur le support de masse est le fichier La partie du système qui gère les fichiers s'appelle le système de fichiers ou « file system » Systèmes de Gestion Fichiers ● Introduction ● ● Un système de fichiers a pour objectif de gérer : – Structure interne des fichiers – Nommage des fichiers – Utilisation et protection des fichiers – Implémentation des fichiers sur le disque Le système de fichier a deux facettes : – Vue logique (utilisateur) : – nommage des fichiers, manipulation, protection Vue physique (concepteur) : ● ● mise en œuvre interne du système de fichier, schéma du disque et état des blocs. Systèmes de Gestion Fichiers ● Le fichier logique ● Définition : – Le fichier logique est la vue de l’utilisateur de l’ensemble des données mémorisées sur le support de masse ● Un type de donnée (programmation) ● Un ensemble de données groupées sous forme d’enregistrements Systèmes de Gestion Fichiers ● Le fichier logique ● En programmation, un fichier logique est un type de donnée sur lequel peuvent être appliquées des opérations spécifiques. Systèmes de Gestion Fichiers ● Fichier à mode d'accès séquentiel ● Les enregistrements du fichier ne peuvent être accédés que les uns à la suite des autres. – – – Ouverture du fichier : positionne sur le premier enregistrement Opération de lecture : délivre l'enregistrement courant et se positionne sur le suivant Opération d’ajout : obligatoirement en fin de fichier Systèmes de Gestion Fichiers ● Fichier à mode d'accès indexé ● Un enregistrement est accédé en fonction de sa position relative dans le fichier – – Une opération de lecture, écriture, ajout ou destruction d’enregistrement spécifie le numéro i (position relative) de l’enregistrement accédé Une opération spécifique de déplacement permet de pointer l’enregistrement i Systèmes de Gestion Fichiers ● Le fichier physique ● Le fichier physique correspond à l’implémentation sur le support de masse de l’unité de conservation fichier Méthodes d’allocation du support de masse L'unité d’allocation sur le disque dur est le bloc physique – ● ● Il est composé de 1 à n secteurs ● ex: 1 bloc = 2 secteurs de 512 octets soit 1K Les opérations de lecture et d'écriture du SGF se font bloc par bloc – Systèmes de Gestion Fichiers ● Structure d'un disque dur Systèmes de Gestion Fichiers ● Le fichier physique Systèmes de Gestion Fichiers Systèmes de Gestion Fichiers ● Le fichier physique ● Un fichier physique est constitué d’un ensemble de blocs physiques. Il existe plusieurs méthodes d’allocation des blocs physiques : Allocation contiguë (séquentielle simple) – Allocation par zone – Allocation par blocs chaînés – Allocation indexée Il faut gérer et représenter l'espace libre – ● Systèmes de Gestion Fichiers ● Allocation contigüe ● Un fichier occupe un ensemble de blocs contigus sur le disque ● ● Bien adapté aux méthodes d'accès séquentielles et directes Difficultés : ● Création d'un nouveau fichier ● Extension du fichier Systèmes de Gestion Fichiers ● Allocation contigüe ● création d'un nouveau fichier : il faut allouer un nombre de blocs suffisants dépendant de la taille du fichier Systèmes de Gestion Fichiers ● Allocation contigüe ● Trouver un trou suffisant Systèmes de Gestion Fichiers ● Allocation contigüe ● Étendre le fichier 1 avec un bloc de données Systèmes de Gestion Fichiers ● Allocation par zones ● Un fichier est constitué de plusieurs zones physiques disjointes (exemple système MVS IBM) : – Une zone primaire allouée à la création – Des zones secondaires (extensions) allouées au fur et à mesure des besoins Chaque zone est allouée de façon indépendante – Systèmes de Gestion Fichiers ● Allocation par blocs chaînés ● Un fichier est constitué comme une liste chaînée de blocs physiques, qui peuvent être dispersés n'importe où. ● ● ● Extension simple du fichier : allouer un nouveau bloc et le chaîner au dernier Pas de fragmentation Difficultés : ● mode séquentiel seul ● le chaînage du bloc suivant occupe de la place dans un bloc Systèmes de Gestion Fichiers ● Allocation par blocs chaînés : variante Systèmes de Gestion Fichiers ● Allocation indexée ● Les adresses des blocs physiques constituant un fichier sont rangées dans une table appelée index, elle-même contenue dans un ou plusieurs blocs disque Systèmes de Gestion Fichiers ● Allocation indexée : la solution Unix/Linux Systèmes de Gestion Fichiers ● Allocation indexée : la solution Unix/Linux Systèmes de Gestion Fichiers ● Allocation indexée : la solution Unix/Linux Systèmes de Gestion Fichiers ● Allocation indexée : la solution Unix/Linux Systèmes de Gestion Fichiers ● Allocation indexée : la solution Unix/Linux Systèmes de Gestion Fichiers ● Allocation indexée : la solution Unix/Linux Systèmes de Gestion Fichiers ● Allocation indexée : la solution Ext2 – Le cas Ext2 par défaut EXT2_N_BLOCKS = 15 : ● ● ● ● ● ● ● 0 : Accès direct … … 11 : Accès direct 12 : 1 indirection 13 : 2 indirections 14 : 3 indirections Systèmes de Gestion Fichiers ● La gestion de l'espace libre ● ● ● ● Le système maintient une liste d'espace libre, qui mémorise tous les blocs disque libres (non alloués) Création d'un fichier : recherche dans la liste d'espace libre de la quantité requise d'espace et allocation au fichier : l'espace alloué est supprimé de la liste Destruction d'un fichier : l'espace libéré est intégré à la liste d'espace libre Il existe différentes représentations possibles de l'espace libre – – Vecteur de bits Liste chaînée des blocs libres Systèmes de Gestion Fichiers ● La gestion de l'espace libre : vecteurs de bits ● La liste d'espace libre est représentée par un vecteur binaire, dans lequel chaque bloc est figuré par un bit. – – Bloc libre : bit à 1 Bloc alloué : bit à 0 Systèmes de Gestion Fichiers ● La gestion de l'espace libre : liste chaînée ● La liste d'espace libre est représentée par une liste chaînée des blocs libres Systèmes de Gestion Fichiers ● La gestion de l'espace libre : liste chaînée + compter ● Le premier bloc libre d’une zone libre contient l’adresse du premier bloc libre dans la zone suivante et le nombre de blocs libres dans la zone courante. Systèmes de Gestion Fichiers ● La gestion de l'espace libre Systèmes de Gestion Fichiers Correspondance fichier logique – fichier physique Désignation des fichiers : le répertoire Systèmes de Gestion Fichiers ● Le répertoire ● ● Le répertoire est une table sur le support permettant de référencer tous les fichiers existants du SGF avec leur nom et leurs caractéristiques principales Le répertoire stocke pour chaque fichier l'adresse des zones de données allouées au fichier Systèmes de Gestion Fichiers ● Le répertoire ● Un répertoire est une zone disque réservée par le SGF. ● Le répertoire comprend un certain nombre d'entrées. ● Une entrée est allouée à chaque fichier du SGF. Systèmes de Gestion Fichiers ● Le répertoire à structure arborescente ● ● Chaque utilisateur dispose d'un sous-répertoire propre (Répertoire de travail), l'utilisateur peut créer des sous-répertoires à l'intérieur de son répertoire de travail On appelle «chemin» (en anglais path) la succession des répertoires en partant de la racine pour atteindre un fichier. Un chemin est de la forme Répertoire racine(séparateursousrepertoire)séparateurnomfichier ● Sous Unix, le séparateur est / ; sous Windows, le séparateur est \ Systèmes de Gestion Fichiers ● Opérations sur le Système de Gestion de Fichiers ● Structuration du disque Formatage physique – Formatage logique – Partitionnement Opérations de haut niveau – ● Systèmes de Gestion Fichiers ● Le formatage physique ● Le formatage physique ou de bas niveau permet de diviser la surface du disque en éléments basiques Systèmes de Gestion Fichiers ● Le formatage logique / partitionnement ● Le formatage logique ou de haut niveau crée un système de gestion de fichiers sur le disque. – – Le type de SGF installé dépend du système d’exploitation. Il forme les clusters ou blocs Il est possible d’installer plusieurs types de SGF sur un disque grâce au partitionnement du disque.. Systèmes de Gestion Fichiers ● Le partitionnement ● ● Une partition est une partie d'un disque dur destinée à accueillir un SGF. Elle est identifiée par un nom appelé « nom de volume ». Elle est constituée d’un ensemble de cylindres contigus. Un disque peut accueillir 4 partitions différentes. Une seule est active à la fois. Systèmes de Gestion Fichiers ● Organisation de partition : Linux Systèmes de Gestion Fichiers ● Démarrage d'un ordinateur sur disque dur Systèmes de Gestion Fichiers ● Interface d'appel du SGF Systèmes de Gestion Fichiers ● Quelques commandes du SGF ● liste du répertoire (ls, dir) ● changement de répertoire (cd) ● création répertoire (mkdir) ● suppression répertoire (rmdir) ● suppression fichier (rm, del) ● modification d'attributs d'un fichier (chmod) ● changement de nom de fichier… (mv, ren) Systèmes de Gestion Fichiers ● Le SGF sous Linux ● Périphérique vu comme un fichier de type bloc : /dev/hdxn (ide) /dev/sdxn (scsi) x = <a, …. > le lecteur a, b,…. ; n = n° de la partition Partitions du disque – ● Partition primaire ou logique ● hda1, hda2, hda3 partitions primaires (maxi 4 si pas de partition étendue) ● hda4 partition étendue ayant hda5, hda6… partitions logiques – Utilisation des partitions ● une seule partition active : celle du SE ● 1 FS associé ● une partition pour le swap ● une partition dédiée si besoin (SGBD) Ex: lilo (LInux LOader) permet de booter plusieurs SE sur un PC – ● Systèmes de Gestion Fichiers ● Le SGF sous Linux ● Les systèmes de fichiers / Unix une seule arborescence – composé de un ou plusieurs systèmes de fichiers – montage possible: système unique – un système de fichiers accessible sur disque par: ● un n° périphérique logique, n° du système = n° de périphérique ● des adresses physiques calculées par le pilote – FS Unix monté sur la racine / ● exécution /etc/rc avec fichier fstab (suite des FS à monter dans l’ordre) ● vfs: virtual file system permet au noyau Linux de reconnaître le FS Plusieurs variantes de FS – ● Systèmes de Gestion Fichiers ● Le SGF sous Linux ● Quelques systèmes de fichiers sur linux Non journalisés (pas de journal de récupération en cas de panne) ● Ext2fs ● FAT12, FAT16, FAT32 ,VFAT…. – Journalisés ● Ext3fs, ext4fs ● reiserfs ● XFS ● NTFS…. – Et pour les réseaux ● NFS…. Certains de ces systèmes sont issus ou supportés sur d’autres systèmes d’exploitation – Systèmes de Gestion Fichiers ● L’arborescence FHS (File Hierarchy Standard). Systèmes de Gestion Fichiers ● VFS: système gestion de fichiers virtuel ● Cohabitation de plusieurs systèmes de gestion de fichiers ● Un seul système de fichiers virtuel ● VFS est une couche logicielle insérée dans le noyau au dessus des FS. Systèmes de Gestion Fichiers ● Modèle de fichier commun VFS: 4 objets ● Chaque objet pointe sur les fonctions associées à cet objet – – – – Objet super bloc : bloc de contrôle du FS monté Objet i-noeud : bloc de contrôle, associé à un nombre d’inoeuds, qui identifie les fichiers du FS Objet fichier : liaison entre le fichier ouvert et un processus Objet dentry ou nom de fichier : liaison entre l’entrée du répertoire et le fichier Systèmes de Gestion Fichiers ● Exemple: allocation des blocs Linux Ext2fs ● Partition en groupes de blocs ● Choix taille des blocs: 1024 à 4096 ● Une partition est composée de : – – – ● ● un bloc d’amorçage un ensemble de groupes de blocs avec les blocs de données Taille maxi d’une partition 4To (avec VFS) Objectif : localisation rapprochée des données pour chaque fichier Systèmes de Gestion Fichiers ● Exemple: allocation des blocs Linux Ext2fs ● Chaque groupe de bloc Ext2 contient: – – – – – – ● une copie du super bloc du FS (1 bloc) une copie des descripteurs de groupe de blocs (n blocs) table d’occupation des blocs du groupe (bitmap) (1 bloc) table d’occupation des i-noeuds du groupe (bitmap) (1 bloc) table des i-noeuds du groupe (n blocs) blocs de données du fichier (n blocs) Exemple : – – – – – Si une partition est de 4Go, un bloc est de 2Ko Bitmap des blocs de données = 8(bits) * 2K = 16K bits car 1 bit/ bloc Nb de blocs dans un groupe : 16K blocs de données (16 384 blocs) Nb d’octets de données dans un groupe : 2Ko(1 bloc) * 16K = 32 Mo Pour 4Go il faudra 4Go/32Mo = 128 groupes de blocs Systèmes de Gestion Fichiers ● Exemple: super bloc Linux Ext2fs identification du système de fichiers – heure de la dernière opération de montage, de la dernière écriture – taille du système de fichiers en blocs – taille d’un bloc – taille de la structure i-noeud – nb de blocs et i-noeuds libres – nb de blocs et i-noeuds par groupe – n° du 1er bloc utilisable – n° du 1er i-noeud non alloué – heure du dernier contrôle de cohérence et fréquence – et des informations complémentaires Le super bloc est dupliqué dans chaque groupe lors du contrôle de cohérence – Systèmes de Gestion Fichiers ● Exemple: descripteurs Linux Ext2 ● Descripteurs groupe de blocs un descripteur / groupe de blocs ● les n° des blocs bitmap gérant – la liste des blocs libres – la liste des i-noeuds libres ● le nb de blocs libres , le nb d’i-noeuds libres ● le nb de répertoires dans le groupe ● n° du premier bloc de la table des i-noeuds Bitmap – ● Vecteurs de bits pour gérer ● La liste des i-noeuds libres ● La liste des blocs libres ● 0/ libre 1/ occupé Descripteurs dupliqués dans chaque groupe de blocs – Systèmes de Gestion Fichiers ● Exemple: répertoire Linux Ext2 ● Un répertoire contient : – – – – – n°i-noeud longueur de l’entrée du répertoire longueur du nom du fichier (max 255) type du fichier nom du fichier Systèmes de Gestion Fichiers ● Les i-noeuds ● i-noeud (i-node) est un descripteur conservant les informations du fichier sur disque ● i-noeud = noeud d’index ● structure de taille fixe (ex : 64 octets/i-noeud) ● table des i-noeuds configurée à l’installation n°1 blocs défectueux – n°2 racine pour le système de fichiers gestion des i-noeuds – ● – – sur disque en mémoire Systèmes de Gestion Fichiers ● Exemple : i-noeud Linux Ext2 ● taille d’un i-noeud: 128 octets ● bloc de 1024 octets = 8 i-noeuds/bloc ● Contenu structure : – – – – – – – – – – type fichier et droits identifications propriétaire et groupe heures du dernier accès, heure de la dernière màj de l’i-noeud, màj des données nb liens vers d’autres fichiers taille fichier nb blocs de données du fichier listes de contrôles d’accès: répertoire et fichier table des adresses des blocs de données, etc… et pointeurs sur les blocs de données Systèmes de Gestion Fichiers ● Exemple : i-noeud Linux Ext2 Systèmes de Gestion Fichiers ● Primitives VFS ● #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int open(const char *ref, int mode_ouv, [mode_t mode] ) – – ref; -- nom de fichier mode_ouv; -- mode O_RDONLY... O_CREAT, O_TRUNC, O_APPEND, O_SYNC – mode; -- mode spécifique de droits d'accès (seulement utile avec O_CREAT) ● #include <unistd.h> int close( int desc ); Systèmes de Gestion Fichiers ● Primitives VFS ● ● #include <unistd.h> ssize_t read( int desc, void *ptr_buf, size_t nb_octets ); – desc; -- descripteur – *ptr_buf; -- @ mémoire de la zone contenant le message – nb_octets; -- taille du message en octets #include <unistd.h> ssize_t write( int desc, void *ptr_buf, size_t nb_octets ); – desc; -- descripteur – *ptr_buf; -- @ mémoire de la zone contenant le message – nb_octets; -- taille du message en octets Systèmes de Gestion Fichiers ● Primitives VFS ● ● ● ● #include <sys/stat.h> –- changer droits int chmod(const char *ref, mode_t mode) #include <unistd.h> –- changer propriétaire int chown(const char *ref, uid_t id_util, gid_t id_grp) #include <sys/stat.h> –- créer un inode int mknod(const char *ref, mode_t mode, dev_t ressource) int mkfifo –- tube nommé int mkdir –- répertoire #include <unistd.h> –- positionner curseur off_t lseek(int desc, off_t dep, int option) Systèmes de Gestion Fichiers ● Primitives VFS ● ● #include <unistd.h> link (const char *fichier, const char * fichierBis) –- Lien physique #include <unistd.h> unlink (const char *fichierBis); -- Supprimer lien Systèmes de Gestion Fichiers ● /proc ● ● ● Informations noyau – cmdline – cpuinfo – devices – filesystems – interrupts – meminfo... Répertoires – net, scsi... Processus actifs aux noms = PID – environ – maps – mem...