Outils pour utilisateurs

Outils du site


backup:borg

Ce sont des notes généralistes concernant borg, ceci ne reflète pas le déploiement de borg chez faimaison. Si c'est ça que tu cherche, va sur backup

Avant de commencer, voici quelques liens d'information:

Introduction :

Propriétés des logiciels de sauvegarde

Les logiciels de backup peuvent posséder plusieurs de ces 4 propriétés: compression, incrémental, différentiel et dédupliqué.

  • Compression: La compression permet de réduire l'espace nécessaire au stockage de la sauvegarde d'un fichier, comme on le ferait avec une archive zip.
    • Exemple de logiciel: tar/gzip, zip…
  • Incrémental: Le logiciel conserve les anciennes versions des fichiers.
    • Vous pouvez récupérer un fichier tel qu'il était il y a une semaine, ou récupérer un fichier que vous avez effacé depuis plusieurs backups.
    • Exemple de logiciel: rsnapshot, BackInTime, TimeShift
  • Différentiel : Le logiciel de backup ne va sauvegarder que les parties modifiées des fichiers.
    • Imaginez: Vous faites fonctionner une machine virtuelle qui fait 10 Go:
      • Si votre logiciel de backup n'est pas différentiel, il verra que le fichier de 10 Go a été modifié, et il va le sauvegarder en entier à nouveau.
      • Si votre logiciel de backup est différentiel, il ne va sauvegarder que la partie modifiée du fichier. Le gain de place est énorme.
    • Exemple de logiciel: rdiff-backup, duplicity
  • Dé-dupliqué: Le logiciel de backup va repérer les données identiques dans des fichiers différents.
    • Imaginez: Vous déplacez un répertoire contenant beaucoup de fichiers, ou vous renommez des fichiers volumineux.
      • Si votre logiciel de backup ne fait pas de dé-duplication, il considérera que ce sont de nouveaux fichiers et ira tous les sauvegarder à nouveau. Votre sauvegarde va enfler.
      • Si votre logiciel de backup fait de la dé-duplication, il verra que le contenu des fichiers est identique à des fichiers déjà sauvegardés, et ne les sauvegardera pas à nouveau (énorme gain de temps et de place).
    • Exemple de logiciel: BorgBackup, bup, duplicati

Attention aux bases de données et autres applications consistantes“! Il faut faire un export/dump des bases avant.

Le serveur

Il faut juste un OS avec du SSH et de l'espace disque. Où sinon un espace NAS via le protocole NFS en local ou en configurant le SSH sur votre NAS!.

1/ Création de l’utilisateur spécifique pour la sauvegarde

#  adduser borg
Ajout de l'utilisateur « borg » ...
Ajout du nouveau groupe « borg » (1001) ...
Ajout du nouvel utilisateur « borg » (1001) avec le groupe « borg » ...
Création du répertoire personnel « /home/borg »...
Copie des fichiers depuis « /etc/skel »...
Nouveau mot de passe : 
Retapez le nouveau mot de passe : 
passwd: password updated successfully
Changing the user information for borg
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Cette information est-elle correcte ? [O/n]

2/ Droit sur l'espace disque pour la sauvegarde

Définir votre espace de backup Via un nouveau volume ou partition voir ici

Changer le propriétaire sur cet espace:

#  chown -R borg:borg /backup1/interne/

3/ Configuration "SSH" utilisateur

On verra cela après la configuration du CLIENT

# cat .ssh/authorized_keys 
CLES SSH USER@HOSTNAME1
CLES SSH USER@HOSTNAME2
command="/usr/local/bin/borg serve --restrict-to-path /backup1/interne/HOSTNAME1/",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc USER@HOSTNAME1
command="/usr/local/bin/borg serve --restrict-to-repository /backup1/interne/HOSTNAME2/ --storage-quota 128G",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc USER@HOSTNAME2

Option: Changement de port SSH

Le/Les client/s

1/ Préparation de l'environnement

Vérification clés SSH de root, car souvent ROOT n'a pas de clés SSH:

#  ls -la ~/.ssh/
total 12
drwx------ 2 root root 4096 févr.  1 19:25 .
drwx------ 6 root root 4096 avril 29 09:58 ..
-rw-r--r-- 1 root root  222 févr.  1 19:25 known_hosts
#  ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KDNynM2p7NGftC7Aj7edL76q22PjZYj0xvjanfCVaxc root@debian10-
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|   . + o         |
|  ..O = S        |
|   =o@ .   .E    |
|    *+B + o  .   |
|   ..*BX.*...    |
|    =BBO&=o.     |
+----[SHA256]-----+
#  ls -la ~/.ssh/
total 20
drwx------ 2 root root 4096 mai    3 11:19 .
drwx------ 6 root root 4096 avril 29 09:58 ..
-rw------- 1 root root 1831 mai    3 11:19 id_rsa
-rw-r--r-- 1 root root  401 mai    3 11:19 id_rsa.pub
-rw-r--r-- 1 root root  222 févr.  1 19:25 known_hosts

