Volumes de données et systèmes de fichiers

Introduction

Les données ne sont pas égales entre elles, certaines étant plus sensibles que d'autres avec des exigences de :
Vos propres données sont généralement peu sensibles comparativement à des données d'organisations (entreprises, hôpitaux, etc). En effet, si la perte d'un rendu de TP est gênant, cela ne représente au mieux qu'une semaine de travail. Pour une organisation, la perte peut concerner des décennies de travail, dont des outils développés en interne par des employés qui ont depuis quitté l'organisation. Pour une entreprise, cela peut se traduire par sa faillite.
Que ce soit du à une défaillance matérielle, à une erreur de manipulation, à un acte de malveillance, ou d'un sinistre (e.g. incendie, inondations), l'indisponibilité des données engendre fréquemment une interruption, ou une dégradation, des services fournis. Pour un hôpital, cela peut se traduire en pertes d'opportunités de soins, et de vies humaines.
Il est donc important d'établir une politique relative à ses données, d'en déterminer en amont la sensibilité et les mesures à mettre en place. Il est en effet important d'anticiper les problèmes, car une fois qu'ils surviennent, il est bien souvent déjà trop tard.
⚠ Il est nécessaire de s'assurer que les différentes solutions mises en place sont fonctionnelles. Par exemple que les sauvegardes sont correctement effectuées et que la restauration des données fonctionne et peut être rapidement mise en place.

Organiser ses données

Dans un premier temps, il est ainsi nécessaire d'identifier ses données, leurs besoins, et les solutions à mettre en place :
⚠ Il est important que les sauvegardes soient stockées dans des lieux différents afin de se prémunir contre des incidents pouvant toucher toute une zone (e.g. cambriolages, incendies, inondations, etc). Il est aussi possible d'enregistrer ses sauvegardes sur des disques coupés du réseau permettent de se protéger contre des attaques touchant l'intégralité du système informatique (e.g. rançongiciel).
Pour cela, une première étape est déjà de bien organiser ses fichiers autours d'une arborescence cohérente et consistante. Cela permet non-seulement de facilement pouvoir retrouver un fichier au quotidien, mais aussi d'aisément identifier les fichiers à chiffrer, sauvegarder, archiver, supprimer, etc. Par exemple :
💡 Les dossiers d'un même ordinateur peuvent être de natures très différentes. Un serveur de calcul peut ainsi posséder :

Arborescence Linux

Sous Linux les fichiers sont organisés comme suit :
⚠ Pour des raisons de sécurité les utilisateurs ne peuvent (sauf exceptions) modifier que les fichiers contenus dans leur propre home. et sont deux exceptions à cela.

Fichiers des applications

Afin de garder une arborescence propre et explicite, les logiciels évitent d'écrire leurs fichiers n'importe où et respectent autant que possible des conventions. Cela permet notamment d'éviter des conflits, e.g. deux exécutables souhaitant utiliser le même chemin pour deux fichiers différents.
Par convention on distingue 3 niveaux :
Par convention, on distingue alors 7 sous-dossiers (pas entièrement consistant) :
StandardLocalPersonnel
Base
Exécutables
Exécutables (admin)
Bibliothèques
Ressources
Configuration
Cache
💡 Il est aussi possible d'installer ses applications locales dans , évitant ainsi d'avoir à en disperser le contenu, entre ses executables, bibliothèques, et configurations.
⚠ Les fichiers temporaires sont usuellement enregistrés dans ( pour de gros fichiers), avec un nom aléatoire afin d'éviter des conflits : (make temporary [directory]). Les dans , sont remplacés par des caractères aléatoires, e.g. peut créer un fichier .
💡 Pour exécuter une commande, le shell va rechercher (puis exécuter) le fichier de même nom présent dans les dossiers . Ainsi, pour créer une commande, il faut placer le fichier exécutable dans un de ces dossiers.

Système de fichiers

Les méta-données

