Sauvegardes et restaurations

La sauvegarde va permettre de répondre à un besoin de conservation et de restauration des données de manière sûre et efficace.

La sauvegarde permet de se protéger des éléments suivants :

  • Destruction : volontaire ou involontaire. Humaine ou technique. Virus, …

  • Suppression : volontaire ou involontaire. Humaine ou technique. Virus, …

  • Intégrité : données devenues inutilisables.

Aucun système n’est infaillible, aucun humain n’est infaillible, aussi pour éviter de perdre des données, il faut les sauvegarder pour être en mesure de les restaurer suite à un problème.

Les supports de sauvegarde sont conservés dans une autre pièce (voire bâtiment) que le serveur afin qu’un sinistre ne vienne pas détruire le serveur et les sauvegardes.

De plus, l’administrateur devra régulièrement vérifier que les supports soient toujours lisibles.

Généralités

Il existe deux principes, la sauvegarde et l'archive.

  • L’archive détruit la source d’information après l’opération.

  • La sauvegarde conserve la source d’information après l’opération.

Ces opérations consistent à enregistrer des informations dans un fichier, sur un périphérique ou un support (bandes, disques, …).

La démarche

La sauvegarde nécessite de l’administrateur du système beaucoup de discipline et une grande rigueur. Il est nécessaire de se poser les questions suivantes :

  • Quel est le support approprié ?

  • Que faut-il sauvegarder ?

  • Nombre d’exemplaires ?

  • Durée de réalisation de la sauvegarde ?

  • Méthode ?

  • Fréquence ?

  • Automatique ou manuelle ?

  • Où la stocker ?

  • Délai de conservation ?

Méthodes de sauvegardes

  • Complète : un ou plusieurs systèmes de fichiers sont sauvegardés (noyau, données, utilitaires, …).

  • Partielle : un ou plusieurs fichiers sont sauvegardés (configurations, répertoires, …).

    • Différentielle : uniquement les fichiers modifiés depuis la dernière sauvegarde complète sont sauvegardés.

    • Incrémentale : uniquement les fichiers modifiés depuis la dernière sauvegarde sont sauvegardés.

Périodicité

  • Ponctuelle : à un instant donné (avant une mise à jour du système, …).

  • Périodique : Journalière, hebdomadaire, mensuelle, …

Avant une modification du système, il peut être utile de faire une sauvegarde. Cependant, il ne sert à rien de sauvegarder tous les jours des données qui ne sont modifiées que tous les mois.

Méthodes de restauration

En fonction des utilitaires disponibles, il sera possible d’effectuer plusieurs types de restaurations.

  • Restauration complète : arborescences, …

  • Restauration sélective : partie d’arborescences, fichiers, …

Il est possible de restaurer la totalité d’une sauvegarde mais il est également possible d’en restaurer uniquement une partie. Toutefois, lors de la restauration d’un répertoire, les fichiers créés après la sauvegarde ne sont pas supprimés.

Pour récupérer un répertoire tel qu’il était au moment de la sauvegarde il convient d’en supprimer complètement le contenu avant de lancer la restauration.

Les outils

Il existe de nombreux utilitaires pour réaliser les sauvegardes.

  • outils d’éditeurs ;

  • outils graphiques ;

  • outils en ligne de commande : tar, cpio, pax, dd, dump, …

Les commandes que nous verrons ici sont tar et cpio.

  • tar :

    • simple d’utilisation ;

    • permet l’ajout de fichiers à une sauvegarde existante.

  • cpio :

    • conserve les propriétaires ;

    • groupes, dates et droits ;

    • saute les fichiers endommagés ;

    • système de fichiers complet.

Ces commandes sauvegardent dans un format propriétaire et standardisé.

Convention de nommage

L’emploi d’une convention de nommage permet de cibler rapidement le contenu d’un fichier de sauvegarde et d’éviter ainsi des restaurations hasardeuses.

  • nom du répertoire ;

  • utilitaire employé ;

  • options utilisées ;

  • date.

Le nom de la sauvegarde doit être un nom explicite.

La notion d’extension sous Unix n’existe pas.

Contenu d’une sauvegarde

Une sauvegarde contient généralement les éléments suivants :

  • le fichier ;

  • le nom ;

  • le propriétaire ;

  • la taille ;

  • les permissions ;

  • date d’accès.

