pbs_backup

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
pbs_backup [2021/08/23 20:33] – créée nekanpbs_backup [2021/08/26 08:35] (Version actuelle) – [Sauvegarde par agent] nekan
Ligne 1: Ligne 1:
 ====== La sauvegarde sous PBS ====== ====== La sauvegarde sous PBS ======
-<label type="info">Création</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2021/08/23 20:14//+<label type="info">Création</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2021/08/24 12:25//
  
 ===== Introduction ===== ===== Introduction =====
Ligne 16: Ligne 16:
 ===== Sauvegarde par agent ===== ===== Sauvegarde par agent =====
  
-  * TODO : +  * Pour lancer une sauvegarde, on commence par s'authentifier auprès du serveur :
-  * Demande de ticket+
 <sxh bash>PBS_PASSWORD='P@ssW0rd' <sxh bash>PBS_PASSWORD='P@ssW0rd'
 PBS_FINGERPRINT='42:40:d4:25:a0:ed:c7:05:bf:c4:62:a7:e5:98:a6:4d:ff:82:aa:3e:37:3f:c2:92:0d:f2:8a:77:49:b5:dd:ef' PBS_FINGERPRINT='42:40:d4:25:a0:ed:c7:05:bf:c4:62:a7:e5:98:a6:4d:ff:82:aa:3e:37:3f:c2:92:0d:f2:8a:77:49:b5:dd:ef'
 PBS_ADDRESS="1.2.3.4" PBS_ADDRESS="1.2.3.4"
 PBS_STORAGE="backup" PBS_STORAGE="backup"
 +export PBS_FINGERPRINT
 +export PBS_PASSWORD
 proxmox-backup-client login --repository root@pam@${PBS_ADDRESS}:${PBS_STORAGE}</sxh> proxmox-backup-client login --repository root@pam@${PBS_ADDRESS}:${PBS_STORAGE}</sxh>
-  * Lancement de la sauvegarde+  * Cette authentification permet nous fourni un token nous permettant d'envoyer des requêtes au serveur sans nouvel authentification pendant 2h. Du coup, nous pouvons lancer une sauvegarde à la suite :
 <sxh bash>PBS_ADDRESS="1.2.3.4" <sxh bash>PBS_ADDRESS="1.2.3.4"
 PBS_STORAGE="backup" PBS_STORAGE="backup"
 PATH_TO_BACKUP="/" PATH_TO_BACKUP="/"
 proxmox-backup-client backup $HOSTNAME.pxar:${PATH_TO_BACKUP} --repository root@pam@${PBS_ADDRESS}:${PBS_STORAGE}</sxh> proxmox-backup-client backup $HOSTNAME.pxar:${PATH_TO_BACKUP} --repository root@pam@${PBS_ADDRESS}:${PBS_STORAGE}</sxh>
-  Script de sauvegarde pbs-backup.sh +    Le problème, c'est que les sauvegardes sont du coup manuelles. Pour automatiser cela, j'ai écris le script suivant ''pbs-backup.sh'' : 
-<sxh bash>#!/bin/bash +<sxh bash; title : pbs-backup.sh >#!/bin/bash
-+
-# Script de sauvegarde de serveur via agent Proxmox +
-# Par Nicolas THOREZ +
-#+
  
-#===========+######################################################
-Fonctions +                                                    
-#===========#+ Script de sauvegarde de serveur via agent Proxmox 
 +#  Par Nicolas THOREZ                                 # 
 +#                                                     # 
 +#######################################################
  
 +#==========================#
 +# Définition des variables #
 +#==========================#
 +
 +# Utilisateur par défaut
 +DEFAULT_PBS_USER="root@pam"
 +
 +# Chemin du client
 +PBSCLIENT="/usr/bin/proxmox-backup-client"
 +
 +# Chemin à sauvegarder par défaut
 +DEFAULT_PATH_TO_BACKUP="/"
 +
 +# Regex pour l'empreinte
 +REGEX_FINGERPRINT="^([0-9a-f]{2}:){31}[0-9a-f]{2}$"
 +
 +# Regex pour l'adresse
 +REGEX_ADDRESS="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
 +
 +#==========================#
 +# Définition des fonctions #
 +#==========================#
 +
 +# Fonction d'affichage de l'aide
 display-help() display-help()
 { {
 +    echo "Script de sauvegarde de serveur via agent Proxmox"
 +    echo ""
 +    echo "Usage : pbs-backup.sh [-u|--user] utilisateur [-p|--password] mot de passe"
 +    echo "                      [-a|--address] adresse du serveur [-r|--repository] dépôt de sauvegarde"
 +    echo "                      [-b|--backup] dossier à sauvegarder [-f|--fingerprint] empreinte du serveur"
 +    echo "                      [-h|--help]"
 +    echo ""
 +    echo "Paramètres et arguments :"
 +    echo ""
 +    echo "-h, --help               Affiche cette aide."
 +    echo ""
 +    echo "-u, --user               Utilisateur autorisé sur le serveur PBS."
 +    echo "                         Par défaut, l'utilisateur 'root@pam' est utilisé."
 +    echo ""
 +    echo "-p, --password           Mot de passe pour l'utilisateur donnée."
 +    echo "                         Si aucun mot de passe n'est fourni, il en sera demander un."
 +    echo ""
 +    echo "-a, --address            Adresse du serveur PBS."
 +    echo ""
 +    echo "-r, --repository         Dossier de stockage où sera déposé la sauvegarde."
 +    echo ""
 +    echo "-b, --backup             Dossier à sauvegarder."
 +    echo "                         Par défaut, le dossier sera la racine."
 +    echo ""
 +    echo "-f, --fingerprint        Empreinte du certificat du serveur PBS."
 +    echo ""
 +    exit 2
 +}
 +
 +# Fonction de collecte du mot de passe
 +get-password()
 +{
 +    read -p "Veuillez saisir le mot de passe : " -s PASS
 +    if [ -z "$PASS" ]
 +    then
 +        echo "CRIT - Le mot de passe est obligatoire"
 +        exit 2
 +    else
 +        echo $PASS
 +    fi
 } }
  