L'OS ne manipule pas les données directement sur le support de stockage, mais utilise un système de fichiers (filesystem) qui détermine où et comment stocker les données d'un fichier (file) ainsi que ses méta-données :
💡 Ces méta-données peuvent être visualisées via la commande :
$ ls -lh -d foo
Permissions  User    Group   Size       Date Modified        Name  
drwxrwxr-x  demigda demigda 4.0 KB Tue Apr  1 09:16:45 2025 📂  foo
⚠ Il convient de ne pas confondre ces méta-données, stockées au niveau du système de fichiers, et communes entre tous les fichiers, avec des méta-données stockées dans le fichier, et dépendant de son format (e.g. png, jpeg, pdf, zip).
💡 La commande affiche l'ensemble des méta-données d'un fichier, mais est peu utilisée en pratique :
$ stat foo
  Fichier : foo
   Taille : 4096      	Blocs : 8          Blocs d'E/S : 4096   répertoire
Périphérique : fd01h/64769d	Inœud : 6577172     Liens : 3
Accès : (0775/drwxrwxr-x)  UID : ( 1000/ demigda)   GID : ( 1000/ demigda)
Accès : 2025-03-29 15:02:50.812405953 +0100
Modif. : 2025-03-29 15:02:19.868310502 +0100
Changt : 2025-03-29 15:02:19.868310502 +0100
  Créé : 2025-03-29 15:01:55.808234278 +0100

Droits d'accès

Sous Linux, il est possible d'attribuer 3 types de droits :
Les droits d'accès à un fichier sont alors décrits par ses permissions (rwxrwxr-x), indiquant les droits :
💡 La présence d'un à la place d'un , , ou indique que le droit n'est pas attribué.
Par exemple, r-x correspond au droit de lecture () et d'exécution (), sans le droit de lecture ().
Les droits d'un fichier peuvent être modifiés grâce aux commandes suivantes :
💡 (recursive) permet d'appliquer ces changements de manière récursive (i.e. au dossier et à son contenu).
💡 s'écrit sous la forme suivante :
  • (user) : l'utilisateur propriétaire
  • (group) : le groupe propriétaire
  • (other) : les autres
  • (all) : tous les utilisateurs
  • : ajouter
  • : retirer
  • : appliquer
Par exemple :
⚠ Pour pouvoir exécuter un script (ou une commande), il est nécessaire de posséder les droits d'exécution (et de lecture) sur le fichier. Bien qu'il soit possible d'utiliser ces droits pour contrôler les droits d'exécution de commandes d'administration, il est souvent préférable d'utiliser sudo/sudoers pour un meilleur contrôle.
💡 Lors de sa création, un fichier possède des droits par défaut définis via la commande (user mask) :

Autres droits

En réalité, il existe 3 autres droits, peu utilisés :
⚠ Les droits SUID/SGID sont très dangereux, toujours utiliser sudoers à la place.

Droits d'accès avancés

La méthode usuelle d'attribution des droits permet d'indiquer des permissions uniquement pour le propriétaire, groupe propriétaire, et les autres. Pour une gestion plus fine des droits, on utilise les ACL (Access Control List) :
💡 En pratique les ACL sont peu utilisés au quotidien.
💡 Lorsqu'un fichier possède des droits ACL, affiche un à la fin des permissions :
$ ls -lh /tmp/foo
Permissions User Group Size      Date Modified          Name    
.rw-rwxr--+ root root  0 B  Wed Aug 27 10:44:06 2025   /tmp/foo

Les sauvegardes de fichiers

Une méthode triviale de sauvegarde est de simplement copier les fichiers avec (archive).
Pour une copie vers, ou depuis, un ordinateur distant, on remplacera par (remote sync) où les chemins seront alors de la forme : .
💡 L'option de permet de voir la progression du transfert.
💡 Il est possible de créer une archive compressée afin de réduire la taille de la sauvegarde :

Sauvegardes incrémentales et liens physiques