Le numéro d'inode est absent.

Modes de stockage

Deux modes de stockage se distinguent :

  • fichier sur le disque ;

  • périphérique.

Tape ArchiveR - tar

La commande tar permet la sauvegarde sur plusieurs supports successifs (options multi-volumes).

Il est possible d’extraire tout ou partie d’une sauvegarde.

tar sauvegarde implicitement en mode relatif même si le chemin des informations à sauvegarder est mentionné en mode absolu. Toutefois, la sauvegarde et la restauration en mode absolue sont possibles.

Consignes de restauration

Il faut se poser les bonnes questions :

  • quoi : partielle ou complète ;

  • où : lieu où les données seront restaurées ;

  • comment : absolu ou relatif.

Avant une restauration, il faut prendre le temps de la réflexion et déterminer la méthode la mieux adaptée afin d’éviter toute erreur.

Les restaurations s’effectuent généralement après un problème qui doit être résolu rapidement. Une mauvaise restauration peut, dans certains cas, aggraver la situation.

La sauvegarde avec tar

L’utilitaire par défaut pour créer des sauvegardes dans les systèmes UNIX est la commande tar. Ces sauvegardes peuvent être compressées par bzip2, xz, lzip, lzma, lzop, gzip, compress ou encore zstd.

tar permet d’extraire aussi bien un seul fichier ou un répertoire d’une sauvegarde, visualiser son contenu ou valider son intégrité, etc.

Estimer la taille d’une sauvegarde

La commande suivante estime la taille en kilo octet d’un éventuel fichier tar :

$ tar cf - /repertoire/a/sauvegarder/ | wc -c
20480
$ tar czf - /repertoire/a/sauvegarder/ | wc -c
508
$ tar cjf - /repertoire/a/sauvegarder/ | wc -c
428

Attention, la présence de « - » dans la ligne de commande perturbe zsh. Passez en bash !

Convention de nommage d’une sauvegarde tar

Voici un exemple de convention de nommage d’une sauvegarde tar, sachant que la date est à ajouter au nom.

Table 1. Exemple d’une convention nommage
Clés Fichiers Suffixe Remarques : Sauvegarde de :

cvf

home

home.tar

/home en relatif, sans compression

cvfP

/etc

etc.P.tar

/etc en absolu, sans compression

cvfz

usr

usr.tar.gz

/usr en relatif, compression gzip

cvfj

usr

usr.tar.bz2

/usr en relatif, compression bzip2

cvfPz

/home

home.P.tar.gz

/home en absolu, compression gzip

cvfPj

/home

home.P.tar.bz2

/home en absolu, compression bzip2

Créer une sauvegarde

Créer une sauvegarde en mode relatif

Créer une sauvegarde non-compressée et implicitement en mode relatif s’effectue avec les clefs cvf :

Syntaxe de la commande tar pour créer une sauvegarde
tar c[vf] [support] [fichiers(s)]

Exemple :

[root]# tar cvf /sauvegardes/home.133.tar /home/
Table 2. Clefs principales de la commande tar
Clef Description

c

Crée une sauvegarde.

v

Affiche le nom des fichiers traités.

f

Permet d’indiquer le nom de la sauvegarde (support).

Le tiret (-) devant les clefs de tar n’est pas nécessaire !

Créer une sauvegarde en mode absolu

Créer une sauvegarde non-compressée et explicitement en mode absolu s’effectue avec les clefs cvfP :

Syntaxe de la commande tar pour créer une sauvegarde en mode absolu
$ tar c[vf]P [support] [fichiers(s)]

Exemple :

[root]# tar cvfP /sauvegardes/home.133.P.tar /home/
Clef Description

P

Créer une sauvegarde en mode absolu.

Avec la clef P, le chemin des fichiers à sauvegarder doit être renseigné en absolu. Si les deux conditions (clef P et chemin absolu) ne sont pas indiquées, la sauvegarde est en mode relatif.

Créer une sauvegarde compressée avec gzip

Créer une sauvegarde compressée en gzip s’effectue avec les clefs cvfz :

$ tar cvzf sauvegarde.tar.gz dirname/
Clef Description

z

