« Les sauvegardes » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
m (doc modifiée pour la version GNU de tar)
m (mise en page)
Ligne 34 : Ligne 34 :


La commande tar permet de sauvegarder un ensemble de fichiers dans une archive qui peut être compressée. Les fichiers ne seront donc pas directement lisibles.
La commande tar permet de sauvegarder un ensemble de fichiers dans une archive qui peut être compressée. Les fichiers ne seront donc pas directement lisibles.
==== Sauvegarde avec tar ====
===== Présentation des options =====
Pour créer une archive, il suffit d'utiliser la commande:
Pour créer une archive, il suffit d'utiliser la commande:
<code>tar c nom_archive [fichier repertoire1] [fichier ou repertoire2]...</code>
<code>tar c nom_archive [fichier repertoire1] [fichier ou repertoire2]...</code>
Ligne 50 : Ligne 54 :
'''ATTENTION:''' Il faut '''toujours''' exclure les répertoires /dev et /proc! Sous linux, tout est fichier. Le matériel est identifié dans /dev par des fichiers spéciaux. Vouloir sauvegarder /dev via tar est vain. Dans /proc, il y a un fichier spécial, /proc/kcore, qui correspond à la RAM de l'ordinateur. Je n'ai pas fait le test, mais le "restaurer" est à vos risques et périls (kernel panic).
'''ATTENTION:''' Il faut '''toujours''' exclure les répertoires /dev et /proc! Sous linux, tout est fichier. Le matériel est identifié dans /dev par des fichiers spéciaux. Vouloir sauvegarder /dev via tar est vain. Dans /proc, il y a un fichier spécial, /proc/kcore, qui correspond à la RAM de l'ordinateur. Je n'ai pas fait le test, mais le "restaurer" est à vos risques et périls (kernel panic).


===== Exemple de sauvegarde de données =====
Voici un petit script permettant de mettre en place une sauvegarde totale et/ou différentielle de données :
Voici un petit script permettant de mettre en place une sauvegarde totale et/ou différentielle de données :
<code>#!/bin/bash
<code>#!/bin/bash
Ligne 84 : Ligne 89 :
</code>
</code>


===== Exemple de sauvegarde système =====
Le script suivant permet de faire une sauvegarde système, plus complet, a pour but de faire une sauvegarde système sur un serveur NFS. Il utilise un fichier de configuration. Le prérequis est de renseigner le fichier /etc/save.conf et d'utiliser udev.  
Le script suivant permet de faire une sauvegarde système, plus complet, a pour but de faire une sauvegarde système sur un serveur NFS. Il utilise un fichier de configuration. Le prérequis est de renseigner le fichier /etc/save.conf et d'utiliser udev.  


Ligne 297 : Ligne 303 :
</code>
</code>


==== Restauration avec tar ====
===== Présentation de la commande =====
Pour restaurer un tar, il suffit d'utiliser la commande:
Pour restaurer un tar, il suffit d'utiliser la commande:
<code>tar x nom_archive</code>
<code>tar x nom_archive</code>
Ligne 308 : Ligne 316 :
* --numeric-owner : utilise les numéros pour les appartenances group/utilisateur. Petit exemple vécu : restauration à partir d'un live-cd. Sur le live-cd, l'utilisateur gdm avait comme uid 32. Sur la distrib, gdm correspondait à 42, et 32 à rpc. Lors du reboot, gdm refusait de se lancer car le répertoire /var/gdm ne lui appartenait pas. Il est donc préférable de restaurer les uid/gid au lieu d'utiliser les noms.
* --numeric-owner : utilise les numéros pour les appartenances group/utilisateur. Petit exemple vécu : restauration à partir d'un live-cd. Sur le live-cd, l'utilisateur gdm avait comme uid 32. Sur la distrib, gdm correspondait à 42, et 32 à rpc. Lors du reboot, gdm refusait de se lancer car le répertoire /var/gdm ne lui appartenait pas. Il est donc préférable de restaurer les uid/gid au lieu d'utiliser les noms.
* -g fichier:  
* -g fichier:  


Voici un exemple de commande pour restaurer une archive :
Voici un exemple de commande pour restaurer une archive :
<code>tar zxvf --atime-preserve --preserve --same-owner --numeric /backup/archive.tgz</code>
<code>tar zxvf --atime-preserve --preserve --same-owner --numeric-owner /backup/archive.tgz</code>


=== la commande rsync ===
=== la commande rsync ===