Les techniques vues précédemment sont des sauvegardes complètes, i.e. sauvegardent l'ensemble des données. Or si la majorité des fichiers ne changent pas d’une sauvegarde sur l’autre, on se retrouve alors avec des fichiers identiques, dupliqués dans différentes sauvegardes, et prenant très vite beaucoup de place pour rien. On souhaite ainsi généralement effectuer des sauvegardes incrémentales, i.e. ne sauvegarder que les modifications depuis la dernière sauvegarde.
On souhaite donc placer un même fichier dans plusieurs sauvegardes différentes (i.e. dans plusieurs endroits à la fois), mais sans le copier. Cela est rendu possible par le fait que les dossiers sont en réalité un fichier spécial contenant la liste des identifiants (inodes) des fichiers qu'il contient. Il est alors possible d'ajouter un même fichier dans plusieurs dossiers différents en créant un lien physique (hard link) via la commande (link). Dès lors, le fichier ne sera réellement supprimé que lorsque toutes ses occurrences seront supprimées.
effectue une sauvegarde incrémentale. Depuis la dernière sauvegarde, si le fichier :
💡 Comme la sauvegarde incrémentale utilise des liens physiques, vous pouvez parcourir, supprimer, renommer, modifier, etc. la sauvegarde comme tous dossiers.
⚠ Il n'est pas possible de faire un lien physique d'un dossier. Dans ce cas, il faudra créer un lien symbolique () : un fichier spécial contenant le chemin du fichier ciblé. Si le fichier ciblé est supprimé ou déplacé, le lien sera cassé.

Autres types de sauvegardes

Certains logiciels (e.g. les SGBD) permettent d'exporter et d'importer leurs données, par exemple en faisant un dump d'une base de donnée. Le format de l'export dépend du logiciel, et est généralement adapté aux besoins spécifiques du logiciel.
Dans le cas de dossiers partagés entre plusieurs utilisateurs, on souhaite généralement conserver un historique de chaque modification afin d'en avoir un suivi, et d'être capable, lorsque nécessaire, de restaurer un fichier à une version précédente. Pour cela on utilisera usuellement un logiciel de synchronisation de fichiers (e.g. Seafile).
Les gestionnaires de versions (e.g. git) quant à eux sont très utilisés pour les projets informatiques. Ils stockent différentes versions d'un projet via des sauvegardes incrémentales, tout en offrant de multiples fonctionnalités :

Les volumes de données

Un ordinateur enregistre ses données dans des espaces de stockage appelés volumes, qui peuvent être tout ou partie :
💡 Nous vous fournissons la commande afin de visualiser l'ensemble des volumes de l'ordinateur :
# lsvol
PATH              LABEL TYPE  PARTTYPENAME       SIZE FSUSE% FSTYPE
/dev/nvme0n1            disk                   238,5G                    
├─/dev/nvme0n1p1  EFI   part  EFI System         512M     1% vfat
├─/dev/nvme0n1p2  BOOT  part  Linux filesystem   732M    36% ext4
💡 Dans Linux, les volumes et les périphériques sont représentés par un fichier dans (devices).
💡 Cela signifie que vous pouvez copier un volume avec ou , comme on copie un fichier. La copie pouvant être longue, il est toutefois recommandé d'afficher la progression de la copie. Une fois la copie effectuée, il est aussi recommandé d'exécuter la commande afin de vider les écritures encore en cache.

Monter un volume

Le fichier d'un volume contient des données binaires brutes que seul le système de fichier est capable d'interpréter. Pour en visualiser le contenu, il faudra le monter, c'est à dire associer le volume à un dossier (existant) de l'arborescence alors appelé point de montage (mount point) :
💡 Par convention, on monte par défaut les volumes dans les dossiers suivants :
💡 possède de nombreuses options, comme pour monter le volume en lecture seule.

Monter un dossier/volume distant

