les backups sont probablement la première chose a mettre en place sur un serveur, NAS, ou PC. C'est une fonction qui passe inaperçu, mais très utile en cas de problème.
Fonctionnalités nécessaires
Alors de quoi a ton vraiment besoin ?
- des sauvegarde incrémental et dédupliqué pour réduire l'impacte sur les performances
- des sauvegarde compressé, pour réduire l'espace pris par les sauvegardes
- des sauvegarde chiffrées, pour assurée l'intégrité et la sécurité des données
- une authentification sécurisé
Au final SSH et Borg remplisses tout ces conditions. ZFS, zfs-auto-snapshot avec SSH ai une solution plus performante mais je n'ai parlerais pas aujourd'hui
let's rock du patté
installation sur le client
sudo apt update && sudo apt upgarde
sudo apt install borgbackup openssh-client
sudo ssh-keygen -t ed25519 /root/.ssh/id_ed25519
ne mettez pas de mot de passe a votre clé ssh ! Ça rendrais difficile l'automatisation de la sauvegarde
installation sur le serveur
sudo apt install borgbackup openssh-server
préparation du serveur
sudo mkdir -pv /srv/backups/.ssh
sudo mkdir -pv /srv/backups/monpc
sudo chown -R backups:backups /srv/backups
sudo adduser --disabled-login --home /srv/backups/ --no-create-home backups
cat > /srv/backups/.ssh/authorized_keys
command="cd /srv/backups/monpc; borg serve --restrict-to-path /srv/backups/monpc",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty,no-user-rc {{ la clé publique ssh de votre pc }}
^D
création du répertoire
BORG_NEW_PASSPHRASE=$(pass generate backup) borg init --encryption=repokey backups@monserveur:/srv/backups/monpc
Création du scripts de backup
cat > /tmp/backups.sh
#!/bin/bash
REPO='backups@monserveur:monpc'
export BORG_PASSCOMMAND='pass show backup'
borg create -v --stats --progress --compression lz4 \
--exclude-caches \
--exclude-if-present ".nobackup" \
--exclude '/home/*/.cache/*' \
--exclude '/var/cache/*' \
--exclude '/var/tmp/*' \
--exclude '*.pyc' \
--exclude '*.o' \
/etc \
/home \
/root \
/var \
${REPO}::'{hostname}-{now:%Y-%m-%d}' \
backup_exit=$?
borg prune -v --list $REPO --prefix '{hostname}-' \
--keep-daily=7 --keep-weekly=4 --keep-monthly=6
prune_exit=$?
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
if [ ${global_exit} -eq 0 ]; then
info "Backup and Prune finished successfully"
elif [ ${global_exit} -eq 1 ]; then
info "Backup and/or Prune finished with warnings"
else
info "Backup and/or Prune finished with errors"
fi
exit ${global_exit}
^D
cat > /tmp/check.sh
#!/bin/bash
REPO='backups@monserveur:monpc'
export BORG_PASSCOMMAND='pass show backup'
borg check $REPO \
--prefix '{hostname}-' \
--verify-data \
^D
chmod +x /tmp/backups.sh
chmod +x /tmp/check.sh
sudo chown root:root /tmp/backups.sh
sudo chown root:root /tmp/check.sh
sudo mv /tmp/backups.sh /etc/cron.daily/
sudo mv /tmp/check.sh /etc/cron.weekly/
Libre à vous de modifié ce script pour sauvegardé d'autre chose, ou lancé le script a l'alignement de certaine planète. Le script est aussi fait pour ne pas sauvegardé les dossiers contenant un fichier .nobackup
, ça est très utile pour ne pas sauvegardé les dossier inule comme les dossiers d'environnements virtuel, les dossier de build, etc.. dans le but de réduire l'espace utilisé et la vitesse de sauvegarde.
Performance
Sur mon serveur perso, 125Go d'espace disque sont utilisé, et les sauvegardes font 4,7Go. Plutôt efficace non ? Par contre sur mon PC perso, j'utilise 200Go d'espace disque et les sauvegarde font environ 100Go.. Ce qui est assez logique car les mails sont très compressible contrairement au images (sauf bitmap), les vidéos, les fichiers audio, etc..