Compresse la sauvegarde en gzip.

L’extension .tgz est une extension équivalente à .tar.gz.

Conserver les clefs cvf (tvf ou xvf) inchangées pour toutes les manipulations de sauvegarde et simplement ajouter à la fin de la clef celle de compression facilite la compréhension de la commande (par exemple cvfz ou cvfj, etc…).

Créer une sauvegarde compressée avec bzip

Créer une sauvegarde compressée en bzip s’effectue avec les clefs cvfj :

$ tar cvfj sauvegarde.tar.bz2 dirname/
Clef Description

j

Compresse la sauvegarde en bzip2.

Les extensions .tbz et .tb2 sont des extensions équivalentes à .tar.bz2

Compressions compress, gzip, bzip2, lzip et xz

La compression, et par conséquence la décompression, aura un impact sur la consommation de ressources (temps et utilisation CPU).

Voici un classement de la compression d’un ensemble de fichiers textes, du moins au plus efficace :

  • compress (.tar.Z)

  • gzip (.tar.gz)

  • bzip2 (.tar.bz2)

  • lzip (.tar.lz)

  • xz (.tar.xz)

Ajouter un fichier ou un répertoire à une sauvegarde existante

Il est possible d’ajouter un ou plusieurs éléments à une sauvegarde déjà existante.

Syntaxe de la commande tar pour ajouter un élément à une sauvegarde existante
tar {r|A}[clé(s)] [support] [fichiers(s)]

Pour ajouter /etc/passwd à la sauvegarde /sauvegardes/home.133.tar :

[root]# tar rvf /sauvegardes/home.133.tar /etc/passwd

Ajouter un répertoire est similaire. Ici ajouter dirtoadd à sauvegarde_name.tar :

$ tar rvf sauvegarde_name.tar dirtoadd
Clef Description

r

Ajoute un ou plusieurs fichiers à la fin d’une sauvegarde sur support à accès direct (disque dur).

A

Ajoute un ou plusieurs fichiers à la fin d’une sauvegarde sur support à accès séquentiel (bande).

Il n’est pas possible d’ajouter des fichiers ou des dossiers à une sauvegarde compressée.

$ tar rvfz sauvegarde.tgz filetoadd
tar: Cannot update compressed archives
Try `tar --help' or `tar --usage' for more information.

Si la sauvegarde a été réalisée en mode relatif, ajoutez des fichiers en mode relatif. Si la sauvegarde a été réalisée en mode absolu, ajoutez des fichiers en mode absolu.

En mélangeant les modes, vous risquez d’avoir des soucis au moment de la restauration.

Lister le contenu d’une sauvegarde

Visualiser le contenu d’une sauvegarde sans l’extraire est possible.

Syntaxe de la commande tar pour lire le contenu d’une sauvegarde
tar t[clé(s)] [support]
Clef Description

t

Affiche le contenu d’une sauvegarde (compressée ou non).

Exemples :

$ tar tvf sauvegarde.tar
$ tar tvfz sauvegardee.tar.gz
$ tar tvfj sauvegarde.tar.bz2

Lorsque le nombre de fichiers contenus dans une sauvegarde devient important, il est possible de passer, par un pipe le résultat de la commande tar à un pager (more, less, most, etc.) :

$ tar tvf sauvegarde.tar | less

Pour lister ou extraire le contenu d’une sauvegarde, il n’est pas nécessaire de mentionner l’algorithme de compression utilisé à la création de la sauvegarde. C’est-à-dire qu’un tar tvf est équivalent à tar tvfj, pour lire le contenu, et un tar xvf est équivalent à tar xvfj, pour extraire.

Toujours vérifier le contenu d’une sauvegarde.

Vérifier l’intégrité d’une sauvegarde

L’intégrité d’une sauvegarde peut être testée avec la clef W au moment de sa création :

$ tar cvfW file_name.tar dir/

L’intégrité d’une sauvegarde peut être testée avec la clef d après sa création :

$ tar vfd file_name.tar dir/

En ajoutant un second v à la clé précédente, vous obtiendrez la liste des fichiers archivés ainsi que les différences entre les fichiers archivés et ceux présents dans le système de fichiers.

$ tar vvfd  /tmp/quodlibet.tar .quodlibet/
drwxr-x--- stagiaire/stagiaire     0 2019-11-21 00:11 .quodlibet/
-rw-r--r-- stagiaire/stagiaire     0 2019-11-19 00:59 .quodlibet/queue
[…]
-rw------- stagiaire/stagiaire  3323 2019-11-21 00:11 .quodlibet/config
.quodlibet/config: La date de modification est différente.
.quodlibet/config: La taille est différente.
[…]

Extraire (untar) une sauvegarde

Extraire (untar) une sauvegarde *.tar s’effectue avec les clefs xvf :

Extrait le fichier etc/exports de la sauvegarde /sauvegardes/etc.133.tar dans le répertoire etc du répertoire actif.
$ tar xvf /sauvegardes/etc.133.tar etc/exports
Extrait tous les fichiers de la sauvegarde compressée /sauvegardes/home.133.tar.bz2 dans le répertoire actif.
[root]# tar xvfj /sauvegardes/home.133.tar.bz2
Extrait tous les fichiers de la sauvegarde /sauvegardes/etc.133.P.tar dans leur répertoire d’origine
$ tar xvfP /sauvegardes/etc.133.P.tar

Se placer au bon endroit.

Vérifier le contenu de la sauvegarde.

Clef Description

x

Extrait des fichiers de la sauvegarde, compressée ou non.

Extraire une sauvegarde tar-gzippée (*.tar.gz) s’effectue avec les clefs xvfz

$ tar xvfz sauvegarde.tar.gz

Extraire une sauvegarde tar-bzippée (*.tar.bz2) s’effectue avec les clefs xvfj

$ tar xvfj sauvegarde.tar.bz2

Pour extraire ou lister le contenu d’une sauvegarde, il n’est pas nécessaire de mentionner l’algorithme de compression utilisé à la création de la sauvegarde. C’est-à-dire qu’un tar xvf est équivalent à tar xvfj, pour extraire le contenu, et un tar tvf est équivalent à tar tvfj, pour lister.

Pour restaurer les fichiers dans leur répertoire d’origine (clé P d’un tar xvf), il faut avoir généré la sauvegarde avec le chemin absolu. C’est-à-dire avec la clé P d’un tar cvf.

Extraire uniquement un fichier d’une sauvegarde tar

Pour extraire un fichier spécifique d’une sauvegarde tar, spécifiez le nom de ce fichier à la fin de la commande tar xvf.

$ tar xvf sauvegarde.tar /path/to/file

La commande précédente permet de n’extraire que le fichier /path/to/file de la sauvegarde sauvegarde.tar. Ce fichier sera restauré dans le répertoire /path/to/ créé, ou déjà présent, dans le répertoire actif.

$ tar xvfz sauvegarde.tar.gz /path/to/file
$ tar xvfj sauvegarde.tar.bz2 /path/to/file
Extraire un dossier d’une sauvegarde tar

Pour n’extraire qu’un seul répertoire (ses sous-répertoires et fichiers inclus) d’une sauvegarde, spécifiez le nom du répertoire à la fin de la commande tar xvf.

$ tar xvf sauvegarde.tar /path/to/dir/

Pour extraire plusieurs répertoires, spécifier chacun des noms les uns à la suite des autres :

$ tar xvf sauvegarde.tar /path/to/dir1/ /path/to/dir2/
$ tar xvfz sauvegarde.tar.gz /path/to/dir1/ /path/to/dir2/
$ tar xvfj sauvegarde.tar.bz2 /path/to/dir1/ /path/to/dir2/
Extraire un groupe de fichiers d’une sauvegarde tar grâce à des expressions régulières (regex)

Spécifier une regex pour extraire les fichiers correspondants au motif de sélection spécifié.

Par exemple, pour extraire tous les fichiers avec l’extension .conf :

$ tar xvf sauvegarde.tar --wildcards '*.conf'

Clefs :

  • --wildcards *.conf correspond aux fichiers avec l’extension .conf.

CoPy Input Output - cpio

La commande cpio permet la sauvegarde sur plusieurs supports successifs sans indiquer d’options.

Il est possible d’extraire tout ou partie d’une sauvegarde.

Il n’y a pas d’option, à l’inverse de la commande tar, permettant de sauvegarder et de compresser en même temps. Cela s’effectue donc en deux temps : la sauvegarde puis la compression.

Pour effectuer une sauvegarde avec cpio, il faut préciser une liste des fichiers à sauvegarder.

Cette liste est fourni avec les commandes find, ls ou encore cat.

  • find : parcourt une arborescence, récursif ou non ;

  • ls : liste un répertoire, récursif ou non ;

  • cat : lit un fichier contenant les arborescences ou fichiers à sauvegarder.

ls ne peut pas être utilisé avec -l (détails) ou -R (récursif).

Il faut une liste simple de noms.

Créer une sauvegarde avec cpio

Syntaxe de la commande cpio
[cde de fichiers |] cpio {-o| --create} [-options] [<fic-liste] [>support]

Exemple :

Avec une redirection de la sortie de cpio.
$ find /etc | cpio -ov > /sauvegardes/etc.cpio
En utilisant le nom d’un support de sauvegarde.
$ find /etc | cpio -ovF /sauvegardes/etc.cpio

Le résultat de la commande find est envoyé en entrée de la commande cpio par l’intermédiaire d’un pipe (caractère “|”, kbd:[AltGr +6]).

Ici, la commande find /etc renvoie une liste de fichiers correspondant au contenu du répertoire /etc (en récursif) à la commande cpio qui en effectue la sauvegarde.

Ne surtout pas oublier le signe > lors de la sauvegarde ou le F nom_sauvegarde_cpio.

Table 3. Options principales de la commande cpio
Options Description

-o

Crée une sauvegarde (output).

-v

Affiche le nom des fichiers traités.

-F

Désigne la sauvegarde à modifier (support).

Sauvegarde vers un support :

$ find /etc | cpio -ov > /dev/rmt0

Le support peut être de plusieurs types :

  • lecteur de bande : /dev/rmt0 ;

  • une partition : /dev/sda5, /dev/hda5, etc.

Type de sauvegarde

Sauvegarde avec chemin relatif

$ cd /
$ find etc | cpio -o > /sauvegardes/etc.cpio

Sauvegarde avec chemin absolu

$ find /etc | cpio -o > /sauvegardes/etc.A.cpio

Si le chemin indiqué au niveau de la commande find est en absolu alors la sauvegarde sera réalisée en absolu.

Si le chemin indiqué au niveau de la commande find est en relatif alors la sauvegarde sera réalisée en relatif.

Ajouter à une sauvegarde

Syntaxe de la commande cpio pour ajouter un contenu
[cde de fichiers |] cpio {-o| --create} -A [-options] [<fic-liste] {F|>support}

Exemple :

$ find /etc/shadow | cpio -o -AF FicSyst.A.cpio

L’ajout de fichiers n’est possible que sur un support à accès direct.

Option Description

-A

Ajoute un ou plusieurs fichiers à une sauvegarde sur disque.

-F

Désigne la sauvegarde à modifier.

Compresser une sauvegarde

  • Sauvegarder puis compresser

$ find /etc | cpio  –o > etc.A.cpio
$ gzip /sauvegardes/etc.A.cpio
$ ls /sauvegardes/etc.A.cpio*
/sauvegardes/etc.A.cpio.gz
  • Sauvegarder et compresser

$ find /etc | cpio –o | gzip > /sauvegardes/etc.A.cpio.gz

Il n’y a aucune option, à l’inverse de la commande tar, permettant de sauvegarder et de compresser en même temps. Cela s’effectue donc en deux temps : la sauvegarde puis la compression.

La syntaxe de la première méthode est plus facile à comprendre et à retenir, car elle s’effectue en deux temps.

Pour la première méthode, le fichier de sauvegarde est automatiquement renommé par l’utilitaire gzip qui rajoute .gz à la fin du nom de ce fichier. De même l’utilitaire bzip2 rajoute automatiquement .bz2.

Lire le contenu d’une sauvegarde

Syntaxe de la commande cpio pour lire le contenu d’une sauvegarde cpio
cpio -t [-options] [<fic-liste]

Exemple :

$ cpio -tv </sauvegardes/etc.152.cpio | less
Options Description

-t

Lit une sauvegarde.

-v

Affiche les attributs des fichiers.

