Sauvegarde incrémentielle
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:
- rsnapshot
- rsync-incr
- présentation sur les sauvegarde: cf. le script sur la fin
Liens
- Easy Automated Snapshot-Style Backups with Linux and Rsync: une description en détail de la méthode
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 rsync --server --sender ${SSH_ORIGINAL_COMMAND#*rsync }
- Permissions:
chmod 755 ~/remote_backup.sh
Variante avec sudo:
/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/hôte/config.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';
Liens:
- BackupPC: How to backup your stuff without really crying: une bonne introduction
- FAQ officielle: accès via utilisateur dédié+ssh+sudo.
Bacula
"Backup Dracula"
À creuser...