- Les pertes de données...
- erreur de manipulations ;
- acte de cyberdélinquance ;
- défaillance du matériel ;
- incendie.
- ... ont un coût élevé...
- remise en service
- interruption des activités
- impossibilité d'honorer des obligations contractuelles.
- ... avec des conséquences graves :
- pertes de contrats
- pertes de données clients/fournisseurs
- perte de réputation
- faillite d'entreprise
- vies humaines (e.g. hôpitaux)
⚠ Il est ainsi vital d'effectuer régulièrement des sauvegardes :
- en vérifiant la procédure de restauration ;
- stockées dans des lieux différents (e.g. cambriolages, incendies, inondations).
- sur des disques coupés du réseau (e.g. rançongiciel).
- réellement utile qu'une fois qu'il est trop tard.
Préparer une sauvegarde :
- quoi : que va-t-on sauvegarder ?
- comment et où va-t-on enregistrer la sauvegarde ?
- quand et à quelle fréquence va-t-on effectuer la sauvegarde ?
Bien organiser ses fichiers :
- retrouver facilement un fichier ;
- identifier les fichiers obsolètes ;
- faciliter les sauvegardes.
- cohérence ;
- consistance.
Par exemple :
- : supports de cours, rendus de TP, etc. à sauvegarder chaque soir.
- : téléchargements temporaires, ne nécessite pas de sauvegardes.
- : fichiers personnels de l'utilisateur (dossier potentiellement sensible).
- : logiciels installés (lecture seule et partagé entre plusieurs ordinateurs).
- : configuration du logiciel , données spécifiques à l'ordinateur (lecture seule).
- : fichiers servis par le serveur (e.g. pour un serveur Web, de fichier, etc), peu utilisé.
- : données écrites par les logiciels en cours d'exécution, contient les logs.
- : fichiers temporaires, supprimés au redémarrage de la machine (stockés en RAM).
⚠ Générer aléatoirement les noms des fichiers temporaires de afin d'éviter des collisions.
💡 Pour de gros fichiers temporaire, on utilisera généralement au lieu de .
💡 Pour de gros fichiers temporaire, on utilisera généralement au lieu de .
⚠ Les utilisateurs ne peuvent modifier que les fichiers de leur home et de (sauf exceptions).
| Standard/Partagé | Local | Personnel | |
|---|---|---|---|
| Base | |||
| Exécutables | |||
| Exécutables (admin) | |||
| Bibliothèques | |||
| Ressources | |||
| Configuration | |||
| Cache |
💡 , : contiennent les commandes (fichier de même nom).
💡 : donne le type et emplacement de la commande.
💡 : alternative à .
💡 : donne le type et emplacement de la commande.
💡 : alternative à .
Pour chaque fichier, le système enregistre ses méta-données :
- son type
- son propriétaire
- sa date de dernière modification
- sa taille
- les droits d'accès au fichier
- etc.
💡 : afficher les méta-données.
$ 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
⚠ Ne pas confondre les méta-données stockées au niveau du :
- système de fichiers : communes entre tous les fichiers ;
- fichier : dépendant de son format (e.g. png, jpeg, pdf, zip).
Permissions User Group Size Date Modified Name drwxrwxr-x demigda demigda 4.0 KB Tue Apr 1 09:16:45 2025 📂 foo
Les droits sont décrits par 3 caractères ( affiché si le droit n'est pas donné) :
- (read) : lecture du fichier (ou lister le contenu d'un dossier).
- (write) : écriture du fichier (ou modifier le contenu d'un dossier).
- (exec) : exécution du fichier script/binaire qui est alors un exécutable (ou aller dans le dossier).
Ces droits peuvent être attribués à :
- : l'utilisateur (user) propriétaire du fichier.
- : le groupe d'utilisateur (group) propriétaire du fichier ;
- : les autres utilisateurs.
⚠ Bien penser à donner le droit d'exécution (et de lecture) sur les fichiers de script.
(change owner) : changer l'utilisateur/groupe propriétaire.
(change mode) : changer les droits d'un fichier.
💡 (recursive) : appliquer les changements de manière récursive.
(change mode) : changer les droits d'un fichier.
💡 (recursive) : appliquer les changements de manière récursive.
s'écrit sous la forme suivante :
- (user) : l'utilisateur
- (group) : le groupe
- (other) : les autres
- (all) : tous les utilisateurs
- : ajouter
- : retirer
- : appliquer
- : ajouter le droit d'exécution à l'utilisateur propriétaire.
- : retire le droit de lecture au groupe propriétaire et aux autres.
- : donne aux autres uniquement les droits de lecture et d'exécution (retire le droit de lecture).
- : retire le droit d'exécution à tous, et ajoute le droit de lecture.
Sauvegarde complète : sauvegarde l'ensemble des données.
- : copier les fichiers en conservant les méta-données (archive).
- : créer une archive compressée.
- : créer une archive compressée.
Problèmes :
- fichiers non-modifiés dupliqués d'une sauvegarde sur l'autre.
- lent, prend beaucoup de place pour rien.
Sauvegardes incrémentales : ne sauvegarde que les modifications depuis la dernière sauvegarde.
- : permet de faire des sauvegardes incrémentales (usage similaire à ).
💡 Un script basé sur sera fourni en TP afin de faciliter son usage.
- On veut pouvoir parcourir et manipuler les sauvegardes incrémentales comme si créée via .
- si modifié : copier le fichier.
- sinon : créer un lien physique.
Lien physique (hard link) : place un même fichier (inode) dans plusieurs dossiers, sans le copier.
- fichier supprimé lorsque toutes les occurrences sont supprimées.
Lien symbolique : fichier spécial contenant le chemin de la cible (pour les dossiers/entre volumes).
- fichier supprimé lorsque la cible est supprimée.
(link) : crée un lien physique (ou symbolique).
Gestionnaire de version (e.g. Git) : sauvegardes plus intelligentes (e.g. pour code/configs), permet de :
- ajouter une description aux versions.
- comparer deux versions.
- gérer plusieurs versions en parallèle.
- annuler une modification précise.
- intégration avec des interfaces Web et des fonctionnalités comme les issues.
Synchronisation de fichiers (e.g. Seafile) : conserve un historique de chaque modifications en temps réel.
- pour dossiers partagés entre plusieurs utilisateurs.
- permet de restaurer un fichier à une version précédente.
Exportations/Importations (e.g. dump d'une base SQL) :
- format de l'export généralement adapté aux besoins spécifiques du logiciel.
Un volume est un espace de stockage :
- disque entier ;
- partie de disque (partition) ;
- ensemble de partitions ;
- clef USB ;
- etc.
💡 Sur un ordinateur personnel, généralement un seul système de fichier, sur le disque entier.
monter (mount) un volume : l'associer à un dossier (point de montage/mountpoint) de l'arborescence :
# lsvol PATH LABEL TYPE PARTTYPENAME SIZE FSUSE% FSTYPE MOUNTPOINT /dev/nvme0n1 disk 238,5G ├─/dev/nvme0n1p1 EFI part EFI System 512M 1% vfat /boot/efi ├─/dev/nvme0n1p2 BOOT part Linux filesystem 732M 36% ext4 /boot ├─/dev/nvme0n1p3 DATA part Linux filesystem 237,3G 0% ext4 /
: monter un volume (de nombreuses options e.g. lecture seule ).
: démonter le volume.
: démonter le volume.
💡 Par défaut, on monte usuellement les volumes dans :
- : pour les volumes amovibles (e.g. clef USB) ;
- : pour les volumes montés manuellement.
(FileSystem Table) : liste les systèmes de fichiers à monter au démarrage de la machine :
- : options à transmettre à la commande . (noauto cf TP).
- : obsolète.
- : ordre dans lequel monter le système de fichier (1 pour la racine, 2+ pour les suivants).
💡 Il est aussi possible de monter :
- des volumes NFS (Network FileSystem) distants, cf https://doc.ubuntu-fr.org/disque_reseau
- des dossiers distants via SSH avec la commande , cf TP.
Différents systèmes de fichiers...
- compression des données (, ) ;
- chiffrement des données (via ) ;
- conservation d'un historique (via , ou ) ;
- données stockées sur la RAM ();
- données stockées à distance (, ).
- modifications possibles mais non-persistantes (via , , , ou );
... pour différents besoins :
- sauvegardes fréquentes ;
- lecture seule ;
- partagé sur le réseau ;
- stocké en RAM.
Or, un volume ne peut contenir qu'un seul système de fichier.
Il faut alors découper les ressources de stockages en plusieurs volumes.
Il faut alors découper les ressources de stockages en plusieurs volumes.
💡 Par défaut, les systèmes de fichiers suivants sont usuellement utilisés :
- pour Linux ;
- pour Windows ;
- pour Apple ;
- pour les clefs USB ;
Pour créer un nouveau volume :
- (ou logiciel comme gparted) pour créer/manipuler les partitions d'un disque.
- commande TUI en TP
- pour formatter la partition, i.e. lui attribuer un système de fichier.
- pour lui attribuer un label.
# mkfs.ext4 /dev/nvme0n1p3 # e2label /dev/nvme0n1p3 DATA # 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 ├─/dev/nvme0n1p3 DATA part Linux filesystem 237,3G 0% ext4
⚠ La commande permettant d'attribuer une étiquette au volume dépend du système de fichier utilisé.
Séparer données et OS sur deux volumes différents.
- permet de (ré)installer l'OS sans effacer les données.
Possibilité, sur un même ordinateur, d'installer plusieurs OS (qu'on choisi au démarrage) pour :
- avoir un dual boot Linux-Windows ;
- avoir un système d'exploitation de secours ;
- tester un système d'exploitation.
💡 live USB : clef USB surlaquelle un système d'exploitation est installé.
⚠ Il est très vivement recommandé d'avoir au moins un live USB.
⚠ Il est très vivement recommandé d'avoir au moins un live USB.
LVM (Logical Volume Manager) : permet de gérer les volumes d'un ordinateur.
- volumes physiques (physical volume) : volumes formatés pour LVM.
- groupe de volume (volume group ≈ disque virtuel) : ensemble de volumes physiques.
- volumes logiques (logicial volume ≈ partition virtuelle) : partition d'un groupe de volumes.
LVM offre alors différentes fonctionnalités :
- RAID :
- instantanés (snapshots) du système de fichier ;
- etc.
💡 LVM possède de très nombreuses commandes pour manipuler les PV, VG, et LV.
RAID (Redundant Array of Inexpensive Disk) : duplique les données sur plusieurs disques pour se protéger en cas de défaillance matérielle.
| 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 |
💡 Possibilité de faire des combinaisons, e.g. RAID 1+0 ou RAID 10.
Les opérations de sauvegardes peuvent être longues, de plusieurs minutes à plusieurs heures.
- que se passe-t-il si le serveur modifie des fichiers pendant la sauvegarde ?
- mix de fichiers pré/post modifications ⇒ état incohérent/invalide.
- services indisponibles pendant la sauvegarde.
Solution : créer un instantané (snapshot) du système de fichier, et effectuer la sauvegarde de l'instantané.
- si modification d'un bloc, stocke la version originelle dans l'instantané.
- si bloc non-modifié, ira le rechercher dans le volume originel.
⚠ Bien penser à supprimer l'instantané une fois la sauvegarde effectuée.