Table des matières

Divers scripts de backup sous linux

Information

Testés sur Debian 8. Attention, aucun de ces scripts n'a de gestion d'erreur. Ils font le job, mais il faut contrôler vos backups régulièrement.

Backup de ftp

Utile pour backup d'un site web. Récupération et création d'une archive tgz. Création d'un fichier md5 correspondant à l'archive.

Packages nécessaires : lftp md5sum

apt install lftp md5sum

Script :

#!/bin/bash

###### CONFIGURATION #####

#Dossier de ce script
DOSSIERSCRIPT=/home/user/baksystem

#Nom du site à backup
NOMSITE=monsite.fr

#Addresses FTP
FTPADDRESS=ftp.monsite.fr:21

#Utilisateur FTP
FTPUSER=user

#Mot de passe FTP
FTPPASS=password

#Dossier distant sur FTP, depuis la racine du FTP
FTPREMOTEFOLDER=/htdocs

#Durée de rétention de backups en jours
RETENTION=5

####### FIN CONF #########

### NE PAS EDITER APRES CE POINT ! ####

LFTPTEMP=$DOSSIERSCRIPT/temp/$NOMSITE
mkdir -p $LFTPTEMP

BAKFOLDER=$DOSSIERSCRIPT/bak
mkdir -p $BAKFOLDER

### SCRIPT START ###

#SYNCHRO LFTP
lftp -u $FTPUSER,$FTPPASS -e 'mirror --verbose -c '$FTPREMOTEFOLDER' '$LFTPTEMP' --delete --parallel=1 --verbose=3; quit;' $FTPADDRESS

#COMPRESSION
NOW=$(date +"%Y-%m-%d-%H-%M-%S")
tar -zcvf $BAKFOLDER/$NOMSITE-$NOW.tgz $LFTPTEMP

#CHECKSUM
md5sum $BAKFOLDER/$NOMSITE-$NOW.tgz > $BAKFOLDER/$NOMSITE-$NOW.md5

#EDIT CHECKSUM FOR RELATIVE PATH
SEDCOMMAND=s,$BAKFOLDER/,,g
sed -i "$SEDCOMMAND" $BAKFOLDER/$NOMSITE-$NOW.md5

#CLEAN OLD BACKUPS
find $BAKFOLDER -type f -mtime +$RETENTION -exec rm {} \;

### SCRIPT END ###

Backup en rsync, avec authentification par clé privée

Utile pour récupérer des archives sur un serveur distant sécurisé.

Package nécessaire : rsync

apt install rsync

Script :

#!/bin/bash

###### CONFIGURATION #####

#Dossier de ce script
DOSSIERSCRIPT=/home/user/baksystem

#Nom du site à backup
NOMBACKUP=monbackup

#Addresses FTP
SERVERADDRESS=monserveur:22

#Utilisateur SSH
USER=user

#Dossier distant sur serveur
SERVERREMOTEFOLDER=/mon/dossier/

#Fichier de clé SSH à mettre dans le dossier "keys" (dossier situé au niveau de ce script)
KEYFILE=macleprivee

#Durée de rétention de backups en jours
RETENTION=5

####### FIN CONF #########

BAKFOLDER=$DOSSIERSCRIPT/bak/$NOMBACKUP
mkdir -p $BAKFOLDER

#RSYNC
rsync -avz --progress --delete --rsh="ssh -i "$DOSSIERSCRIPT"/keys/"$KEYFILE" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" $USER@$SERVERADDRESS:$SERVERREMOTEFOLDER/* $BAKFOLDER

#Nettoyage des vieux backups
find $BAKFOLDER -type f -mtime +$RETENTION -exec rm {} \;

Copie sur partage SMB, sans écrasement

Utilisé pour copier des archives de sauvegarde d'un serveur vers un partage SMB. Pas d'écrasement de fichiers existants.

Attention : Ce script doit être lancé en root pour pouvoir effectuer le montage SMB.

Package nécessaire : cifs-utils

apt install cifs-utils

Script :

#!/bin/bash

###### CONFIGURATION #####

#Dossier de ce script
DOSSIERSCRIPT=/home/user/baksystem

BAKFOLDER=$DOSSIERSCRIPT/bak

#Point de montage
SMBMOUNT=/media/websites-bak

#IP du serveur SMB
SMBIP=192.168.10.42

#Chemin du dossier sur SMB
SMBPATH=dossier/sur/smb

#Utilisateur SMB
SMBUSER=utilisateur

#Mot de passe SMB
SMBPASS=password

#Durée de rétention de backups en jours
RETENTION=5

#CHMOD pour le dossier d'arrivée
RIGHTS=775

####### FIN CONF #########

#CREATE MOUNT POINT
mkdir -p $SMBMOUNT

#MOUNT
mount -t cifs //$SMBIP/$SMBPATH -o username=$SMBUSER,password=$SMBPASS $SMBMOUNT
sleep 3

#COPY WITH SKIP
cp -r --no-clobber $BAKFOLDER/* $SMBMOUNT
chmod -R $RIGHTS $SMBMOUNT/*

#CLEAN OLD BACKUPS ON SMB
find $SMBMOUNT -type f -mtime +$RETENTION -exec rm {} \;
sleep 3

#UNMOUNT
umount $SMBMOUNT
sleep 3