Linux – Principes et Programmation

publicité
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...
Téléchargement