Ligne 46: Ligne 110:
 # Gestion des entrées # # Gestion des entrées #
 #=====================# #=====================#
 +
 +while [[ $# -gt 0 ]]
 +do
 +    PARAM="$1"
 +    case $PARAM in
 +        # aide
 +        "-h"|"--help")
 +        display-help
 +        shift
 +        ;;
 +        # Utilisateur
 +        "-u"|"--user")
 +        PBS_USER="$2"
 +        shift
 +        shift
 +        ;;
 +        # Mot de passe
 +        "-p"|"--password")
 +        case $2 in
 +            "-h"|"--help"|"-u"|"--user"|"-p"|"--password"|"-a"|"--address"|"-r"|"--repository"|"-b"|"--backup"|"-f"|"--fingerprint")
 +            PBS_PASSWORD=$(get-password)
 +            echo ""
 +            shift
 +            ;;
 +            *)
 +            PBS_PASSWORD="$2"
 +            shift
 +            shift
 +            ;;
 +        esac
 +        ;;
 +        # Adresse
 +        "-a"|"--address")
 +        PBS_ADDRESS="$2"
 +        shift
 +        shift
 +        ;;
 +        # Dépôt de sauvegarde
 +        "-r"|"--repository")
 +        PBS_REPOSITORY="$2"
 +        shift
 +        shift
 +        ;;
 +        # Chemin à sauvegarder
 +        "-b"|"--backup")
 +        PATH_TO_BACKUP="$2"
 +        shift
 +        shift
 +        ;;
 +        # Empreinte
 +        "-f"|"--fingerprint")
 +        PBS_FINGERPRINT="$2"
 +        shift
 +        shift
 +        ;;
 +        # Autre
 +        *)
 +        display-help
 +        shift
 +        ;;
 +    esac
 +done
  
 #==========================# #==========================#
 # Vérification des entrées # # Vérification des entrées #
 #==========================# #==========================#
 +
 +# Utilisateur
 +if [ -z "$PBS_USER" ]
 +then
 +    PBS_USER="$DEFAULT_PBS_USER"
 +fi
 +
 +# Mot de passe
 +if [ -z "$PBS_PASSWORD" ]
 +then
 +    PBS_PASSWORD=$(get-password)
 +    echo ""
 +fi
 +
 +# Adresse
 +if [[ ! $PBS_ADDRESS =~ $REGEX_ADDRESS ]]
 +then
 +    echo "CRIT - L'adresse donnée est invalide."
 +    exit 2
 +fi
 +
 +# Dépôt de sauvegarde
 +if [ -z "$PBS_REPOSITORY" ]
 +then
 +    echo "CRIT - Le dépôt de sauvegarde est invalide."
 +    exit 2
 +fi
 +
 +# Chemin à sauvegarder
 +if [ -z "$PATH_TO_BACKUP" ]
 +then
 +    PATH_TO_BACKUP="$DEFAULT_PATH_TO_BACKUP"
 +else
 +    if [ ! -d "$PATH_TO_BACKUP" ]
 +    then
 +        echo "CRIT - Le chemin donnée n'est par un dossier valide"
 +        exit 2
 +    fi
 +fi
 +
 +# Empreinte
 +if [[ ! $PBS_FINGERPRINT =~ $REGEX_FINGERPRINT ]]
 +then
 +    echo "CRIT - L'empreinte donnée n'est pas valide"
 +fi
  
 #============# #============#
Ligne 55: Ligne 226:
 #============# #============#
  
 +# Demande de token
 +export PBS_FINGERPRINT
 +export PBS_PASSWORD
 +$PBSCLIENT login --repository ${PBS_USER}@${PBS_ADDRESS}:${PBS_REPOSITORY}
 +
 +# Mise en forme du nom de la sauvegarde
 +PATH_NAME="$(echo $PATH_TO_BACKUP | sed 's;/;-;g')"
 +if [ "${PATH_NAME: -1}" == "-" ]
 +then
 +    PATH_NAME="${PATH_NAME:: -1}"
 +fi
 +
 +# Sauvegarde
 +$PBSCLIENT backup ${HOSTNAME}${PATH_NAME}.pxar:${PATH_TO_BACKUP} --repository ${PBS_USER}@${PBS_ADDRESS}:${PBS_REPOSITORY}
 +</sxh>
 +  * Ce script, nous permet alors de mettre en place un cron :
 +<sxh bash># Tâche de sauvegarde
 +0 1 * * *    root    /usr/local/batch/pbs-backup.sh -u nekan@pve -p P@ssW0rd -a 1.2.3.4 -r backup -b / -f "42:40:d4:25:a0:ed:c7:05:bf:c4:62:a7:e5:98:a6:4d:ff:82:aa:3e:37:3f:c2:92:0d:f2:8a:77:49:b5:dd:ef"
 </sxh> </sxh>
  
-  Cron+<callout type="success" title="Sauvegarde" icon="true">Et voilà, votre serveur sera sauvegardé tous les jours à 1h.</callout> 
 + 
 +<callout type="warning" title="Client et chiffrement" icon="true">Il est possible de chiffrer les sauvegardes réalisées via le client. Cependant, en faisant cela, il ne sera plus possible d'explorer les sauvegardes ni de les restaurer via le serveur vu que ce dernier ne connaît pas la clé de chiffrement. Ces fonctionnalités ne seront disponibles qu'en ligne de commande à partir du client lui-même. Si cette fonctionnalité vous intéresse et que les désagréments ne vous rebutent pas, il est facile de mettre le chiffrement en place. Pour cela : 
 +  On crée la clé de chiffrement. Par défaut, la clé est enregistrée dans le fichier ''~/.config/proxmox-backup/encryption-key.json'' et cette dernier est protégée par un mot de passe. Il est possible de spécifier un autre chemin en indiquant ce dernier après la commande ''create''. Il est aussi possible d'ignorer la protection par mot de passe en ajoutant ''--kdf none'' à la commande : 
 +<sxh bash>proxmox-backup-client key create</sxh> 
 +  * Lors de la sauvegarde, la clé par défaut est utilisée automatiquement. Pour spécifier une clé, on peux indiquer son chemin avec le paramètre ''--keyfile'' et pour éviter d'avoir a entrer le mot de passe de la clé si cette dernière est protégée, on peut définir et exporter la variable ''PBS_ENCRYPTION_PASSWORD'' avant de lancer la sauvegarde. 
 +</callout>
  
 ===== Gestion de la rétention ===== ===== Gestion de la rétention =====
  
 +Au travers de l'interface de PBS, nous pouvons gérer la manière dont les sauvegardes sont conservées. Ainsi dans le menu correspondant à notre datastore (ici ''backup''), onglet ''Délestage et GC''; il est possible de définir :
 +  * **Garbage Collection Schedule** : Fréquence à laquelle le serveur va supprimer les anciennes sauvegardes.
 +  * ** Planification du Délestage** : Fréquence à laquelle le serveur va délester les anciennes sauvegardes. Cette action supprime uniquement les index et non les données de sauvegardes.
 +  * **Garder Dernier** : Permet de conserver les x dernières sauvegardes.
 +  * **Garder Horaires** : Permet de conserver les sauvegardes pendant x heures.
 +  * **Garder Journaliers** : Permet de conserver les sauvegardes pendant x jours.
 +  * **Garder Hebdomadaires** : Permet de conserver les sauvegardes pendant x semaines.
 +  * **Garder Mensuels** : Permet de conserver les sauvegardes pendant x mois.
 +  * **Garder Annuels** : Permet de conserver les sauvegardes pendant x années.
 +
 +<image shape="thumbnail">{{ :proxmox:pbs_016.png |}}</image>
  
 ===== Vérification des sauvegardes ===== ===== Vérification des sauvegardes =====
  
-{{:underconstruction-copy-300x150.jpg?400|}}+La vérification des sauvegardes permet de valider leurs intégrités. Pour ce faire, toujours au niveau de l'interface de PBS, dans le menu correspondant à notre datastore (ici ''backup''), onglet ''Verify Jobs'', on cliquer sur ''Ajouter'' pour créer un tâche planifiée qui vérifiera l'intégrité des sauvegardes présentes dans le datastore : 
 + 
 +<image shape="thumbnail">{{ :proxmox:pbs_017.png |}}</image>
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  • pbs_backup.1629743585.txt.gz
  • Dernière modification : 2021/08/23 20:33
  • de nekan