Échange de la clés SSH pour des connexions sans mot de passe et donc automatiser les sauvegardes

# ssh-copy-id borg@backup.XXX.net
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'backup.XXX.net (89.234.177.134)' can't be established.
ECDSA key fingerprint is SHA256:IGWLmEd9iwRSZubnKx14etFKnrgo07lJQ71n+ntzL80.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
borg@backup.XXX.net's password: 
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh 'borg@backup.XXX.net'"
and check to make sure that only the key(s) you wanted were added.
#  apt install borgbackup
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés : 
  libb2-1 libgomp1 python3-llfuse python3-msgpack
Paquets suggérés :
  borgbackup-doc python-llfuse-doc
Les NOUVEAUX paquets suivants seront installés :
  borgbackup libb2-1 libgomp1 python3-llfuse python3-msgpack
0 mis à jour, 5 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 1 068 ko dans les archives.
Après cette opération, 4106 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] 
Réception de :1 http://ftp.fr.debian.org/debian buster/main amd64 python3-llfuse amd64 1.3.6+dfsg-1 [194 kB]
Réception de :2 http://ftp.fr.debian.org/debian buster/main amd64 python3-msgpack amd64 0.5.6-1+b1 [104 kB]
Réception de :3 http://ftp.fr.debian.org/debian buster/main amd64 libgomp1 amd64 8.3.0-6 [75,8 kB]
Réception de :4 http://ftp.fr.debian.org/debian buster/main amd64 libb2-1 amd64 0.98.1-1 [40,8 kB]
Réception de :5 http://ftp.fr.debian.org/debian buster/main amd64 borgbackup amd64 1.1.9-2 [653 kB]
1 068 ko réceptionnés en 1s (1 291 ko/s)
Sélection du paquet python3-llfuse précédemment désélectionné.
(Lecture de la base de données... 41415 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../python3-llfuse_1.3.6+dfsg-1_amd64.deb ...
Dépaquetage de python3-llfuse (1.3.6+dfsg-1) ...
Sélection du paquet python3-msgpack précédemment désélectionné.
Préparation du dépaquetage de .../python3-msgpack_0.5.6-1+b1_amd64.deb ...
Dépaquetage de python3-msgpack (0.5.6-1+b1) ...
Sélection du paquet libgomp1:amd64 précédemment désélectionné.
Préparation du dépaquetage de .../libgomp1_8.3.0-6_amd64.deb ...
Dépaquetage de libgomp1:amd64 (8.3.0-6) ...
Sélection du paquet libb2-1 précédemment désélectionné.
Préparation du dépaquetage de .../libb2-1_0.98.1-1_amd64.deb ...
Dépaquetage de libb2-1 (0.98.1-1) ...
Sélection du paquet borgbackup précédemment désélectionné.
Préparation du dépaquetage de .../borgbackup_1.1.9-2_amd64.deb ...
Dépaquetage de borgbackup (1.1.9-2) ...
Paramétrage de libgomp1:amd64 (8.3.0-6) ...
Paramétrage de python3-llfuse (1.3.6+dfsg-1) ...
Paramétrage de python3-msgpack (0.5.6-1+b1) ...
Paramétrage de libb2-1 (0.98.1-1) ...
Paramétrage de borgbackup (1.1.9-2) ...
Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.28-10) ...

2/ Configuration de BORG

La "passphrase" pour sécuriser ses sauvegardes:

#  echo "eEKHzuDeRTuT7gGZCL4Nb" > /root/.borg

Initialisation des sauvegardes

#  borg init -e repokey-blake2 ssh://borg@backup.XXX.net/backup1/interne/debian10-
Enter new passphrase: 
Enter same passphrase again: 
Do you want your passphrase to be displayed for verification? [yN]: y
Your passphrase (between double-quotes): "eEKHzuF69-4T7gGZCL4Nb"
Make sure the passphrase displayed above is exactly what you wanted.
 
By default repositories initialized with this version will produce security
errors if written to with an older version (up to and including Borg 1.0.8).
 
If you want to use these older versions, you can disable the check by running:
borg upgrade --disable-tam ssh://borg@backup.XXX.net/backup1/interne/debian10-
 
See https://borgbackup.readthedocs.io/en/stable/changes.html#pre-1-0-9-manifest-spoofing-vulnerability for details about the security implications.
 
