Eléments de sauvegarde réseau sous GNU/Linux

Yann Le Thieis - yann.le-thieis@tuxcoffee.net

Dans la mise en place de la sauvegarde des serveurs d'un site de production, il vaut mieux souvent avoir un serveur à part dédié à la sauvegarde des serveurs plutôt que chaque machine gère ses propres sauvegardes. Il est même préférable d'envisager au moins deux serveurs de sauvegarde centralisés, un des deux étant un serveur de sauvegarde redondant pour des questions de sécurité des données. Cette solution étant envisagée, elle implique par conséquent une sauvegarde en réseau.

Table des matières

Introduction
Utilitaires Dump/restore
   Prise en compte de dump
   Cas d'utilisations d'une sauvegarde de dump en réseau
L'utilitaire rsync
   SYNOPSIS de la commande rsync
   Cas rsync (client) et rsyncd (serveur)
   Cas rsync coté client et rsync+sshd coté serveur
La commande d'archivage tar
   Synopsis de la commande tar
   Utilisation de la commande tar via NFS
   Utilisation de la commande tar associée aux commandes ssh et dd
   Utilisation de la commande tar seule

Introduction

Dans la mise en place de la sauvegarde des serveurs d'un site de production, il vaut mieux souvent avoir un serveur à part dédié à la sauvegarde des serveurs plutôt que chaque machine gère ses propres sauvegardes. Il est même préférable d'envisager au moins deux serveurs de sauvegarde centralisés, un des deux étant un serveur de sauvegarde redondant pour des questions de sécurité des données. Cette solution étant envisagée, elle implique par conséquent une sauvegarde en réseau.

Des outils commerciaux ou libres qui sont complets existent pour la sauvegarde en réseau. Arkeia ou Amanda, pour l'équivalent libre, sont plutôt performants. Arkeia est simple d'emploi et est configurable facilement via des interfaces graphiques. Amanda est plus difficile d'accès et se configure principalement via des fichiers de configuration, que ce soit pour la partie serveur (le serveur de sauvegarde) ou la partie cliente (sur chacun des serveurs à sauvegarder). Cependant la configuration du logiciel Amanda peut être rendue plus aisée via le logiciel web, webmin et l'installation du module adéquat.

Cependant les outils systèmes sous Linux permettent de réaliser des sauvegardes en réseau. C'est ce que nous allons voir dans cette partie.

Nous ne traitons pas ici des différents types de sauvegarde que sont la sauvegarde complète, la sauvegarde incrémentale et la sauvegarde différentielle.

Utilitaires Dump/restore

La commande dump examine les fichiers sur un système de fichiers, elle détermine lesquels peuvent être sauvegardés et les copie sur un disque spécifique une bande ou tout autre medium de sauvegarde. Elle peut faire suivre à une sauvegarde complète des sauvegardes incrémentales.

La commande restore permet de réaliser la fonction inverse de la fonction dump; elle permet de restaurer une sauvegarde d'un système de fichiers. Des fichiers uniques ou des sous répertoires peuvent aussi être récupérés d'une sauvegarde complète ou partielle.

Il est à noter que l'utilisation de dump/restore sous GNU/Linux est spécifique aux systèmes de fichiers ext2 et ext3.

Prise en compte de dump

Dans le fichier de configuration des points de montage /etc/fstab, sur une ligne de paramétrage du montage d'une partition en ext2/ext3, le cinquième champ indique à l'utilitaire dump qu'il peut sauvegarder la partition.

Exemple: Extrait de la table de montage avec l'indicateur pour dump positionné à 1 sur l'hôte berder.

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/hda6  /home           ext3    defaults        1       2

S'il y a un besoin de sauvegarde d'une partition ext2/ext3 par dump, il faut positionner ce champ à 1, pour les autres types de systèmes de fichiers il faut le positionner obligatoirement à 0 (dump ne convient plus).

Cas d'utilisations d'une sauvegarde de dump en réseau

