Outils pour utilisateurs

Outils du site


restic_utilitaire_de_sauvegarde

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
restic_utilitaire_de_sauvegarde [2020/03/16 23:54] – créée n1c0restic_utilitaire_de_sauvegarde [2023/10/10 20:41] (Version actuelle) – [Restore] Labomedia
Ligne 1: Ligne 1:
 +======= Restic =======
 +
 +[[https://restic.net/|Restic]] est un programme libre de sauvegarde incrémentale de fichiers.
 +
 La doc est [[https://restic.readthedocs.io/|par ici]]. La doc est [[https://restic.readthedocs.io/|par ici]].
  
-On va considérer qu'on a 2 serveurs, 1 de production (prod), et 1 de sauvegarde (save). On veut sauver les homes du serveur prod, chacune ayant sa propre timeline de sauvegarde. On peut adapter très facilement ce tuto pour sauver une machine sur un disque externe par exemple : il suffit de changer la valeur du paramètre -r qui défini où se trouve le dépôt de sauvegarde (il peut être [[https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html|un peu n'importe où]]).+On va considérer qu'on a 2 serveurs, 1 de production (prod), et 1 de sauvegarde (save). On veut sauver les homes du serveur prod, chacune ayant sa propre timeline de sauvegarde. 
 + 
 +On peut adapter très facilement ce tuto pour sauver une machine sur un disque externe par exemple : il suffit de changer la valeur du paramètre -r qui défini où se trouve le dépôt de sauvegarde (il peut être [[https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html|un peu n'importe où]])
 + 
 +**Important** : Restic utilise massivement les entrées/sorties du disque dur, ce qui ralentit le système pendant les longues sauvegardes. Préférer un SSD s'il y a beaucoup de choses à sauver.
  
 ===== Installation ===== ===== Installation =====
Ligne 12: Ligne 20:
  
 <code bash> <code bash>
-adduser restic+adduser restic
 </code> </code>
  
Ligne 18: Ligne 26:
  
 <code bash> <code bash>
-chown restic: /home/restic && chmod 750 /home/restic+chown restic: /home/restic && chmod 750 /home/restic
 </code> </code>
  
Ligne 24: Ligne 32:
  
 <code bash> <code bash>
-cd /home/restic +cd /home/restic 
-mkdir bin +mkdir bin 
-cd bin +cd bin 
-wget https://github.com/restic/restic/releases/download/v0.9.6/restic_0.9.6_linux_amd64.bz2 +wget https://github.com/restic/restic/releases/download/v0.9.6/restic_0.9.6_linux_amd64.bz2 
-bunzip2 restic_0.9.6_linux_amd64.bz2 +bunzip2 restic_0.9.6_linux_amd64.bz2 
-mv restic_0.9.6_linux_amd64 restic +mv restic_0.9.6_linux_amd64 restic 
-cd .. +cd .. 
-chown -R root:restic bin +chown -R root:restic bin 
-chmod 750 bin/restic+chmod 750 bin/restic
 </code> </code>
  
Ligne 40: Ligne 48:
  
 <code bash> <code bash>
-setcap cap_dac_read_search=+ep /home/restic/bin/restic+setcap cap_dac_read_search=+ep /home/restic/bin/restic
 </code> </code>
  
Ligne 46: Ligne 54:
  
 <code bash> <code bash>
-sudo -u restic /home/restic/bin/restic ... paramètres habituels+sudo -u restic /home/restic/bin/restic ... paramètres habituels
 </code> </code>
  
Ligne 56: Ligne 64:
  
 <code bash> <code bash>
-adduser resticbackup+adduser resticbackup
 </code> </code>
  
Ligne 62: Ligne 70:
  
 <code bash> <code bash>
-mkdir resticrepo && chown -R resticbackup: resticrepo+mkdir resticrepo && chown -R resticbackup: resticrepo
 </code> </code>
  
Ligne 85: Ligne 93:
 <code bash> <code bash>
 # on peut taper  # on peut taper 
-ssh resticbox+ssh resticbox
  
 # au lieu de  # au lieu de 
-ssh resticbackup@XXX.XXX.XXX.XXX -p 22+ssh resticbackup@XXX.XXX.XXX.XXX -p 22
 </code> </code>
  
Ligne 98: Ligne 106:
  
 <code bash> <code bash>
-ssh-keygen -t rsa+ssh-keygen -t rsa
 </code> </code>
  
Ligne 104: Ligne 112:
  
 <code bash> <code bash>
-less .ssh/id_rsa.pub+less .ssh/id_rsa.pub
 </code> </code>
  
Ligne 129: Ligne 137:
 On pourra donc executer la commande **rstc** seulement. On pourra donc executer la commande **rstc** seulement.
  
-__Remarque__ : la RESTIC_PASSWORD contient le mot de passe du dépôt (différent du user resticbackup du server save). Il faudra changer **motDePasse** par sa valeur une fois le dépôt initialisé !+__Remarque__ : la variable RESTIC_PASSWORD contient le mot de passe du dépôt (différent du user **resticbackup** du server de sauvegarde). Il faudra changer **motDePasse** par sa valeur une fois le dépôt initialisé ! (voir plus bas)
  
 Pour que le user root puisse utiliser ce nouvel alias, soit il faut se déconnecter / reconnecter, soit executer la commande : Pour que le user root puisse utiliser ce nouvel alias, soit il faut se déconnecter / reconnecter, soit executer la commande :
  
 <code bash> <code bash>
-source /root/.bashrc+source /root/.bashrc
 </code> </code>
 +
  
 ===== Initialiser le depôt ===== ===== Initialiser le depôt =====
Ligne 142: Ligne 151:
  
 <code bash> <code bash>
-sudo -u restic /home/restic/bin/restic -r sftp:resticbox:/home/resticbackup/resticrepo init+sudo -u restic /home/restic/bin/restic -r sftp:resticbox:/home/resticbackup/resticrepo init
 </code> </code>
  
Ligne 158: Ligne 167:
  
 <code bash> <code bash>
-rstc --verbose backup /home/jeanclaude+rstc --verbose backup /home/jeanclaude
 </code> </code>
  
Ligne 164: Ligne 173:
  
 <code bash> <code bash>
-rstc --verbose backup --tag jeanclaude /home/jeanclaude+rstc --verbose backup --tag jeanclaude /home/jeanclaude
 </code> </code>
  
Ligne 172: Ligne 181:
  
 On peut évidemment restaurer n'importe quel snapshot, mais attention, je recommande de restaurer dans un dossier temp ce que l'on veut récuperer, puis de remplacer les fichiers que l'on veut.  On peut évidemment restaurer n'importe quel snapshot, mais attention, je recommande de restaurer dans un dossier temp ce que l'on veut récuperer, puis de remplacer les fichiers que l'on veut. 
 +
 +Ce dossier temporaire doit appartenir au user restic.
  
 Pour restaurer, on a besoin d'un numéro unique de snapshot. Voir plus bas pour la commande listant les snapshots disponibles. Pour restaurer, on a besoin d'un numéro unique de snapshot. Voir plus bas pour la commande listant les snapshots disponibles.
Ligne 178: Ligne 189:
  
 <code bash> <code bash>
-rstc restore 3054af84 --target /home/jeanclaude/repertoireTemporaire+rstc restore 3054af84 --target /home/jeanclaude/repertoireTemporaire
 </code> </code>
  
Ligne 191: Ligne 202:
 </code> </code>
  
-Ne garder qu'un snapshot par jour sur 7 jours pour un **path** donné (pour 7 jours où il y a une sauvegarde, c-a-d que si la sauvegarde est le dimanche, cela gardera 1 sauvegarde pour chacun des 7 derniers dimanches) :+Ne garder qu'un snapshot par jour sur 7 jours pour un **path** donné (pour 7 jours où il y a une sauvegarde, c-a-d que si la sauvegarde est le dimanche, cela gardera 1 sauvegarde jusqu'au lundi d'avant) :
  
 <code bash> <code bash>
-rstc forget --path="/home/nico" --keep-daily 7 --prune+rstc forget --path="/home/nico" --keep-daily 7 --prune
 </code> </code>
  
Ligne 200: Ligne 211:
  
 <code bash> <code bash>
-rstc forget --tag restic1 --keep-daily 7 --prune+rstc forget --tag restic1 --keep-daily 7 --prune
 </code> </code>
  
Ligne 206: Ligne 217:
  
 <code bash> <code bash>
-rstc forget --group-by tags --keep-daily 7 --keep-weekly 5 --keep-monthly 6 --prune+rstc forget --group-by tags --keep-daily 7 --keep-weekly 5 --keep-monthly 6 --prune
 </code> </code>
  
 +Pour supprimer tous les snapshots d'un tag par exemple, il faut d'abord supprimer tous sauf le dernier, puis supprimer le dernier manuellement en executant le prune qui reconstituera les index et supprimera réellement les données :
 +
 +<code bash>
 +rstc forget --tag montag --keep-last 1
 +rstc forget bdbd3439 --prune
 +</code>
 ===== Commandes utiles ===== ===== Commandes utiles =====
 +
 +==== Mise à jour de Restic ====
 +
 +Lancer la commande de mise à jour puis remettre les bons droits :
 +
 +<code bash>
 +cd /home/restic/bin
 +./restic self-update
 +chown root:restic restic && setcap cap_dac_read_search=+ep /home/restic/bin/restic
 +</code>
  
 ==== Lister les snapshots ==== ==== Lister les snapshots ====
  
 <code bash> <code bash>
-rstc snapshots+rstc snapshots
 </code> </code>
  
Ligne 240: Ligne 267:
  
 <code bash> <code bash>
-rstc check+rstc check
 </code> </code>
  
Ligne 252: Ligne 279:
  
 <code bash> <code bash>
-rstc diff 5845b002 2ab627a6+rstc diff 5845b002 2ab627a6
 </code> </code>
  
 +===== Script de sauvegarde des homes =====
 +
 +Dans l'exemple énoncé au départ, on veut sauvegarder tous les homes d'un serveur de prod, de façon à ce que chaque home ait une timeline séparée.
 +
 +On crée donc un fichier backup-server-homes dans un coin où seul root peut venir et executer ce fichier. Dedans on colle ça (explications ci-dessous) :
 +
 +<code bash>
 +#!/bin/bash
 +
 +for f in /home/*; do
 +        if [ -d ${f} ]; then
 +
 +                sudo RESTIC_PASSWORD='motDePasse' -u restic /home/restic/bin/restic -r sftp:resticbox:/home/resticbackup/resticrepo --verbose backup --tag ${f:6} ${f}
 +
 +        fi
 +done
 +</code>
 +
 +Penser à changer la valeur de RESTIC_PASSWORD par le vrai mot de passe de votre dépôt.
 +
 +Ce que fait ce script est plutôt simple en réalité :
 +
 +  * avec le ''for'' on parcourt tous les fichiers directs de /home
 +  * si le fichier est un dossier, alors :
 +  * on execute la commande restic de backup du dossier home en cours
 +
 +La commande execute :
 +
 +  * en tant que l'utilisateur restic
 +  * l'executable restic
 +  * en donnant l'adresse du dépôt via l'argument -r
 +  * de façon verbeuse
 +  * on veut faire un backup
 +  * on tag ce snapshot avec le nom du dossier du home : ''${f:6}'' veut dire qu'on prend la valeur de la chaine de caractère ''${f}'' a partir du caractère 6, c-a-d qu'on zappe '/home/'
 +  * on lui dit quoi sauvegarder, ''${f}'' contient le path du home en cours, ex : /home/jeanclaude
 +
 +{{tag>n1c0 bash linux utilitaire futuretic}}
restic_utilitaire_de_sauvegarde.1584402849.txt.gz · Dernière modification : 2020/03/16 23:54 de n1c0