Il est possible de monter un dossier ou un volume distant :
⚠ Si plusieurs ordinateurs peuvent écrire dans le dossier ou volume distant, on préfera souvent utiliser un logiciel de synchronisation de données qui synchronisera le dossier tout en offrant les fonctionnalités nécessaires à un usage courant (historique, gestions de conflits, etc.).

Monter une archive

💡 Manipuler une archive en ligne de commandes n'est pas évident. Vous pouvez cependant en manipuler le contenu, comme on manipule des fichiers, en la montant dans un dossier grâce à .

Monter la RAM (tmpfs)

Il est aussi possible de monter la RAM dans un dossier, permettant ainsi d'enregistrer des fichiers temporaires en RAM, pour des opérations de lecture/écriture bien plus rapides : .
💡 C'est d'ailleurs généralement ce qui est fait avec .
Les opérations d'entrées/sorties (E/S) sont en effet très coûteux, une simple boucle pouvant être :
On cherche donc à réduire le nombre d'opérations d'E/S qu'on effectue, que ce soit en pré-chargeant les ressources nécessaires, en utilisant un système de cache ou de buffer. Par exemple, au lieu de lire plusieurs fois le même fichier, le charger intégralement en mémoire au début du programme.
⚠ La RAM est un stockage temporaire, il est nécessaire de sauvegarder régulièrement les résultats ou l'avancement d'un calcul, afin de ne pas (trop) perdre de données si le programme plante.

Formatter un volume

Comme nous l'avons vu précédemment, un volume est représenté sous la forme d'un fichier dans . Monter un volume revient donc à monter un fichier un peu spécial.
Il est possible de créer un tel fichier via la commande qui créera un fichier creux (sparse) d'une taille donnée. C'est à dire que les blocs vides (à 0) du fichier ne sont pas enregistrés sur le disque.
💡 Il convient d'utiliser l'option pour copier un fichier avec ou .
En réalité, on ne monte pas un volume, mais un système de fichier. Ainsi avant de pouvoir monter un tel volume, il faut d'abord le formatter, c'est à dire lui attribuer un système de fichier qui déterminera la manière dont seront enregistrés les fichiers sur le volume.
Il existe une pléthore de systèmes de fichiers différents, chacun fournissant des fonctionnalités spécifiques :
💡 Par défaut, les systèmes de fichiers suivants sont usuellement utilisés :
Pour formatter un volume, on utilise les commandes (make filesystem). Par exemple pour formatter en . Les options ne sont malheureusement pas consistantes entre les différents systèmes de fichiers.
💡 Une fois le volume formaté, on peut lui donner un nom plus explicite en attribuant une étiquette (label) à son système de fichier, e.g. au lieu de . On pourra alors le monter via .
💡 attribue une étiquette à un volume ext4. Malheureusement, chaque système de fichiers a sa propre commande d'attribution d'étiquettes.

Chiffrer un volume

Pour des raisons de sécurité, il est fréquent de chiffrer ses volumes, pour éviter qu'une personne mal intentionnée puisse exploiter les données sensibles d'un volume perdu ou volé (e.g. clefs USB, ordinateur portable).
Pour cela, on utilise pour formatter le volume, qu'on peut ensuite (dé)verrouiller via :
Lorsque le volume chiffré est déverrouillé, le volume permet de manipuler les données en clair, répercutant les modifications sur le volume chiffré. Comme tout autre volume, il doit être formaté pour être monté.
💡 Pour chiffrer le home d'un utilisateur lors de sa création, il est possible d'utiliser .
💡 Pour des raisons de sécurité, il est fréquent de remplir un volume de données aléatoires ou de 0, afin d'en effacer les données. Pour cela on peut copier, sur le volume, les fichier de taille infinis suivant :

fstab (filesystem table)

Le fichier (filesystem table) liste les systèmes de fichiers connus. Ses lignes sont structurées ainsi :
Les 4 premières colonnes correspondent aux arguments de mount : .
💡 Les systèmes de fichiers listés dans fstab :
💡 De manière analogue, cryptsetup a un fichier pour les volumes à déverrouiller au démarrage.

