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: * https://connect.ed-diamond.com/Linux-Pratique/LP-098/Ne-procrastinez-plus-vos-sauvegardes-grace-a-Borg3 * https://linuxfr.org/news/installer-borgbackup-sur-un-nas * https://sebsauvage.net/wiki/doku.php?id=borgbackup * https://jstaf.github.io/2018/03/12/backups-with-borg-rsync.html ===== 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: [[http://rsnapshot.org/|rsnapshot]], [[https://github.com/bit-team/backintime|BackInTime]], [[https://github.com/teejee2008/timeshift|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: [[http://www.nongnu.org/rdiff-backup/|rdiff-backup]], [[http://duplicity.nongnu.org/|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: [[https://www.borgbackup.org/|BorgBackup]], [[https://bup.github.io/|bup]], [[https://www.duplicati.com/|duplicati]]... Attention aux bases de données et autres applications consistantes"! Il faut faire un [[backup:bdd|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 [[adminsys:partition|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, 4 106 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: === 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--