Skip to main content

Sauvegarde

Borgbackup

Pour effectuer des sauvegardes incrémentielles, j'utilise BorgBackup qui a l'avantage de pouvoir garder seulement X sauvegardes, de restaurer uniquement un fichier ou dossier en particulier et de monter la sauvegarde dans le système de fichier.

En prérequis, il faut bien sûr avoir installé le paquet borgbackup.

Voici mon script :

#!/bin/bash

# Définir le répertoire de sauvegarde
backup_dir="/mnt/disque1/borgbackup"

# Définir le nom de l'archive
archive_name=borg_backup

# Définir le nombre de sauvegardes à conserver
num_backups_to_keep=5

# Obtenir la date et l'heure actuelles
current_date_time=$(date +%d-%m-%Y_%H-%M-%S)

# Supprimer les sauvegardes excédentaires
borg prune --keep-last $num_backups_to_keep "${backup_dir}"

# Créer la sauvegarde incrémentielle en excluant les dossiers indiqués
borg create -v --stats --compression none \
    --exclude /swapfile \
    --exclude '/dev/*' \
    --exclude '/proc/*' \
    --exclude '/sys/*' \
    --exclude '/tmp/*' \
    --exclude '/run/*' \
    --exclude '/mnt/*' \
    --exclude '/media/*' \
    --exclude '/lost+found' \
    "${backup_dir}::${archive_name}_${current_date_time}" /

# https://doc.ubuntu-fr.org/borgbackup
# restauration
# borg extract --progress /chemin/vers/repertoire/de/sauvegarde::borg_backup_01-01-2021_12-00-00

# Montage de la sauvegarde
# borg mount /backup/borg::20230119 /tmp/backup
# Démontage
# borg umount /tmp/backup

Ne pas oublier de personnaliser selon les besoins et la configuration du système de fichier.
Notez qu'à la fin du script, je me suis laissé des notes.
Ne pas oublier d'initialiser le dossier de sauvegarde avec la commande suivante :

borg init -e none /chemin/vers/dossier

DD et Dump

dd va me permettre de faire une image de la partition EFI et dump pour faire une sauvegarde de la partition EXT4.
L'avantage d'utiliser dump est qu'il fait partie des outils pour l'EXT1-4 pour faire des sauvegardes et ne sauvegarde pas l'espace vide.

Le script comporte une copie sur un disque local supplémentaire, puis l'envoie sur un serveur FTP.

Voici le script simplifié :

#!/bin/bash

# serveur ftp
FTP_USER='user'
FTP_PASSWORD='password'
FTP_SERVER='serveur'
FTP_MOUNTPOINT='/point/de/montage/ftp'
FTP_BACKUP='/dossier/seur/serveur/ftp'

# Définir la source EFI
src_efi=/dev/sda1
dst_dir=${FTP_MOUNTPOINT}${FTP_BACKUP}
dst_image=$TRANSIT_D/efi_image_$(date +%d-%m-%Y).img
error_log=$TRANSIT_D/ERROR_image_$(date +%d-%m-%Y)

# Zone Transit avant l'envoie en ftp
TRANSIT_D=/mnt/usb1/backup

# création du dossier de montage

fusermount -u $FTP_MOUNTPOINT ;
rm -r $FTP_MOUNTPOINT ;
mkdir $FTP_MOUNTPOINT

# Montage FTP

curlftpfs $FTP_SERVER $FTP_MOUNTPOINT -o user=$FTP_USER:$FTP_PASSWORD

# Copie avec dd pour l'EFI et dump pour l'ext4
echo "Démarrage de la création de l'image disque..."
dd if=$src_efi of=$dst_image bs=4096 conv=noerror,sync
dump -0uf $TRANSIT_D/dump-$(date +%d-%m-%Y) /

# Vérifier si la copie s'est terminée avec succès
if [ $? -eq 0 ]; then
  echo "Image disque créée avec succès dans $dst_image."
else
  echo "Erreur lors de la création de l'image disque."
  touch $error_log
fi

# Specifique Freebox

chmod 600 $TRANSIT_D/*

# transfère en FTP

sync
sleep 2
echo "Transfert FTP de efi_image_$(date +%d-%m-%Y).img"
mv $dst_image $dst_dir
echo "Transfert FTP de dump-$(date +%d-%m-%Y)"
mv $TRANSIT_D/dump-$(date +%d-%m-%Y) $dst_dir
mv $error_log $dst_dir ;

# suppression des fichier de plus de 10 jours

echo "Suppression des ancien fichiers"
find $dst_dir -type f -mtime +10 -delete

# Démontage du dossier ftp

echo "Démontage du dossier ftp"
sync
fusermount -u $FTP_MOUNTPOINT

# Suppression du point de montage

sleep 2
rm -r $FTP_MOUNTPOINT

Bien sûr, il ne faut pas oublier de l'adapter et de créer une tâche CRON.