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

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
restic_utilitaire_de_sauvegarde [2020/03/16 23:59] n1c0restic_utilitaire_de_sauvegarde [2023/10/10 20:41] (Version actuelle) – [Restore] Labomedia
Ligne 1: Ligne 1:
-====== Restic ======+======= Restic =======
  
 [[https://restic.net/|Restic]] est un programme libre de sauvegarde incrémentale de fichiers. [[https://restic.net/|Restic]] est un programme libre de sauvegarde incrémentale de fichiers.
Ligne 9: Ligne 9:
 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 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ù]]).
  
-====== Installation ======+**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 =====
  
 Il faut l'installer sur le serveur prod, pas besoin sur le serveur save. Ce dernier doit néanmoins accepter le protocole SFTP (très souvent activé par défaut car directement lié au SSH). Il faut l'installer sur le serveur prod, pas besoin sur le serveur save. Ce dernier doit néanmoins accepter le protocole SFTP (très souvent activé par défaut car directement lié au SSH).
Ligne 18: Ligne 20:
  
 <code bash> <code bash>
-adduser restic+adduser restic
 </code> </code>
  
Ligne 24: 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 30: 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 46: 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 52: 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>
  
-====== Configuration ======+===== Configuration =====
  
-===== Sur le serveur de save =====+==== Sur le serveur de save ====
  
 Créer un nouvel utilisateur **resticbackup** : Créer un nouvel utilisateur **resticbackup** :
  
 <code bash> <code bash>
-adduser resticbackup+adduser resticbackup
 </code> </code>
  
Ligne 68: Ligne 70:
  
 <code bash> <code bash>
-mkdir resticrepo && chown -R resticbackup: resticrepo+mkdir resticrepo && chown -R resticbackup: resticrepo
 </code> </code>
  
-===== Sur le serveur de prod =====+==== Sur le serveur de prod ====
  
-==== Déclarer l'hôte serveur de save ====+=== Déclarer l'hôte serveur de save ===
  
 Afin de pouvoir se connecter au serveur de save sans avoir à taper toutes l'adresse avec le port, on va définir un hôte en ajoutant à la fin du fichier **/etc/ssh/ssh_config** (on appelle cet hôte : resticbox) : Afin de pouvoir se connecter au serveur de save sans avoir à taper toutes l'adresse avec le port, on va définir un hôte en ajoutant à la fin du fichier **/etc/ssh/ssh_config** (on appelle cet hôte : resticbox) :
Ligne 91: 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>
  
-==== Config SSH ====+=== Config SSH ===
  
 Pour permettre à l'utilisateur restic de pouvoir se connecter en SSH au serveur de save sans avoir à donner le mot de passe à chaque fois, on va lier les 2 serveurs avec une clef RSA publique. Pour permettre à l'utilisateur restic de pouvoir se connecter en SSH au serveur de save sans avoir à donner le mot de passe à chaque fois, on va lier les 2 serveurs avec une clef RSA publique.
Ligne 104: Ligne 106:
  
 <code bash> <code bash>
-ssh-keygen -t rsa+ssh-keygen -t rsa
 </code> </code>
  
Ligne 110: Ligne 112:
  
 <code bash> <code bash>
-less .ssh/id_rsa.pub+less .ssh/id_rsa.pub
 </code> </code>
  
Ligne 122: Ligne 124:
 </code> </code>
  
-==== Raccourci de commande ====+=== Raccourci de commande ===
  
 Pour l'utilisateur root, on va ajouter un alias de commande pour pas avoir à taper toute la longue commande executant restic en tant que l'utilisateur restic. Pour l'utilisateur root, on va ajouter un alias de commande pour pas avoir à taper toute la longue commande executant restic en tant que l'utilisateur restic.
Ligne 135: 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 =====
  
 Maintenant que tout est configuré, il faut initialiser le dépôt (sans utiliser l'alias rstc car il n'y a pas de mot de passe au dépôt encore ! ) : Maintenant que tout est configuré, il faut initialiser le dépôt (sans utiliser l'alias rstc car il n'y a pas de mot de passe au dépôt encore ! ) :
  
 <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 155: Ligne 158:
 Cela demandera de définir un mot de passe pour le dépôt : attention à bien le conserver, s'il est perdu, c'est foutu :) Idéalement, utiliser uniquement des caractères alphanumériques (a-z et 0-9) sans caractères spéciaux : puisqu'il faut mettre ce mot de passe dans la commande alias du fichier .bashrc, il ne doit pas faire sauter les paramètres de la commande. Cela demandera de définir un mot de passe pour le dépôt : attention à bien le conserver, s'il est perdu, c'est foutu :) Idéalement, utiliser uniquement des caractères alphanumériques (a-z et 0-9) sans caractères spéciaux : puisqu'il faut mettre ce mot de passe dans la commande alias du fichier .bashrc, il ne doit pas faire sauter les paramètres de la commande.
  
-====== Backup ======+===== Backup =====
  
 On peut tout a fait utiliser notre alias **rstc** maintenant que le dépôt est initialisé. On peut tout a fait utiliser notre alias **rstc** maintenant que le dépôt est initialisé.
Ligne 164: Ligne 167:
  
 <code bash> <code bash>
-rstc --verbose backup /home/jeanclaude+rstc --verbose backup /home/jeanclaude
 </code> </code>
  
Ligne 170: Ligne 173:
  
 <code bash> <code bash>
-rstc --verbose backup --tag jeanclaude /home/jeanclaude+rstc --verbose backup --tag jeanclaude /home/jeanclaude
 </code> </code>
  
 Pour tagger un snapshot dejà fait, voir [[https://restic.readthedocs.io/en/stable/manual_rest.html#manage-tags|la doc]]. Pour tagger un snapshot dejà fait, voir [[https://restic.readthedocs.io/en/stable/manual_rest.html#manage-tags|la doc]].
  
-====== Restore ======+===== Restore =====
  
 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 184: Ligne 189:
  
 <code bash> <code bash>
-rstc restore 3054af84 --target /home/jeanclaude/repertoireTemporaire+rstc restore 3054af84 --target /home/jeanclaude/repertoireTemporaire
 </code> </code>
  
-====== Suppression de snapshots ======+===== Suppression de snapshots =====
  
 [[https://restic.readthedocs.io/en/stable/060_forget.html|Doc sur les options de la commande]]. [[https://restic.readthedocs.io/en/stable/060_forget.html|Doc sur les options de la commande]].
Ligne 197: 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 206: 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 212: 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>
  
-====== Commandes utiles ======+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 :
  
-===== Lister les snapshots =====+<code bash> 
 +rstc forget --tag montag --keep-last 1 
 +rstc forget bdbd3439 --prune 
 +</code> 
 +===== 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 ====
  
 <code bash> <code bash>
-rstc snapshots+rstc snapshots
 </code> </code>
  
Ligne 243: Ligne 264:
 </code> </code>
  
-===== Checker intégrité du dépôt =====+==== Checker intégrité du dépôt ====
  
 <code bash> <code bash>
-rstc check+rstc check
 </code> </code>
  
Ligne 255: Ligne 276:
 </code> </code>
  
-===== Différences entre 2 snapshots =====+==== Différences entre 2 snapshots ====
  
 <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.txt · Dernière modification : 2023/10/10 20:41 de Labomedia