Après avoir réalisé une sauvegarde, il faut lire son contenu pour être certain qu’il n’y a pas eu d’erreur.

De la même façon, avant d’effectuer une restauration, il faut lire le contenu de la sauvegarde qui va être utilisée.

Restaurer une sauvegarde

Syntaxe de la commande cpio pour restaurer une sauvegarde
cpio {-i| --extract} [-E fichier] [-options] [<support]

Exemple :

$ cpio -iv </sauvegardes/etc.152.cpio | less
Options Description

-i

Restauration complète d’une sauvegarde .

-E fichier

Restaure uniquement les fichiers dont le nom est contenu dans fichier.

--make-directories ou -d

Reconstruit l’arborescence manquante.

-u

Remplace tous les fichiers même s’ils existent.

--no-absolute-filenames

Permet de restaurer une sauvegarde effectuée en mode absolu de manière relative.

Par défaut, au moment de la restauration, les fichiers sur le disque dont la date de dernière modification est plus récente ou égale à la date de la sauvegarde ne sont pas restaurés (afin d’éviter d’écraser des informations récentes par des informations plus anciennes).

L’option u permet au contraire de restaurer d’anciennes versions des fichiers.

Exemples :

Restauration en absolu d’une sauvegarde absolue

$ cpio –ivF home.A.cpio

Restauration en absolu sur une arborescence existante

L’option u permet d’écraser des fichiers existants à l’endroit où s’effectue la restauration.

$ cpio –iuvF home.A.cpio

Restauration en relatif d’une sauvegarde absolue

L’option longue no-absolute-filenames permet une restauration en mode relatif. En effet le / en début de chemin sera enlevé.

$ cpio --no-absolute-filenames -divuF home.A.cpio

La création des répertoires est peut-être nécessaire d’où l’utilisation de l’option d

Restauration en relatif d’une sauvegarde relative

$ cpio –iv <etc.cpio

Restauration en absolu d’un fichier ou d’un répertoire

La restauration d’un fichier ou d’un répertoire particulier passe par la création d’un fichier liste qu’il faudra ensuite supprimer.

echo "/etc/passwd" > tmp
cpio –iuE tmp -F etc.A.cpio
rm -f tmp

Utilitaires de compression - décompression

Le fait d’utiliser la compression au moment d’une sauvegarde peut présenter un certain nombre d’inconvénients :

  • Allonge le temps de la sauvegarde ainsi que celui de la restauration.

  • Rend impossible l’ajout de fichiers à cette sauvegarde.

Il vaut donc mieux effectuer une sauvegarde et la compresser qu’effectuer la compression lors de la sauvegarde.

Compresser avec gzip

La commande gzip compresse les données.

Syntaxe de la commande gzip
gzip [options] [fichier ...]

Exemple :

$ gzip usr.tar
$ ls
usr.tar.gz

Le fichier reçoit l’extension .gz.

Il conserve les mêmes droits et les mêmes dates de dernier accès et de modification.

Compresser avec bunzip2

La commande bunzip2 compresse également les données.

Syntaxe de la commande bzip2
bzip2 [options] [fichier ...]

Exemple :

$ bzip2 usr.cpio
$ ls
usr.cpio.bz2

Le nom du fichier reçoit l’extension .bz2.

La compression par bzip2 est meilleure que celle par gzip mais son exécution est plus longue.

Décompresser avec gunzip

La commande gunzip décompresse les données compressées.

Syntaxe de la commande gunzip
gunzip [options] [fichier ...]

Exemple :

$ gunzip usr.tar.gz
$ ls
usr.tar

Le nom du fichier est tronqué par gunzip et se voit enlever l’extension .gz .

gunzip décompresse également les fichiers portant les extensions suivantes :

  • .z ;

  • -z ;

  • _z .

Décompresser avec bunzip2

La commande bunzip2 décompresse les données compressées.

Syntaxe de la commande bzip2
bzip2 [options] [fichier ...]

Exemple :

$ bunzip2 usr.cpio.bz2
$ ls
usr.cpio

Le nom du fichier est tronqué par bunzip2 et se voit enlever l’extension .bz2 .

bunzip2 décompresse également le fichier portant les extensions suivantes :

  • -bz ;

  • .tbz2 ;

  • tbz .