La sauvegarde sous PBS
Création — Nicolas THOREZ 2021/08/24 12:25
Introduction
Proxmox Backup Server (PBS) permet de centraliser les sauvegardes, gérer les rétentions, sauvegarder et restaurer des machines au niveau fichier, vérifier les sauvegardes, etc…
Sauvegarde de VM
La sauvegarde de VM est assez simple à mettre en place lorsqu'on a déjà vu cette fonctionnalité sous PVE. Pour PBS, il faut :
- Mettre en place un datastore de PBS dans PVE (voir Ajout d'un datastore à partir d'un disque USB)
- Mettre en place une sauvegarde de VM sous PVE en choisissant le datastore de PBS (voir La sauvegarde sous PVE)
Les sauvegardes apparaîtront alors dans PBS est pourront être gérées depuis là.
Sauvegarde par agent
- Pour lancer une sauvegarde, on commence par s'authentifier auprès du serveur :
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_ADDRESS="1.2.3.4"
PBS_STORAGE="backup"
export PBS_FINGERPRINT
export PBS_PASSWORD
proxmox-backup-client login --repository root@pam@${PBS_ADDRESS}:${PBS_STORAGE}
- 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 :
PBS_ADDRESS="1.2.3.4"
PBS_STORAGE="backup"
PATH_TO_BACKUP="/"
proxmox-backup-client backup $HOSTNAME.pxar:${PATH_TO_BACKUP} --repository root@pam@${PBS_ADDRESS}:${PBS_STORAGE}
- Le problème, c'est que les sauvegardes sont du coup manuelles. Pour automatiser cela, j'ai écris le script suivant
pbs-backup.sh:
#!/bin/bash
#######################################################
# #
# 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()
{
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
}
#=====================#
# 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 #
#==========================#
# 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
#============#
# Traitement #
#============#
# 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}
- Ce script, nous permet alors de mettre en place un cron :
# 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"
Sauvegarde
Et voilà, votre serveur sera sauvegardé tous les jours à 1h.Client et chiffrement
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.jsonet 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 commandecreate. Il est aussi possible d'ignorer la protection par mot de passe en ajoutant–kdf noneà la commande :
proxmox-backup-client key create
- 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
–keyfileet 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 variablePBS_ENCRYPTION_PASSWORDavant de lancer la sauvegarde.
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.
Vérification des sauvegardes
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 :
Discussion