Nous voulons sauvegarder la partition associée au point de montage /home sur un fichier de sauvegarde home_berder.dump sur le serveur gavrinis.

Sauvegarde complète de /home:

gavrinis:/data# touch home_berder.dump
berder:~# dump -O -f gavrinis:/data/home_berder.dump /dev/hda6

Restauration de la partition à partir de la sauvegarde:

berder:~# mkfs.ext3 /dev/hda6
berder:~# mount /home
berder:~# cd /home
berder:~# restore -r -f gavrinis:/data/home_berder.dump

L'utilitaire rsync

La commande rsync permet de maintenir à jour la copie d'une arborescence de fichiers. L'atout majeur de rsync c'est que lorsque le besoin de réaliser à nouveau cette copie se fait sentir, seuls les fichiers modifiés seront remplacés sur la copie. Ceci est particulièrement avantageux lors d'une sauvegarde à distance afin d'optimiser la bande passante sur le réseau.

Après le synopsis de la commande nous allons voir deux cas de sauvegarde/restauration.

  • Cas avec rsync sur le client (à sauvegarder) et rsyncd sur le serveur de sauvegarde.
  • Cas avec rsync sur le client et sshd sur le serveur de sauvegarde.

SYNOPSIS de la commande rsync

Remarque: voir page de man pour les compléments...

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST

Cas rsync (client) et rsyncd (serveur)

Sur l'hôte berder nous avons l'utilitaire rsync et sur le serveur de sauvegarde gavrinis nous avons le démon (service) rsyncd qui est en activité.

Remarque: l'utilisation simple de rsync en réseau implique que la machine distante indiquée en paramètre ait un démon rsyncd en activité!

Sauvegarde du contenu de /home/user1 de berder sur gavrinis:

berder:/home# rsync -avz user1 gavrinis:/data/

Description de quelques options :

  • -a : mode archive, sauvegarde des attributs, droits, liens,...
  • -v : mode verbeux, vous voyez toutes les actions réalisées.
  • -l : copie les liens symboliques comme des liens symboliques.
  • -H : préserve les liens durs.
  • -z : compresse les données.
  • -c : vérifie les sommes de contrôle.

Cas rsync coté client et rsync+sshd coté serveur

Il n'est pas obligatoire d'avoir le démon rsyncd en activité du coté serveur. Il suffit de pouvoir utiliser un shell distant et qu'il y ait la présence de la commande rsync sur la machine distante.

Pour le shell distant nous considérons sshd qui non seulement compense l'absence du démon rsyncd, mais permet aussi d'avoir un port ouvert en moins sur la machine distante ainsi qu'un transfert de données sécurisé entre les machines puisque crypté par ssh. Ce n'est plus une compensation, mais une plu-value.

Sauvegarde du contenu de /home/user1 de berder sur gavrinis via la commande ssh:

berder:/home# rsync -avz -e ssh user1 gavrinis:/data/

La commande d'archivage tar

La commande d'archivage tar, seule ou combinée à d'autres commandes du système Linux, permet de faire de la sauvegarde à distance.

Nous allons voir trois cas distinct d'utilisation de la commande tar pour faire des sauvegardes via le réseau.

Les trois cas d'utilisation sont:

  • utilisation de tar via NFS
  • utilisation de la commande tar associée aux commandes ssh et dd.
  • utilisation de la commande tar seule.

Synopsis de la commande tar