Version du 19 septembre 2006 à 19:37

Les sauvegardes

Sauvegarder son système, ses données

Sauvegarder

Sauvegarder son système ou ses données : que garder ? Quels logiciels utiliser ? Sur quel support ?

Que sauvegarder

Avant d'entamer les différentes manières et d'apprendre les divers outils permettant d'effectuer une sauvegarde, il est tout d'abord nécessaire de définir ce que l'on souhaite sauver. On peut soit choisir de sauvegarder uniquement ses données importantes (plus simple à mettre en place), soit son système entier.

Les types de sauvegardes

Il existe deux types de sauvegardes :

  • Totales : avec une sauvegarde totale, on sauve l'intégralité des données que l'on souhaite garder
  • Partielles : Une sauvegarde partielle suit une sauvegarde totale ou une sauvegarde partielle. Ici, nous allons seulement sauver les nouveaux fichiers ou ceux qui ont été modifiés depuis la dernière sauvegarde. Cette sauvegarde est beaucoup plus rapide, mais peut demander beaucoup de manipulations en cas de restauration. Pour restaurer, il faudra partir de la dernière sauvegarde totale, puis passer dans l'ordre chronologique les sauvegardes partielles.

Les médias

Les médias possibles sont :

  • CD/DVD : ils permettent de stocker les données par tranches de 650 Mo, 700 Mo, 4.7 Go ou 8 Go. Ces médias optiques ont un support chimique, ce qui implique une déterioration avec le temps. Un CD gravé aujourd'hui et stocké dans son boîtier ne sera peut être pas lisible dans 10 ans!
  • disque dur : ce disque peut être interne, usb, un disque réseau (NAS), ou un partage réseau (lufs/nfs/samba/ftp). Il présente d'avoir l'avantage d'une capacité plus importante, voire la possibilité d'externaliser ses sauvegardes (utile si la maison brûle).
  • Clé usb : leurs capacités augmentent et peuvent être supérieures à celle d'un CD. Un de ses avantages est que c'est un média de stockage peu cher qui peut fonctionner sur d'anciens ordinateurs (pas besoin de graveur). C'est un des médias les plus pratiques : rapidité d'écriture par rapport à un CD (pas d'image à faire), peu encombrant, mais il est limité en cycles de lecture/écriture.

Le choix du média sera dicté en partie selon la quantité de données à sauvegarder.

Les outils de sauvegarde

Avant de sauvegarder, il faut commencer par recenser ce que l'on souhaite garder. De plus, l'idée serait que les utilisateurs n'aient aucun fichier en cours de modification au moment de la sauvegarde. On ne pourra pas garantir, le cas contraire, que son fichier sera bien sauvegardé.

la commande tar

La commande tar permet de sauvegarder un ensemble de fichiers dans une archive qui peut être compressée. Les fichiers ne seront donc pas directement lisibles.

Sauvegarde avec tar

Présentation des options

Pour créer une archive, il suffit d'utiliser la commande: tar c nom_archive [fichier repertoire1] [fichier ou repertoire2]... Différentes options peuvent s'avérer utiles :

  • -v : mode verbeux, liste les fichiers qui sont en cours d'archivage
  • -z (resp. j) : permet de compresser l'archive avec le format gzip (resp. bzip2). Le format bzip2 permet d'avoir des fichiers plus petits au coût d'un traitement plus long
  • --preserve : permet de sauvegarder les permissions. De plus, lors de la restauration, les fichiers seront "détarrés" dans le même ordre
  • --same-owner : permet de sauvegarder l'appartenance du fichier
  • -T fichier : fichier est un fichier où chaque ligne correspond à un fichier ou répertoire à sauvegarder
  • -X fichier : fichier est un fichier où chaque ligne correspond à un fichier ou répertoire à exclure parmis les répertoires à sauvegarder
  • --exclude=fichier : fichier sera exclu de la sauvegarde
  • -N date : permet de ne sauvegarder que les fichiers postérieurs à la date définie. La date doit être fournie sous la forme AAAA-MM-JJ HH:MM:SS". On obtient se format grâce à la commande date "+%Y:%m:%d %H:%M:%S"
  • --totals : affiche le nombre d'octets écrits lors de la sauvegarde
  • -g fichier : permet d'effectuer des sauvegardes incrémentales, en se basant sur un fichier de status. Ce fichier est soit utilisé (sauvegarde incrémentale), soit créé (sauvegarde full). Attention, cette option n'est valable que pour les versions GNU!

