Sauvegarde incrémentielle

De Cliss XXI
Révision datée du 29 août 2009 à 18:23 par imported>SylvainBeucler (→‎BackupPC)
Sauter à la navigation Sauter à la recherche

Méthode 1 - Archives

Nous utilisons rsync pour faire une copie directe, puis dar pour réaliser des sauvegardes incrémentielles, pilotées par SaraB, avec des checksums par2.

L'inconvénient de la méthode 'dar' est qu'il est fastidieux de récupérer des fichiers dans de grosses archives, et plus encore s'il y a un grand nombre de sauvegardes incrémentielles entre chaque sauvegardes complètes. Du coup il est tentant de faire plus souvent de sauvegardes complètes, et qui impacte l'espace disque.

Méthode 2 - Copies en liens durs

Utiliser cp -al pour faire une sauvegarde complète à base de liens durs. La solution combine les avantages d'une sauvegarde incrémentielle (espace disque réduit) et d'une sauvegarde complète (accès à tous les fichiers sans devoir fusionner les sauvegardes incrémentielles intermédiaires). On ne fait que des sauvegardes "incrémentielles", ce qui est très appréciable du point de vue de la simplicité et de l'espace disque occupé.

Variante: l'option --link-dest=DIR de rsync (avec cp -al les changements de permissions ou de propriétaire d'un fichier s'appliquent sur toutes les sauvegardes, et non sur _la_ sauvegarde impactée).

Les inconvénients sont:

  • Beaucoup plus d'espace utilisé en inodes (prévoir mkfs.ext3 -T news si possible).
  • De nombreux fichiers à la place d'une seule archive.
  • Pas de combinaison avec parchive, par2 ou autre outil de parité; et ce, couplé avec une réutilisation des fichiers: si un fichier est stocké sur un secteur défectueux, et qu'il n'a pas changé au cours du temps, ce fichier est donc définitivement perdu. Combiner peut-être avec l'option --checksum de rsync afin d'avoir des vérifications régulières?
  • Un espace incompressible utilisé à chaque sauvegarde, mais relativement léger (compter 50M pour 60Go, d'après cp -al backup/ backup.copy/ && du -sch backup/ backup.copy/).
  • Occupation de l'espace disque moins intuitif, car partagé entre les sauvegardes.

Il existe plusieurs outils qui utilisent ce principe:

Liens

rdiff-backup

Copie miroir + copies incrémentielles via un format spécifique (dossier spécial rdiff-backup-data/). Suppression des anciennes sauvegarde uniquement par date (--remove-older-than). L'avantage par rapport à rsync est qu'il s'agit d'une solution tout-en-1, une seule commande suffit pour la sauvegarde et les incréments. Il peut aussi stocker un système complet sans avoir besoin d'être root, les méta-données étant alors utilisées pour la restoration.

BackupPC

Copies par liens en dur sur l'ensemble des sauvegardes, même provenant de systèmes différents (indexation par checksum, à la git). Stockage à part des meta-données, telles que les permissions (le serveur ne tourne pas sous root). Par conséquent, le format des sauvegardes est spécifique à backuppc, pas utilisable directement. Il y a également un panneau de contrôle web.

BackupPC ping les machines à sauvegarder une fois à chaque réveil du démon (1/heure) (jusqu'au premier contact), et à chaque sauvegarde incrémentielle (jusqu'à défaut de ping). Les machines ping-ées plusieurs fois consécutivement sont considérées comme permanentes et ne sont pas sauvegardées pendant les heures d'affluence (blackout).

La sauvegarde peut se faire via smb, rsyncd, ssh+rsync ou ssh+tar.

Pour ssh+rsync, je recommande la restriction d'accès simple suivante (lecture seule):

  • Méthode rsync
$Conf{XferMethod} = 'rsync';
aptitude install libfile-rsyncp-perl
  • ~/.ssh/authorized_keys
# BackupPC
no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty,command="/root/remote_backup.sh" ssh-dss AAAAB...== root@backupmaster
  • ~/remote_backup.sh
#!/bin/bash
exec nice -n 19 ionice -n 7 rsync --server --sender ${SSH_ORIGINAL_COMMAND#*rsync }
  • Permissions:
chmod 755 ~/remote_backup.sh

Variante avec sudo:

  • /etc/backuppc/myhostname.pl ou /var/lib/backuppc/pc/myhostname/config.pl:
$Conf{RsyncClientCmd} = '$sshPath -q -x -l myuser $host $rsyncPath $argList+';
  • /etc/sudoers:
Defaults env_keep=SSH_ORIGINAL_COMMAND
myuser  ALL=NOPASSWD: /root/remote_backup.sh
  • ~/.ssh/authorized_keys:
...,command="sudo /root/remote_backup.sh" ssh-dsh ...

Note: cela désactive évidemment les possibilités de restauration directe (nécessite des droits en écriture).

Quelques trucs divers:

  • Configuration spécifique à un ordinateur:
    • /var/lib/backuppc/pc/hôte/config.pl
    • /etc/backuppc/hôte.pl
  • Exclusions pour un système GNU/Linux:
$Conf{BackupFilesExclude} = ['/dev/pts/*', '/dev/shm/*', '/proc/*', '/sys/*', '/tmp/*', '/media/*/*', '/mnt/*/*'];
  • Cache des checksums rsync: décommenter la ligne '--checksum-seed=32761',.
  • Une seule sauvegarde à la fois:
$Conf{MaxBackups} = 1;
  • Interface web en français:
$Conf{Language} = 'fr';
  • Activer l'interface web (si pas déjà dans /etc/apache*/httpd.conf):
Include /etc/backuppc/apache.conf
  • Alias pour recevoir les mails d'alerte (dans /etc/aliases):
backuppc: root

Notes sur la restauration directe (via rsync):

  • Copie et écrase les fichiers - mais ne supprime pas les fichiers non-présents dans la sauvegarde. Autrement dit, pour restaurer un système abîmé, faites un nettoyage complet d'abord (mkfs).
  • Nécessite des droits en lecture sur l'hôte cible - c'est dommage, un transfert dans l'autre sens aurait été bien plus pratique et sécurisé
  • /dev est bien sauvegardé, mais fait planter la restauration. L'ajout de --specials dans $Conf{RsyncRestoreArgs} semble corriger le problème/

Liens:

Bacula

http://www.bacula.org/

"Backup Dracula"

Cf. Bacula