BackupPC : Un outil complet de backup
Contents
1 Introduction
Si vous cherchez un bel outil pour faire des sauvegardes et restaurations, ne cherchez plus, BackupPC est fait pour vous.
2 Configuration
2.1 Hote Windows via smb
Vous pouvez sauvegarder via des partages réseau. Pour celà sous windows, faites votre partage, et pour la machine voici un exemple :
#============================================================= -*-perl-*- # # Configuration file for Windows hosts. # Note the slashes instead of backslashes # ########################################################################### # What to backup and when to do it ########################################################################### #Tableau des répertoires à sauvegarder $Conf{BackupFilesOnly} = ['/Documents and Settings', 'Travail']; #Tableau des répertoires exclus de la sauvegarde $Conf{BackupFilesExclude} = '/Documents and Setings/user1/Local Settings/Temp'; ########################################################################### # General per-PC configuration settings ########################################################################### #Nom NetBios de la machine $Conf{ClientNameAlias} = 'netbiosname'; #Méthode de sauvegarde utilisée $Conf{XferMethod} = 'smb'; #Niveau de verbosité des fichiers de log $Conf{XferLogLevel} = 1; #Nom des partages à sauvegarder $Conf{SmbShareName} = ['C$']; #Nom de l'utilisateur réseau $Conf{SmbShareUserName} = 'Administrateur'; #Mot de passe de l'utilisateur réseau $Conf{SmbSharePasswd} = 'secret'; #Méthode de compression de la sauvegarde $Conf{ArchiveComp} = 'bzip2';
2.2 Hote Windows via rsync
Nous allons utiliser la méthode avec laquelle nous allons nous passer de Cygwin. Vous pouvez utiliser la méthode avec Cygwin, mais pas installer les 2 simultanément.
Pour commencer, téléchargez cwrsync et installez le sur la machine windows. Durant l'installation, il va créer un utilisateur avec un mot de passe généré aléatoirement, laissez comme c'est. Cet utilisateur est dédié au lancement du service rsyncd.
Ensuite, allez dans le dossier "C:\Program Files (x86)\ICW", puis editez le fichier de configuration :
Adaptez les lignes suivantes :
- path : /cygdrive/ est obligatoire. Utilisez la lettre ensuite du lecteur qui vous intéresse (ici 'c'), puis le dossier en question (ici 'share') (ce qui donne '/cygdrive/c/share' pour 'C:\share').
- comment : une petite ligne de commentaire
- read only : on le passe à yes, car seul backuppc doit y accéder et il n'a pas besoin de droits spécifique en écriture
- hosts allow : spécifier l'ip du serveur backuppc
- secret file : contient un fichier avec les logins et mots de passe des utilisateurs étant autorisés à se connecter
- auth users : spécifie quel utilisateur est autoriser à se connecter.
J'ai donc créerun utilisateur spécifique appellé backuppc sur la machine et lui ai accordé des droits spécifique (onglet sécurité) au dossier "C:\share"
Maintenant, nous allons créer un fichier rsyncd.secrets contenant les utilisateurs et mots de passe. Il va donc falloir autoriser l'utilisateur backuppc à se connecter au service rsyncd :
C:\Program Files (x86)\ICW\rsyncd.secrets |
user:password |
La configuration est assez simple, ce qui me donnerait par exemple : backuppc:mot_de_passe
Une fois que c'est fait, redémarrez le service 'RsyncServer' dans la liste des services.
Sur le serveur backuppc, la configuration du serveur en question ressemble à ceci :
/etc/backuppc/windows.pl |
$Conf{XferMethod} = 'rsyncd'; $Conf{RsyncShareName} = [ 'factory' ]; $Conf{RsyncdPasswd} = 'mot_de_passe'; $Conf{RsyncdUserName} = 'backuppc'; |
Reloadez backuppc et c'est bon.
3 Sauvegarder des bases SQL
3.1 MySQL
Pour sauvegarder des bases SQL (MySQL par exemple), il est préférable de créer un compte sql dédié aux backups (backuppc par exemple) et de lui assigné les droits de select et de lock sur toutes les bases :
3.1.1 Backupper toutes les bases d'un coup
L'avantage de cette méthode est d'être simple, mais elle ne permet pas de restaurer base par base.
Dans la configuration de votre host sur backuppc, ajoutez cette ligne puis adaptez là à vos besoin :
/etc/backuppc/myhost.pl |
... $Conf{DumpPreUserCmd} = '$sshPath -q -x -l root $host /usr/bin/mysqldump -ubackuppc -ppassword -e --single-transaction --opt --all-databases > /tmp/dump.sql'; ... |
L'idéal est ensuite qu'à la fin du backup, vous puissiez effacer ce dump (par soucis de sécurité) :
/etc/backuppc/myhost.pl |
... $Conf{DumpPostUserCmd} = '$sshPath -q -x -l root $host rm -f /tmp/dump.sql'; ... |
3.1.2 Backupper base par base
Cette méthode plus fastidieuse à pour avantage la sauvegarde base par base qui permet de restaurer que la base qui vous intéresse en cas de problème.
De plus, elle comprends de la compression à la volée de votre base. Il faudra cependant installer 7zip au préalable (j'ai fais le choix de 7zip pour avoir une meilleure compression).
Nous allons créer un script que nous allons placer dans /etc/scripts par exemple :
Le problème ici est le mot de passe en clair. Vérifiez donc à bien restreindre à l'utilisateur qui va backuper :
chmod 700 /etc/scripts/backup_mysql_databases.sh |
Dans la configuration de votre host sur backuppc, ajoutez cette ligne puis adaptez là à vos besoin :
/etc/backuppc/myhost.pl |
... $Conf{DumpPreUserCmd} = '$sshPath -q -x -l root $host /etc/scripts/backup_mysql_databases.sh'; ... |
L'idéal est ensuite qu'à la fin du backup, vous puissiez effacer ce dump (par soucis de sécurité) :
/etc/backuppc/myhost.pl |
... $Conf{DumpPostUserCmd} = '$sshPath -q -x -l root $host rm -Rf /tmp/backups_sql'; ... |
3.2 PostgreSQL
Pour sauvegarder des bases Postgres, il nous faut faire comme d'habitude, un transfert de clef SSH mais pour l'utilisateur postgres.
3.2.1 Backupper toutes les bases d'un coup
L'avantage de cette méthode est d'être simple, mais elle ne permet pas de restaurer base par base.
Dans la configuration de votre host sur backuppc, ajoutez cette ligne puis adaptez là à vos besoin :
/etc/backuppc/myhost.pl |
... $Conf{DumpPreUserCmd} = '$sshPath -q -x -l postgres $host /usr/bin/pg_dump > /tmp/dump.sql'; ... |
L'idéal est ensuite qu'à la fin du backup, vous puissiez effacer ce dump (par soucis de sécurité) :
/etc/backuppc/myhost.pl |
... $Conf{DumpPostUserCmd} = '$sshPath -q -x -l root $host rm -f /tmp/dump.sql'; ... |
3.2.2 Backupper base par base
Cette méthode plus fastidieuse à pour avantage la sauvegarde base par base qui permet de restaurer que la base qui vous intéresse en cas de problème.
De plus, elle comprends de la compression à la volée de votre base. Il faudra cependant installer 7zip au préalable (j'ai fais le choix de 7zip pour avoir une meilleure compression).
Nous allons créer un script que nous allons placer dans /etc/scripts par exemple :
Un peu de sécurité ne fait pas de mal :
chmod 744 /etc/scripts/backup_postgres_databases.sh chown postgres /etc/scripts/backup_postgres_databases.sh |
Dans la configuration de votre host sur backuppc, ajoutez cette ligne puis adaptez là à vos besoin :
/etc/backuppc/myhost.pl |
... $Conf{DumpPreUserCmd} = '$sshPath -q -x -l postgres $host /etc/scripts/backup_postgres_databases.sh'; ... |
L'idéal est ensuite qu'à la fin du backup, vous puissiez effacer ce dump (par soucis de sécurité) :
/etc/backuppc/myhost.pl |
... $Conf{DumpPostUserCmd} = '$sshPath -q -x -l root $host rm -Rf /tmp/backups_sql'; ... |
4 Restauration par script
Voici un script qui permet de faire de la restauration :
#!/bin/bash # Script for restoring hosts (last full backup) from command line. # The restored backups can be found in $RESTOREDIR (defined below), # and are to be written on tape. BACKUPPCDIR=/srv/backuppc-data HOSTSDIR=$BACKUPPCDIR/pc RESTOREDIR=$HOSTSDIR/restore/restore # put the hosts/directories you do not want to restore into egrep... HOSTS=$(ls $HOSTSDIR | egrep -v '(HOST_CONFIG_FILES|restore)' | tr / " ") # or use: # HOSTS="HOST1 HOST2 REMOTE3" # no need to change anything below... DATE=$(date +%F) mkdir -p $RESTOREDIR/$DATE for HOST in $HOSTS do # find the last full backup NUMBER=$(grep full $HOSTSDIR/$HOST/backups| tail -1 | cut -f1) if [ "$NUMBER" ] then # do the backup for the host $BACKUPPCDIR/bin/BackupPC_archiveHost $BACKUPPCDIR/bin/BackupPC_tarCreate /usr/bin/split /usr/bin/par2 \ "$HOST" "$NUMBER" /usr/bin/gzip .gz 0000000 $RESTOREDIR/$DATE 0 \* fi done
5 FAQ
5.1 Problème de création de lien au démarrage du service
Si vous rencontrez ce type de message d'erreur :
2008-04-20 17:55:46 Can't create a test hardlink between a file in /var/lib/backuppc/pc and /var/lib/backuppc/cpool. Either these are different file systems, or this file system doesn't support hardlinks, or these directories don't exist, or there is a permissions problem, or the file system is out of inodes or full. Use df, df -i, and ls -ld to check each of these possibilities. Quitting...
Vérifiez bien les droits etc... sinon, si vous utilisez la cryptologie encfs, alors cela vient de ça et je vous invite a suivre ce lien
5.2 J'ai perdu les numéros de sauvegardes quand je souhaites restaurer des données
Si vous avez toujours vos données mais que vos fichier backups et backups.old sont corrompus, il reste un moyen de recréer l'indexation des sauvegardes afin de pouvoir récupérer les données. Si vous souhaitez tout réindexer, exécutez ceci :
BackupPC_fixupBackupSummary |
/usr/share/backuppc/bin/BackupPC_fixupBackupSummary |
Sinon, si vous voulez faire simplement une machine, ajoutez ceci à la fin :
Si vous avez une erreur Perl, c'est qu'il vous manque surement le paquage Perl "Time::ParseDate", faites ceci :
apt-get |
apt-get install libtime-modules-perl |