ATTENTION: Il faut toujours exclure les répertoires /dev et /proc! Sous linux, tout est fichier. Le matériel est identifié dans /dev par des fichiers spéciaux. Vouloir sauvegarder /dev via tar est vain. Dans /proc, il y a un fichier spécial, /proc/kcore, qui correspond à la RAM de l'ordinateur. Je n'ai pas fait le test, mais le "restaurer" est à vos risques et périls (kernel panic).

Exemple de sauvegarde de données

Voici un petit script permettant de mettre en place une sauvegarde totale et/ou différentielle de données : #!/bin/bash

  1. Options
  2. -d : sauvegarde differentielle
  3. -h : affiche les options possibles
  1. Si on demande l'aide, on l'affiche, et on sort

if [ $1 = "-h" ] ; then

 echo "Usage : $0 : sauvegarde totale"
 echo "Usage : $0 -d : sauvegarde différentielle"
 echo "Usage : $0 -h : cette aide"

fi

  1. Initialisation des variables

DATE=$(date "+%Y-%m-%d %H:%M:%S") TYPE="FULL" REP=/backup FICHIER_EXCLUDE=/etc/save.exclude FICHIER_INCLUDE=/etc/save.include FICHIER_STATUS=/etc/save.state COMPRESSION=9

  1. Si le script est appelé avec l'option "-d", alors on fait une sauvegarde différentielle

if [ $1 = "-d" ] ; then

    TYPE="INCR"
    tar cP --atime-preserve -g $FICHIER_STATUS --preserve --same-owner --totals -T $FICHIER_INCLUDE -X $FICHIER_EXCLUDE | gzip -$COMPRESSION > ${REP}/save-INCR-${date}.tgz
  1. Sinon, on fait une sauvegarde totale

else

    rm -f $FICHIER_STATUS
    tar cP -g $FICHIER_STATUS --atime-preserve --preserve --same-owner --totals -T $FICHIER_INCLUDE -X $FICHIER_EXCLUDE | gzip -$COMPRESSION > ${REP}/save-FULL-${date}.tgz

fi

Exemple de sauvegarde système

Le script suivant permet de faire une sauvegarde système, plus complet, a pour but de faire une sauvegarde système sur un serveur NFS. Il utilise un fichier de configuration. Le prérequis est de renseigner le fichier /etc/save.conf et d'utiliser udev.

Le fichier save.conf doit être de la forme : EXCLUDE="/repertoire1 /repertoire2"

  1. Le reste est optionnel
  1. COMPRESSION=1
  2. SERVEUR="10.0.0.2:/path
  3. MONTAGE="/mnt/nfs"
  4. INCLUDE="/toto"

Et le script :

#!/bin/sh

  1. Options
  2. -d : sauvegarde differentielle
  3. -h : affiche les options possibles
  1. Si on demande l'aide, on l'affiche, et on sort

if [ $1 = "-h" ] ; then

 echo "Usage : $0 : sauvegarde totale"
 echo "Usage : $0 -d : sauvegarde différentielle"
 echo "Usage : $0 -h : cette aide"

fi

PID=$$

  1. On donne une priorité faible au processus pour ne pas dégrader les performances des autres applications

renice +19 $PID . /etc/save.conf

MONTAGE=${MONTAGE:="/tmp/save.$PID"} SERVEUR=${SERVEUR:="10.0.0.1:/backup"}

COMPRESSION=${COMPRESSION:=9} NOM=$(hostname) CONFIGURATION=${MONTAGE}/${NOM}.conf DATE="$(date "+%Y-%m-%d %H:%M:%S")" FICHIER_EXCLUDE=/tmp/save.$PID.exlude FICHIER_INCLUDE=/tmp/save.$PID.include FICHIER_STATUS=/etc/save.state LVMVERSION=1

affiche_action() { echo -e "$1 ........... \c" }

affiche_resultat() { if [ $1 = 0 ] ; then echo -e '[\c' tput setaf 2 echo -e "OK\c" tput setaf 7 echo -e ']' return 0 else echo -e '[\c' tput setaf 1 echo -e "KO\c" tput setaf 7 echo -e ']' return 1 fi }

quit() { affiche_action "Nettoyage en cours" rm -f $FICHIER_EXCLUDE rm -f $FICHIER_INCLUDE umount $MONTAGE rmdir $MONTAGE affiche_resultat $? exit $1 }

  1. Montage du partage nfs