udisksctl

Pour des raisons de sécurité, seul l'administrateur peut monter certains systèmes de fichiers avec mount. Les utilisateurs doivent généralitement utiliser à la place (user disks control) :
⚠ Un utilisateur ne dispose pas des droits nécessaires pour formatter un volume déverrouillé avec .

Les partitions

Il est possible de partitionner un support de stockage physique (disque, clef USB) en plusieurs volumes appelés partitions, qui auront chacun leur propre système de fichier. Par exemple, dans le cas d'un dual boot, l'ordinateur aura une partition Windows et une partition Linux.
💡 Lorsque le système d'exploitation est installé sur une clef USB, on parle alors de live USB.
⚠ Il est très vivement conseillé d'avoir au moins un live USB en cas de problèmes avec l'OS.
Il est même recommandé de stocker ses données sur une partition à part, permettant de (ré)installer le système d'exploitation, sans effacer les données déjà présentes (une sauvegarde préalable des données est toutefois très vivement conseillée).
⚠ Il est recommandé de créer au moins une partitions sur ses disques, même s'il est possible de les utiliser en entier sans les partitionner. Pour cela, on utilisera la commande TUI , ou un logiciel comme gparted.

LVM

Mieux expliquer les 3 étapes : disque virtuel constitué d'un ou plusieurs volumes (e.g. plusieurs disques), qu'on peut ensuite partitionner. + partitionner volumes (e.g. partitionner un volume chiffré)
LVM (Logical Volume Manager) est un logiciel permettant de gérer les volumes d'un ordinateur. Pour cela :
  1. on formate des volumes alors appelés volumes physiques (physical volume) :
  2. qu'on regroupe ensuite au sein d'un groupe de volume (volume group ≈ disque virtuel) :
  3. qu'on redécoupe ensuite en volumes logiques (logicial volume ≈ partition virtuelle) :
  • LVM offre alors différentes fonctionnalités :
  • 💡 Bien évidemment LVM possède de très nombreuses commandes permettant de manipuler les PV, VG, et LV.
    CMD : (lv/pv/vg)(create/reduce/display/s/move/remove/rename/extends)

    RAID

    Le RAID (Redundant Array of Inexpensive Disk) permet de dupliquer, en temps réel, les données sur plusieurs disques afin d'éviter les pertes de données en cas de défaillance matérielle. Il possède plusieurs "niveaux" :
    Nom Description # disques Résilience
    RAID 0 (striping) volume sur plusieurs disques N 0
    RAID 1 (mirroring) duplique un disque 1+1 1
    RAID 5 (distributed parity) bloc de parité bp = b1 ⊕ ... ⊕ bn N+1 1
    RAID 6 (dual parity) 2 blocs de parité N+2 2
    💡 Il est possible de faire des combinaisons, e.g. RAID 1+0 ou RAID 10.

    Snapshots

    Que se passe-t-il aussi si le serveur modifie des fichiers pendant la sauvegarde ?
    La sauvegarde se retrouverait dans un état invalide, avec un mix de fichiers pré-modifications et post-modifications.
    Une sauvegarde nécessite ainsi généralement l'arrêt des services du serveur. Or les opérations de sauvegardes peuvent être longues, de plusieurs minutes à plusieurs heures. Ce qui est autant de temps pendant lesquel les services seront indisponibles.
    Mieux expliquer le principe
    La solution est alors de créer un instantané (snapshot) du système de fichier à un instant donné, et d’effectuer la sauvegarde à partir de cet instantané :
    1. arrêt des services
    2. redémarrage des services
    3. sauvegarde
    4. suppression de l'instantané :
    Lors de la modifications d'un bloc, l'instantané enregistrera le bloc original. Ainsi lorsqu'on cherchera à récupérer un bloc, LVM ira le rechercher dans l'instantané, puis dans le volume originel si non trouvé (i.e. pas modifié).