02) Structure du système de fichiers

Created mardi 23 février 2016

Système de fichiers

En informatique, un système de fichiers (FS ou FileSystem en anglais) est une méthode d'organisation des données persistantes sur un média durable (disque dur, DVD, clé USB, etc.).
Le système de fichiers offre à l'utilisateur une vue abstraite sur ses données.
L'unité de stockage est le fichier, qui est une séquence d'octets ; les fichiers sont groupés dans des dossiers ; les dossiers sont organisés en arborescence (il y a un dossier racine et des sous-dossiers).
Chaque objet (dossier, fichier, etc.) est identifié par un nom et possède des propriétés qui dépendent dusystème de fichier (notamment la protection d'accès en lecture, en écriture ou des listes de dates).
Ce nom est une chaîne de caractères de taille parfois limitée dans laquelle certains caractères peuvent être interdits (par exemple : ":" ainsi que "/" ou "\" selon les systèmes de fichiers).
Via un système de fichiers, l'organisation apparente ne change pas, mais dans le moteur il peut y avoir divers fonctionnements (indexation, résistance aux pannes, sécurité, etc...).

Les systèmes de fichiers peuvent inclure la compression ou le chiffrement automatique des données, une gestion plus ou moins fine des droits d'accès aux fichiers, et une journalisation des écritures (pour la robustesse, en cas de défaillance du système).
De plus, certains systèmes de fichiers peuvent s'étendre sur un réseau entier, comme par exemple NFS ou SMB / CIFS.
Il existe d'autres façons d'organiser les données, par exemple les systèmes de gestion de base de données(notamment base de données relationnelle) et les fichiers indexés.
Voici des exemples de systèmes de fichiers :

Ext2

Ext2 ou Ext2fs (en anglais, second extended file system) est le système de fichiers historique de GNU/Linux. Il a été créé à l'origine par Rémy Card et est basé sur l'extended file system. Il a également été très largement influencé par le FFS.

La grand particularité de Ext2 est qu'il ne fragmente que très peu ! Contrairement au systèmes de fichiers FAT ou NTFS (tous deux utilisé par Windows), Ext2 range ses données de manière "intelligente".

Les performances n'en sont qu'améliorées, et il n'est par conséquent pas toujours nécessaire d'utiliser un outil de défragmentation, ou plus rarement.
Plus tard, une extension a été ajoutée qui a permis de journaliser le système de fichiers. Celle-ci a fort logiquement été nommée ext3. Notons qu'un système qui ne connaît que l'ext2 est parfaitement capable de lire et d'écrire de l'ext3, mais il n'y aura pas alors de journalisation. La différence entre les deux systèmes résidant dans l'adjonction d'une zone journal et la suppression des données, rendant la récupération de celle ci impossible sur le FS ext3. Il suffit de cocher une option dans son noyau et de le recompiler pour bénéficier du support de ext3. Pour pouvoir passer sa partition ext2 en ext3, cela ce fait à l'aide de la commande tune2fs.

Ext3

Il a l'avantage majeur de pouvoir être utilisé à partir d'une partition ext2, sans avoir à sauvegarder et à restaurer des données (un système de fichiers ext3 peut être monté et utilisé comme un système de fichier ext2). Tous les utilitaires de maintenance pour les systèmes de fichiers ext2, comme fsck, peuvent
également être utilisés avec ext3.
Son avantage sur ReiserFS qui est un autre système de fichier journalisé est qu'il permet l'utilisation du logiciel dump, abondament utilisé en entreprise pour les sauvegardes.

Ext4

Il est basé sur la notion d'extent.
C'est une zone contiguë (qui peut atteindre plusieurs centaines de Mo) qui est réservée chaque fois qu'un fichier est enregistré sur le disque dur. Cela permet, en cas d'écriture ultérieure sur le fichier, d'ajouter les nouvelles données dans l'extent au lieu de devoir écrire dans un autre zone du disque dur (ce qui augmente la fragmentation).
Les gros fichiers sont ainsi stockés de façon bien plus efficace et rationnelle.
Pour les petits fichiers Ext4 utilise une astuce puisqu'il stocke les données directement dans le système d'extent lui-même sans avoir à allouer un bloc mémoire séparé.
L'ext4 permet de gérer les volumes d'une taille allant jusqu'à 1024 pébioctets.
Le système de fichiers ext4 a une compatibilité descendante avec ext3. C'est à dire, qu'une partition ext3 peut toujours être montée comme ext4 (en utilisant le type de système de fichiers "ext4" lors du montage).

L'inverse peut être possible, à la condition que la partition ext4 n'ait jamais utilisé l'allocation par extents pour sauvegarder des fichiers, mais l'allocation binaire comprise par ext3. Cette capacité de ext4 d'utiliser les formats de ext3 existe pour faciliter la conversion des partitions ext3 vers ext4.
Il existe une limitation présente dans la plupart des systèmes de fichiers : la limite des 255 caractères par fichier, voire même par chemin d'accès !

Une règle importante dans les systèmes Gnu/Linux

TOUT EST FICHIER


Vos documents, absolument tous vos documents peu importe leur nature, photo, vidéo, musique, votre disque dur, SSD, chaque volumes, clé USB, imprimante...tout; oui tout, ne cherchez pas plus loin , (allez pour être franc, ce n'est pas tout à fait vrai, nous y viendrons) .
"Oui mais il y a des dossiers quand même, et une clé USB c'est bien du matériel"
"Oui mais!!": TOUT EST FICHIER
Les dossiers ou "répertoires", ne sont que des représentions graphique simplifié.

Et oui votre clé est bien un matériel, nous verrons comment "ça monte", nous le verrons dans l'arborescence . Il existe donc des:

C'est un peu plus claire? En admettant que tout est fichier, c'est plus simple.
Oui mais les dossiers..., comme expliqué ce sont des répertoires qui ne sont qu'une représentation graphique, en réalité vos fichiers et vos "répertoires" sont des i-nodes (index de nœuds) contenant la description et caractéristique du/des dit/s fichier/s.
Dans un environnement graphique, nous faisons en générale beaucoup d'action à la souris, et trouver certaines information devient (franchement) fastidieux. Nous allons commencer à voir quelques commandes.

Dans le gestionnaire de fichiers, nous pourrions dire que nous exécutons la commande ls , ls correspond à lister un contenu. Nous avons relativement peu d'info, bien sur ls peut s'accompagner d'options, ici ls -l (méta-données).

Vos "répertoires" sont en fait des fichiers contenant eux mêmes une liste d'i-nodes auquel correspond les noms des fichiers, sinon nous aurions en permanence des listes énormes d'i-nodes et de nom de fichiers affichés, au fur-et-à-mesure que l'on travaille sur la machine.

En utilisant simplement les commandes suivantes:

Ici la commande est exécutée dans le répertoire de l'utilisateur ordinatous, les noms en bleue sont des répertoires, en blanc un fichier.

L'i-node contient les informations suivantes que l'on obtient ls -l (les méta données si vous préférez) :

1 Donc pour faire simple "TOUT EST FICHIER", un fichier possède 
2 un nom (voir plusieurs) mais un seul i-node, cette i-node 
3 contient lui une somme d'informations concernant le fichier.

A noter que c'est le principe d'i-node qui nous permet d'ouvrir le même fichier, avec plusieurs applications en même temps.

Arborescence

Prenez un arbre, imaginez le à l'envers , les racines en haut. Sous Gnu/Linux c'est pareil il y a "la racine" écrit comme ceci / (le slash) ou encore . (le point).
Restons dans l'imagé où une branche représenterait un "répertoire" contenant lui même des feuilles, des "fichiers". Voici les principaux répertoires d'un systèmes, on dit qu'ils sont à la racine. Les dossiers utilisateurs sont dans le home lui même à la racine.

La plupart des systèmes Gnu/Linux et Unix-like respectent cette organisation, à quelques différence prés mais reste très similaire.
Lors du partitionnement nous choisissons 2 partitions pour séparer le système de l'espace utilisateur, nous voyons que ceci est parfaitement transparent pour l'utilisateur, nous pourrions même choisir des systèmes
différents pour le système et l'espace utilisateur ce serait tout aussi transparent.

Voilà donc pour les fichiers, répertoires et l'organisation de votre système de fichiers, nous allons voir comment nous déplacer dans cette arborescence.

Man pages ls

1 LS(1)                              Commandes                             LS(1)
2 
3 
4 
5 NOM
6 	   ls - Afficher le contenu de répertoires
7 
8 SYNOPSIS
9 	   ls [OPTION] ... [FICHIER] ...
10 
11 DESCRIPTION
12 	   Afficher  les  informations  des  FICHIERs  (du  répertoire courant par
13 	   défaut). Les entrées sont triées alphabétiquement si aucune des options
14 	   -cftuvSUX ou --sort n'est indiquée.
15 
16 	   Les  paramètres  obligatoires  pour les options de forme longue le sont
17 	   aussi pour les options de forme courte.
18 
19 	   -a, --all
20 			  inclure les entrées débutant par « . »
21 
22 	   -A, --almost-all
23 			  omettre les fichiers « . » et « .. »
24 
25 	   --author
26 			  avec -l, afficher l'auteur de chaque fichier
27 
28 	   -b, --escape
29 			  afficher les caractères non graphiques sous la forme C  déspéci‐
30 			  fiée
31 
32 	   --block-size=TAILLE
33 			  utiliser  cette  TAILLE  de  bloc  pour l'affichage. Par exemple
34 			  « --block-size=M »  affichera   les   volumes   en   unités   de
35 			  1 048 576 octets. Consultez le format de TAILLE ci-dessous
36 
37 	   -B, --ignore-backups
38 			  omettre les entrées se terminant par « ~ »
39 
40 	   -c     avec  -lt,  trier  selon  la  date  de modification « ctime » en
41 			  l'affichant ; avec -l, trier selon le nom et afficher la date de
42 			  modification ; sinon, trier selon la date de modification, de la
43 			  plus récente à la plus ancienne
44 
45 	   -C     afficher en colonnes
46 
47 	   --color[=PARAMÈTRE]
48 			  colorer la  sortie.  PARAMÈTRE  peut  être  « never »  (jamais),
49 			  « auto »  (automatique)  ou  « always »  (toujours,  valeur  par
50 			  défaut) ; des renseignements complémentaires suivent ci-dessous
51 
52 	   -d, --directory
53 			  afficher les noms de répertoires eux-mêmes, pas leur contenu
54 
55 	   -D, --dired
56 			  créer une sortie adaptée au mode « dired » d'Emacs
57 
58 	   -f     ne pas trier, activer les options -aU et désactiver les  options
59 			  -ls --color
60 
61 	   -F, --classify
62 			  ajouter un caractère (parmi « */=>@| ») à chaque entrée
63 
64 	   --file-type
65 			  similaire, mais sans ajouter « * »
66  --format=MODE
67 			  afficher selon le MODE across -x, commas -m, horizontal -x, long
68 			  -l, single-column -1, verbose -l ou vertical -C
69 
70 	   --full-time
71 			  identique à -l --time-style=full-iso
72 
73 	   -g     identique à -l mais sans afficher le propriétaire
74 
75 	   --group-directories-first
76 			  regrouper les répertoires avant les fichiers ;
77 
78 			  peut être renforcé avec l'option --sort, mais  l'utilisation  de
79 			  --sort=none (-U) désactive le regroupement
80 
81 	   -G, --no-group
82 			  ne  pas  afficher  le nom des groupes dans un format d'affichage
83 			  long
84 
85 	   -h, --human-readable
86 			  avec -l ou -s, afficher  les  tailles  en  format  lisible  (par
87 			  exemple 1K, 234M ou 2G)
88 
89 	   --si   équivalent, en utilisant des puissances de 1000 et non de 1024
90 
91 	   -H, --dereference-command-line
92 			  suivre les liens symboliques de la ligne de commande
93 
94 	   --dereference-command-line-symlink-to-dir
95 			  suivre tous les liens symboliques en ligne de commande
96 
97 			  qui pointent vers un répertoire
98 
99 	   --hide=MOTIF
100 			  ne pas afficher les entrées implicites correspondant au MOTIF de
101 			  l'interpréteur de commandes (écrasé par -a ou -A)
102 
103 	   --indicator-style=STYLE
104 			  ajouter au nom des entrées l'indicateur de STYLE : none  (aucun,
105 			  par  défaut),  slash  (-p),  file-type (--file-type) ou classify
106 			  (-F)
107 
108 	   -i, --inode
109 			  afficher le numéro d'index de chaque fichier
110 
111 	   -I, --ignore=MOTIF
112 			  ne pas afficher les entrées implicites correspondant au MOTIF de
113 			  l'interpréteur de commandes
114 
115 	   -k, --kibibytes
116 			  blocs  de  1024 octets  par  défaut  pour  l’occupation d’espace
117 			  disque
118 
119 	   -l     utiliser un format d'affichage long
120 	   
121  		-n, --numeric-uid-gid
122 			  identique  à  -l  mais  en  affichant les valeurs numériques des
123 			  identifiants du propriétaire (UID) et du groupe (GID)
124 
125 	   -N, --literal
126 			  afficher les noms bruts des entrées (par exemple, ne pas traiter
127 			  de manière particulière les caractères de contrôle)
128 
129 	   -o     identique à -l, mais sans afficher l'information de groupe
130 
131 	   -p, --indicator-style=slash
132 			  ajouter l'indicateur « / » aux répertoires
133 
134 	   -q, --hide-control-chars
135 			  afficher « ? » à la place des caractères non graphiques
136 
137 	   --show-control-chars
138 			  afficher  les caractères non graphiques tels quels (comportement
139 			  par défaut, à moins que le programme ne soit « ls » et la sortie
140 			  un terminal)
141 
142 	   -Q, --quote-name
143 			  mettre les noms d'entrées entre guillemets
144 
145 	   --quoting-style=MOT_CLÉ
146 			  utiliser  le  style  d'encapsulation  selon  le MOT_CLÉ literal,
147 			  locale, shell, shell-always, c ou escape
148 
149 	   -r, --reverse
150 			  inverser l'ordre du tri
151 
152 	   -R, --recursive
153 			  afficher récursivement les sous-répertoires
154 
155 	   -s, --size
156 			  afficher la taille allouée de chaque fichier en nombre de blocs
157 
158 	   -S     trier selon la taille des fichiers
159 
160 	   --sort=MODE
161 			  trier selon le MODE plutôt que selon le nom : none (aucun,  -U),
162 			  size  (taille,  -S),   time (heure, -t), version (-v), extension
163 			  (-X)
164 
165 	   --time=MODE
166 			  avec -l, afficher la date selon le MODE au lieu de  la  date  de
167 			  modification  par  défaut :  atime,  access, use (-u), ctime, ou
168 			  status (-c), tel qu'indiqué dans la clé de tri --sort=time
169 
170 	   --time-style=STYLE
171 			  avec -l, afficher les dates selon le  STYLE  désiré :  full-iso,
172 			  long-iso,  iso,  locale  ou  +FORMAT ;  le FORMAT est interprété
173 			  comme dans  « date » ;  si  FORMAT  vaut  FORMAT1<changement  de
174 			  ligne>FORMAT2,  alors FORMAT1 s'applique aux fichiers anciens et
175 			  FORMAT2  aux  fichiers  récents ;  si  STYLE  est  préfixé   par
176 			  « posix- »,  STYLE ne prend effet qu'en dehors de des paramètres
177 			  régionaux POSIX.
178 
179 	   -t     trier selon la date de modification, de la  plus  récente  à  la
180 			  plus ancienne
181 
182 	   -T, --tabsize=COLONNES
183 			  définir l'espacement des tabulations à COLONNES plutôt qu'à 8
184 
185 	   -u     avec  -lt,  trier  et  afficher selon la date de dernier accès ;
186 			  avec -l, afficher la date de dernier d'accès et trier par  nom ;
187 			  dans les autres cas, trier selon la date de dernier accès
188 
189 	   -U     ne  pas  trier,  afficher  selon l'ordre original des entrées du
190 			  répertoire
191 
192 	   -v     tri naturel des numéros (de version) dans le texte
193 
194 	   -w, --width=COLONNES
195 			  fixer la largeur de l'écran à COLONNES
196 
197 	   -x     afficher les entrées par ligne plutôt que par colonne
198 
199 	   -X     trier alphabétiquement selon l'extension des entrées
200 
201 	   -Z, --context
202 			  afficher tout contexte de sécurité de chaque fichier
203 
204 	   -1     afficher un fichier par ligne
205 
206 	   --help Afficher l'aide-mémoire et quitter
207 
208 	   --version
209 			  Afficher le nom et la version du logiciel et quitter
210 
211 	   L’argument TAILLE est un entier suivi d'une unité facultative (10k pour
212 	   10×1024  par  exemple). Les unités sont K, M, G, T, P, E, Z et Y (puis‐
213 	   sances de 1024) ou KB, MB, etc. (puissances de 1000).
214 
215 	   La couleur n'est pas utilisée pour distinguer les différents  types  de
216 	   fichiers  par  défaut  ou  avec  l'option  --color=never. Avec l'option
217 	   --color=auto, ls n'utilise des codes couleur que si la sortie  standard
218 	   est  reliée  à  un terminal. La variable d'environnement LS_COLORS peut
219 	   avoir un impact sur la configuration. Utilisez  la  commande  dircolors
220 	   pour la définir.
221 
222    État de fin d'exécution :
223 	   0      si OK,
224 
225 	   1      si  problèmes  mineurs  (par  exemple, impossible d'accéder à un
226 			  sous-répertoire),
227 
228 	   2      si  erreur  grave  (par  exemple,   impossible   d'accéder   aux
229 			  paramètres de la ligne de commande).
230 
231 AUTEUR
232 	   Écrit par Richard M. Stallman et David MacKenzie.
233 
234 SIGNALER DES BOGUES
235 	   Aide  en  ligne  de GNU coreutils : <http://www.gnu.org/software/coreu‐
236 	   tils/>
237 	   Signaler toute erreur de traduction  de  ls  à  <http://translationpro‐
238 	   ject.org/team/>
239 
240 COPYRIGHT
241 	   Copyright  ©  2014  Free Software Foundation, Inc. Licence GPLv3+ : GNU
242 	   GPL version 3 ou supérieures <http://gnu.org/licenses/gpl.html>
243 	   Ce programme est un logiciel libre.  Vous  pouvez  le  modifier  et  le
244 	   redistribuer.  Il n'y a AUCUNE GARANTIE dans la mesure autorisée par la
245 	   loi.

Hierarchy Files System