affiche_action "Montage du partage NFS vers $SERVER" mkdir $MONTAGE mount -t nfs $SERVER $MONTAGE affiche_resultat $? || quit 1

  1. Sauvegarde des donnees de partitionnement

affiche_action "Sauvegarde du partitionnement" echo "[disks]" > $CONFIGURATION /sbin/fdisk -l | tr '*' ' ' | awk '/^\/dev/ {print $1,$2,$3,$5}' >> $CONFIGURATION affiche_resultat $? || quit 1

echo "[bootdisk]" >> $CONFIGURATION fdisk -l | awk '/^\/dev\/.*\*/ {print $1}' >> $CONFIGURATION

  1. Sauvegarde du lvm : PV, VG, LV et version du LVM

affiche_action "Sauvegarde des groupes de volumes du LVM"

echo "[LVM-VG]" >> $CONFIGURATION liste=$(pvscan | grep -o 'PV.*/dev/.*VG.*' | tr -d '"' | sed 's,^.*PV \(/dev/[^ ]*\).* VG \([^ ]*\).*,\1 \2,') liste2=$(echo $liste | grep -o '/dev/[^ ]*') for element in $liste2 ; do

       LVM=1
       $REP/bin/lvm.static pvscan 2>/dev/null | grep $element 2>/dev/null | grep -q lvm2
       [ $? = 0 ] && LVM=2
       echo $(echo $liste | grep -o "$element [^ ]*") $LVM >> $CONFIGURATION

done affiche_resultat $? || quit 1

affiche_action "Sauvegarde des volumes logiques du LVM" echo "[LVM-LV]" >> $CONFIGURATION for volume in $(lvscan | grep -o '"/dev[^"]*"' | tr -d '"') ; do extend=$(lvdisplay $volume | awk '/Allocated LE/ {print $3}') echo "$volume $extend" >> $CONFIGURATION done affiche_resultat $? || quit 1

  1. Sauvegarde des labels

affiche_action "Sauvegarde des labels des partitions" echo "[labels]" >> $CONFIGURATION for partition in $(/sbin/fdisk -l | grep -o '^/dev/[^ ]*') ; do label=$(/sbin/e2label $partition 2>/dev/null) echo "$partition=$label" >> $CONFIGURATION done affiche_resultat $? || quit 1

  1. Sauvegarde des points de montage

affiche_action "Sauvegarde des points de montage" echo "[montage]" >> $CONFIGURATION mount | awk '/ext[23]/ {print $1,$3}' >> $CONFIGURATION affiche_resultat $? || quit 1

  1. Sauvegarde de la hierarchie exclue

affiche_action "Creation de la liste des repertoires exclus a recontruire" echo "[hierarchie]" >> $CONFIGURATION rm -f $FICHIER_EXCLUDE

  1. On exclu les partages NFS et les montages loop

mount | awk '/type nfs/ { print $3}' >> $FICHIER_EXCLUDE mount | awk '/loop=/ { print $3}' >> $FICHIER_EXCLUDE

  1. Rajout des répertoires à exclure par défaut

[ -d /media ] && EXCLUDE="/media $EXCLUDE" EXCLUDE="/mnt /sys /dev /tmp /proc /var/run /var/log /var/lock /var/spool /var/tmp /var/cache $EXCLUDE" for rep in $EXCLUDE ; do case $rep in /mnt) echo "/mnt" >> $CONFIGURATION for rep in $(ls -F /mnt | tr -d '/') ; do [ -d /mnt/$rep ] && echo "/mnt/$rep" >> $CONFIGURATION done ;; /media) echo "/media" >> $CONFIGURATION [ -d /media ] && for rep in $(ls -F /media | tr -d '/') ; do [ -d /media/$rep ] && echo "/media/$rep" >> $CONFIGURATION done ;; /dev) echo "/dev" >> $CONFIGURATION ;; /tmp) echo "/tmp" >> $CONFIGURATION ;; /proc) echo "/proc" >> $CONFIGURATION ;; /sys) echo "/sys" >> $CONFIGURATION ;; /var*) echo "/var" >> $CONFIGURATION ls -R $rep | grep ':$' | tr -d ':' >> $CONFIGURATION ;; /usr/src) echo $rep >> $CONFIGURATION ;; /home) echo "/home" >> $CONFIGURATION for rep in $(ls -F /home | tr -d '/') ; do [ -d /home/$rep ] && echo "/home/$rep" >> $CONFIGURATION done ;; /usr*) ls -R $rep | grep ':$' | tr -d ':' >> $CONFIGURATION ;; /bin*) ls -R $rep | grep ':$' | tr -d ':' >> $CONFIGURATION ;; /sbin*) ls -R $rep | grep ':$' | tr -d ':' >> $CONFIGURATION ;; /lib*) ls -R $rep | grep ':$' | tr -d ':' >> $CONFIGURATION ;; /boot*) ls -R $rep | grep ':$' | tr -d ':' >> $CONFIGURATION ;; *) [ -d $rep ] && echo $rep >> $CONFIGURATION ;; esac echo $rep >> $FICHIER_EXCLUDE done affiche_resultat $? || quit 1 echo '*/lost+found' >> $FICHIER_EXCLUDE

  1. Sauvegarde de grub