IMPORTANT: you will need both KEY AND PASSPHRASE to access this repo!
Use "borg key export" to export the key, optionally in printable format.
Write down the passphrase. Store both at safe place(s).

Vérification de la connexion au référentiel distant

#  borg list ssh://borg@backup.XXX.net/backup1/interne/debian10-
 
Enter passphrase for key ssh://borg@backup.XXX.net/backup1/interne/debian10-: 

Export de la clés pour réaliser les restaurations!

#  borg key export ssh://borg@backup.XXX.net/backup1/interne/debian10- /root/.borgBACKUP
#  cat /root/.borgBACKUP
BORG_KEY 036622c1c92f41ac379766a1a1337fb489217af20d372d889a3a15fda57c689d
hqlhbGdvcml0aG2mc2hhMjU2pGRhdGHaAZ4rSQBi1chYt7DgIVijhFu5/7j7mv9kL0fWQu
2ujKU0/l531F5+MTQIFLiBAznYXORX6hhGhXBGywvensSauf1BWNbDmf99XWnj6e+1cArX
FRad2G14XIeL+XzCrK4fx11kMfOpLqgwXaHp3IES1g/ZE7+ZDcRCeK2Nm9Bv6TEObyjqWd
XraieTQSTI8DzhqvVEQP+Azjq3G+2b6UlOu7lYQgEPlAnrOvo/SKguRHt9PMG5MnO9GQwz
MbeBTbo2kV41KI09SqgrYHIArOq6rORNAjdRnzYSCoVMM+TxT/4+bvW/O6vX3NGNK3/FUE
n+wU1zyLChfLR1gTVr2XiabOczzM6dhweCiyhGRpPKsyBt9DCuyUlfNVVv1G5OjudOf2fM
hCnZVxHpcroEnQi9sereWIxaTqC4/Czi37XPjTMB5E1D/IFrbgfhMn7vWuz5ttJ8S2LgjU
T+1whYNObYE4hgGGSnUWJhsPFBKnB2bbSJjTfHROXiHawDLuMCA8p1L71J03QQshjW5D6F
ewGS2qPGy5KWvULYrVjJP2J7vlekaGFzaNoAIO9C6IS3zK8g2N2Hj8MU1Z4OSm/WDy9gMX
HZcSoNVONGqml0ZXJhdGlvbnPOAAGGoKRzYWx02gAgjSBKODv4QObU9XQlYpV3ODxgpN+L
JopseYSliCQbvOKndmVyc2lvbgE=

Test de Sauvegarde (optionnel)

borg create --progress --stats ssh://borg@backup.XXX.net/backup1/interne/debian10-::backup-test-tmp /tmp
borg list ssh://borg@backup.XXX.net/backup1/interne/debian10-

Script de sauvegarde

Je mets le script directement dans le CRON journalier:

#  vi /etc/cron.daily/borg

Voici le script

#!/usr/bin/env bash
 
set -e
 
LOG_PATH=/var/log/borg-backup.log
 
export BORG_PASSPHRASE="`cat ~root/.borg`"
BORG_REPOSITORY="ssh://borg@backup.XXX.net/backup1/interne/debian10-"
BORG_ARCHIVE=${BORG_REPOSITORY}::{now:%Y-%m-%d}
 
borg create \
        --verbose --stats \
        $BORG_ARCHIVE \
# Sauvegarde du système
        /etc /var \
# Sauvegarde des données
        /home /data1  \
        --exclude-caches \
        --exclude-nodump \
#        --exclude 
#        --exclude /home/me/tmp --exclude-if-present Trash --exclude-if-present .thumbnails \
        --noatime \
>> ${LOG_PATH} 2>&1
 
# Nettoyage des anciennes sauvegardes
# On conserve
# - une archive par jour les 7 derniers jours,
# - une archive par semaine pour les 6 dernières semaines,
# - une archive par mois pour les 8 derniers mois.
 
borg prune --verbose \
        $BORG_REPOSITORY \
        --keep-daily=7 \
        --keep-weekly=6 \
        --keep-monthly=8 \
>> ${LOG_PATH} 2>&1

Rendre le fichier exécutable :

# chmod +x /etc/cron.daily/borg 


Voici le niveau de restriction qu'il faut pour contraindre BORG client au bon répertoire:

~borg/.ssh/authorized_keys
ssh-rsa XXXX root@debian10-
ssh-rsa XXXX root@debian10--
command="/usr/local/bin/borg serve --restrict-to-path /backup1/interne/HOSTNAME",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc root@debian10-
command="/usr/local/bin/borg serve --restrict-to-path /backup1/interne/HOSTNAME",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc root@debian10--
backup/borg.txt · Dernière modification : 2021/04/08 18:23 de jocelynd