Remarque: voir la page de man pour plus de détails.

 tar  [  -  ]  A  --catenate  --concatenate | c --create | d --diff
    --compare | r --append | t --list | u --update | x -extract  --get
    [  --atime-preserve  ]  [  -b, --block-size N ] [ -B, --read-full-
    blocks ] [ -C, --directory RÉP ] [ --checkpoint    ] [ -f,  --file
    [NOM_HÔTE:]F  ]  [  --force-local   ] [ -F, --info-script F --new-
    volume-script F ] [ -G, --incremental ] [ -g, --listed-incremental
    F  ] [ -h, --dereference ] [ -i, --ignore-zeros ] [ -j, -I, --bzip
    ] [ --ignore-failed-read ] [ -k, --keep-old-files ] [ -K, --start-
    ing-file  F  ] [ -l, --one-file-system ] [ -L, --tape-length N ] [
    -m, --modification-time ] [ -M, --multi-volume ]  [  -N,  --after-
    date  DATE,  --newer DATE ] [ -o, --old-archive, --portability ] [
    -O, --to-stdout ] [ -p, --same-permissions, --preserve-permissions
    ] [ -P, --absolute-paths ] [ --preserve      ] [ -R, --record-num-
    ber ] [ --remove-files ] [ -s, --same-order, --preserve-order ]  [
    --same-owner  ]  [  -S,  --sparse  ]  [  -T,  --files-from  F  ] [
    --null     ] [ --totals   ] [ -v, --verbose ] [ -V, --label NOM  ]
    [  --version  ] [ -w, --interactive, --confirmation ] [ -W, --ver-
    ify    ] [ --exclude FICHIER ] [ -X, --exclude-from  FICHIER  ]  [
    -Z,  --compress,  --uncompress  ]  [ -z, --gzip, --ungzip      ] [
    --use-compress-program   PROG   ]   [   --block-compress    ]    [
    -[0-7][lmh]     ]
    
    nomfichier1 [ nomfichier2, ... nomfichierN ]
    
    répertoire1 [ répertoire2, ... répertoireN ]

Utilisation de la commande tar via NFS

Ici la plu-value est apporté par le montage de système de fichiers en réseau via le protocole NFS. Le système de fichiers distant est monté sur un point de montage en local. L'utilisation de la commande tar se fait ensuite comme si nous étions en local.

Utilisation de la commande tar associée aux commandes ssh et dd

Exemple: Nous voulons sauvegarder tous les fichiers de user1 (répertoire /home/user1/) de la machine berder vers une archive home_user1_berder.tgz dans le répertoire /data de gavrinis.

berder:/home# tar zcvf - user1 | ssh gavrinis dd of=/data/home_user1_berder.tgz

La première partie de la commande tar zcvf - user1 permet d'archiver en mode compressé (gzip) le répertoire user1 vers la sortie standard "-". Le tout est envoyé via un pipe "|" à la commande ssh qui se connecte au serveur gavrinis (avec le même identifiant d'utilisateur que sous berder dans le cas présent!) pour exécuter la commande dd of=/data/home_user1_berder.tgz (qui prend la sortie de la commande tar comme fichier d'entrée).

Utilisation de la commande tar seule

La commande tar permet directement de sauvegarder à distance. Il suffit de l'indiquer dans l'argument associé à l'option -f utilisateur@machine:chemin.

Remarque: "utilisateur" n'est pas obligatoire s'il est le même que celui qui exécute la commande.

Exemple: Nous voulons sauvegarder tous les fichiers de user1 (répertoire /home/user1/) de la machine berder vers une archive home_user1_berder.tgz dans le répertoire /data de gavrinis.

berder:/home# tar zcvf gavrinis:/data/home_user1_berder.tgz user1

Les options de tar utilisées ici (pour rappel):

  • -z : compression au format gzip.
  • -c : exécution de l'archivage.
  • -v : mode verbeux, visualisation des actions effectuées par tar.
  • -f : la cible est un fichier (au sens unix du terme, tout est fichier ;) )

La vérification du contenu de l'archive se fait de cette façon:

berder:/home# tar ztvf gavrinis:/data/home_user1_berder.tgz

Option:

  • -t : pour vérifier le contenu uniquement.

Enfin, pour restaurer le contenu de l'archive stockée sur gavrinis dans le répertoire courant de berder:

berder:/home# tar zxvf gavrinis:/data/home_user1_berder.tgz

Option:

  • -x : extraction.

Dernière mise à jour :  2005-12-08 - Copyright (c) 2005 - 2006 Yann Le Thieis.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".