affiche_action "Sauvegarde de grub" echo "[GRUB]" >> $CONFIGURATION cat /boot/grub/menu.lst | grep '^[^#].*root (hd' | head -n 1 | grep -o 'root.*' >> $CONFIGURATION affiche_resultat $? || quit 1

  1. Si l'option -d est passee en parametre, on fait une sauvegarde differentielle

INCLUDE=${INCLUDE:=/} rm -f $FICHIER_INCLUDE for rep in $INCLUDE ; do echo $rep >> $FICHIER_INCLUDE done

if [ $# -ge 1 ] && [ $1 = "-d" ] ; then affiche_action "Sauvegarde du systeme sur $SERVEUR/${NOM}-INCR-${DATE}" tar cP -g $FICHIER_STATUS --atime-preserve --preserve --same-owner --totals -T $FICHIER_INCLUDE -X $FICHIER_EXCLUDE | gzip -$COMPRESSION > $MONTAGE/${NOM}-INCR-${DATE}.tar.gz affiche_resultat $? || quit 1 else affiche_action "Sauvegarde du systeme sur $SERVEUR/${NOM}-FULL-${DATE}"

       rm -f $FICHIER_STATUS

tar cP -g $FICHIER_STATUS --atime-preserve --preserve --same-owner --totals -T $FIC_INCLUDE -X $FIC_EXCLUDE | gzip -$COMPRESSION > $MONTAGE/${NOM}-FULL-${DATE}.tar.gz affiche_resultat $? || quit 1 fi

  1. Sauvegarde de MAKEDEV qui se trouve dans /dev

affiche_action "Sauvegarde de MAKEDEV" [ -f /dev/MAKEDEV ] && cp /dev/MAKEDEV $MONTAGE/ affiche_resultat 0

quit 0

Restauration avec tar

Présentation de la commande

Pour restaurer un tar, il suffit d'utiliser la commande: tar x nom_archive Là encore, il existe diverses options:

  • -v : mode verbeux : afficher les fichiers en cours d'extraction
  • -z (resp. j) : permet de décompresser l'archive compressée avec le format gzip (resp. bzip2)
  • --atime-preserve : permet de ne pas modifier la date d'accès du fichier restauré
  • -C repertoire : permet de désarchiver dans le répertoire mentionné
  • --preserve : permet de restaurer les permissions. De plus, lors de la restauration, les fichiers seront "détarrés" dans le même ordre
  • --same-owner : permet de restaurer l'appartenance du fichier
  • --numeric-owner : utilise les numéros pour les appartenances group/utilisateur. Petit exemple vécu : restauration à partir d'un live-cd. Sur le live-cd, l'utilisateur gdm avait comme uid 32. Sur la distrib, gdm correspondait à 42, et 32 à rpc. Lors du reboot, gdm refusait de se lancer car le répertoire /var/gdm ne lui appartenait pas. Il est donc préférable de restaurer les uid/gid au lieu d'utiliser les noms.
  • -g fichier:


Voici un exemple de commande pour restaurer une archive : tar zxvf --atime-preserve --preserve --same-owner --numeric-owner /backup/archive.tgz

la commande rsync

Spécificités de la sauvegarde système

Les conseils

  • Vérifier la sauvegarde après l'avoir faite : test md5 par exemple. Ce n'est pas lorsqu'on en aura besoin qu'il faut se rendre compte que le graveur ne gravait plus!
  • Tester la restauration
  • Vérifier régulièrement (tous les ans) que l'on arrive bien à relire sa sauvegarde (voire refaire une sauvegarde sur un média neuf tous les 2 ans par exemple)