Restaurer une sauvegarde rsnapshot
Support Wissensdatenbank
Restaurer une sauvegarde rsnapshot
Lorsqu’une sauvegarde rsync ou rsnapshot doit être restaurée, cela doit se faire très rapidement. Pour cela, nous avons créé les scripts ci-joints afin de restaurer les données le plus rapidement possible. Les deux scripts peuvent être exécutés en parallèle afin de restaurer simultanément les données web et e-mail. Le script lance plusieurs processus parallèles pour accélérer la restauration. Pour cela, il faut que le serveur de sauvegarde puisse accéder au serveur cible via une clé SSH.
Conditions préalables :
– rsnapshot Backup
– Clé SSH déposée sur le serveur cible
– Serveur Plesk
Le script démarre x processus Rsync définis. Le script peut être adapté pour n’importe quel chemin. Par exemple, on peut adapter “realpath” à “/var/lib/mysql” pour restaurer chaque base de données individuellement à partir de la sauvegarde de fichiers. Avec sshkey, il est également possible d’échanger la clé de sauvegarde SSH.
Restaurer les fichiers web (webrestore.sh):
#!/bin/bash #Settings process_limit=120 # Max amount of rsync processes server="sr00" # Server according to Backup path /volume1/backup/{$server} daily="0" # Daily number according to backup path starting with 0 like daily.0 /volume1/backup/$server/daily.{$daily} remote="sr00.firestorm.ch" # URL or IP of Target Server. sshkey="/root/.ssh/backupkey" # Rsync SSH Key backuppath="/volume1/backup/$server/daily.$daily/$server" # Source backup path from rsnapshot (No tailing slashes) realpath="/var/www/vhosts" # Server Source location (No tailing slashes) #Processes Array processes=() function check_processes { #For Each Rsync Process for pid in "${processes[@]}"; do #If Process has died / ended if ! ps -p $pid > /dev/null ; then #For Each Numbered Process Array for i in "${!processes[@]}"; do #If numberes Process equals died process if [[ ${processes[i]} = $pid ]]; then #Remove Process from array unset 'processes[i]' fi done fi done } #For Each Website in Backup for folder in $backuppath$realpath/* ; do domain="$(basename $folder)" /bin/echo "##############################" #wait if more than 30 processes while [ ${#processes[@]} -gt $process_limit ] do check_processes /bin/sleep 5s done /bin/echo "/bin/rsync --stats --progress -avz --delete $folder/ root@$server.firestorm.ch:$realpath/$domain/ (${#processes[@]} / $process_limit)" /bin/rsync --stats --progress -avz --delete -e "ssh -p 22 -i $sshkey" $folder/ root@$remote:$realpath/$domain/ & processes+=($!) done
Restaurer les données de l’email (webrestore.sh) :
#!/bin/bash #Settings process_limit=120 # Max amount of rsync processes server="sr00" # Server according to Backup path /volume1/backup/{$server} daily="0" # Daily number according to backup path starting with 0 like daily.0 /volume1/backup/$server/daily.{$daily} remote="sr00.firestorm.ch" # URL or IP of Target Server. sshkey="/root/.ssh/backupkey" # Rsync SSH Key backuppath="/volume1/backup/$server/daily.$daily/$server" # Source backup path (No tailing slashes) realpath="/var/qmail/mailnames" # Server Source location (No tailing slashes) #Processes Array processes=() function check_processes { #For Each Rsync Process for pid in "${processes[@]}"; do #If Process has died / ended if ! ps -p $pid > /dev/null ; then #For Each Numbered Process Array for i in "${!processes[@]}"; do #If numberes Process equals died process if [[ ${processes[i]} = $pid ]]; then #Remove Process from array unset 'processes[i]' fi done fi done } #For Each Mailname in Backup for folder in $backuppath$realpath/* ; do domain="$(basename $folder)" /bin/echo "##############################" #wait if more than 30 processes while [ ${#processes[@]} -gt $process_limit ] do check_processes /bin/sleep 5s done /bin/echo "/bin/rsync --stats --progress -avz --delete $folder/ root@$server.firestorm.ch:$realpath/$domain/ (${#processes[@]} / $process_limit)" /bin/rsync --stats --progress -avz --delete -e "ssh -p 22 -i $sshkey" $folder/ root@$remote:$realpath/$domain/ & processes+=($!) done
wiederherstellen: