admin:services:backup
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
admin:services:backup [2016/04/18 03:39] – [Restaurer des données] adaptations zertrin | admin:services:backup [2019/09/01 18:44] – Ajout serveurs de sauvegardes herve | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
[[: | [[: | ||
- | <WRAP center round important> | + | <WRAP center round info 60%> |
- | Le nouveau système de sauvegarde utilisant obnam vient d'être mis en place (Zertrin 2016-02-17 00:00). | + | L'ancienne page sur les backups est disponible ici : [[admin: |
+ | </ | ||
- | La doc est en mode release candidate (99 % finie quoi). | ||
- | **UPDATE 2016-04-18 03:00** : avec la disparition | + | <WRAP center round todo 60%> |
+ | En cours de rédaction | ||
+ | PoC : herve & toadjaune | ||
+ | </ | ||
- | :!: **EN PHASE DE TEST** :!: | + | <WRAP center round important 60%> |
+ | Backup en cours de mise en place. | ||
+ | Machines concernées | ||
+ | Priorité donnée à dodecagon | ||
</ | </ | ||
+ | |||
===== Concept de sauvegarde ===== | ===== Concept de sauvegarde ===== | ||
Ligne 18: | Ligne 25: | ||
* des dumps des bases de données MySQL | * des dumps des bases de données MySQL | ||
- | **Obnam** sert à effectuer la sauvegarde proprement dite vers les serveurs de destination. Il gère l' | + | **BorgBackup** (ou Borg) sert à effectuer la sauvegarde proprement dite vers les serveurs de destination. Il gère un historique des versions des sauvegardes ainsi que la déduplication |
+ | |||
+ | ===== Serveurs de sauvegarde ===== | ||
- | ===== Opérations courantes ===== | + | Actuellement, |
+ | * [[admin: | ||
+ | * //VM hébergée par le ResEl (en cours de mise à dispo au 01/09)// | ||
- | <wrap info></ | + | ---- |
- | ==== Faire une sauvegarde | + | ===== Opérations courantes ===== |
- | Exemple depuis hexagon vers quigon : | + | <WRAP center round tip 60%> |
+ | La doc concernant la mise en place initiale se situe plus bas. | ||
+ | </ | ||
- | < | ||
- | ==== Mettre à jour la liste des chemins à sauvegarder | + | ==== Faire une sauvegarde |
- | Voir la sous-section [[admin: | + | TODO |
- | <wrap tip></ | + | ==== Mettre |
+ | TODO | ||
==== Voir les générations (versions) ==== | ==== Voir les générations (versions) ==== | ||
- | Exemple depuis hexagon avec l' | + | TODO |
- | + | ||
- | < | + | |
==== Restaurer des données ==== | ==== Restaurer des données ==== | ||
- | Si dessous quelques exemples testés. | + | TODO |
- | Voir aussi la doc officielle : http:// | + | === Restauration depuis le serveur original === |
- | === Restauration depuis le serveur originel === | + | TODO |
- | + | ||
- | Ce cas se présente lorsque le serveur originel est toujours " | + | |
- | + | ||
- | == Restauration via montage FUSE == | + | |
- | + | ||
- | Exemple depuis hexagon avec l' | + | |
- | + | ||
- | Création d'un dossier pour le point de montage | + | |
- | + | ||
- | < | + | |
- | + | ||
- | montage de l' | + | |
- | + | ||
- | < | + | |
- | + | ||
- | Montre les générations accessibles pour la restauration | + | |
- | + | ||
- | < | + | |
- | + | ||
- | Restauration du fichier / | + | |
- | + | ||
- | < | + | |
- | + | ||
- | Démonter le système de fichier FUSE | + | |
- | + | ||
- | < | + | |
=== Restauration depuis une machine tierce === | === Restauration depuis une machine tierce === | ||
- | Dans le cas où l'on veut restaurer sur une machine X (pas précédemment inclue dans le système des sauvegardes) les données d'une machine A à partir de la sauvegarde effectuée sur la machine B ou C. | + | TODO |
- | * Il faut installer '' | + | ---- |
- | * Il faut au préalable ajouter la clef publique SSH du compte qui sert à effectuer la restauration dans le '' | + | |
- | * Il suffit ensuite d' | + | |
- | * l' | + | |
- | * l' | + | |
- | * l' | + | |
- | + | ||
- | Exemple testé ci-dessous : restauration sur gluon (serveur perso de Zertrin) de données de kdell à partir de la sauvegarde située sur hexagon. | + | |
- | + | ||
- | == Avec FUSE == | + | |
- | + | ||
- | * Ajout de la clef SSH de '' | + | |
- | * Lister les générations disponibles (et en même temps vérifier que la connexion fonctionne) : | + | |
- | + | ||
- | < | + | |
- | + | ||
- | ++++ output | | + | |
- | < | + | |
- | 2 | + | |
- | 23 2016-02-14 23:34:11 .. 2016-02-14 23:36:00 (9018 files, 58471331 bytes) | + | |
- | 65 2016-02-15 00:33:38 .. 2016-02-15 00:34:21 (9209 files, 81373094 bytes) | + | |
- | 87 2016-02-15 01:28:28 .. 2016-02-15 01:29:04 (9147 files, 75389186 bytes) | + | |
- | 108 | + | |
- | 129 | + | |
- | 150 | + | |
- | 171 | + | |
- | 192 | + | |
- | 213 | + | |
- | 234 | + | |
- | 255 | + | |
- | 276 | + | |
- | 297 | + | |
- | 318 | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | * Préparer un point de montage pour le système de fichier FUSE : | + | |
- | + | ||
- | < | + | |
- | + | ||
- | * Monter la sauvegarde via obnam avec FUSE : | + | |
- | + | ||
- | < | + | |
- | + | ||
- | * Vérifier qu'on a bien toutes les générations de dispo dans ''/ | + | |
- | + | ||
- | < | + | |
- | + | ||
- | ++++ output | | + | |
- | < | + | |
- | total 68 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 15 23:46 108 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 01:41 129 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 03:40 150 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 05:40 171 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 07:40 192 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 14 22:57 2 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 09:40 213 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 14 23:36 23 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 11:40 234 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 13:40 255 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 15:40 276 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 17:40 297 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 16 19:41 318 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 15 00:34 65 | + | |
- | drwxr-xr-x 25 root root 4096 Feb 15 01:29 87 | + | |
- | lrwxr-xr-x 25 root root 4096 Feb 16 19:41 latest -> 318 | + | |
- | -r--r--r-- 25 root root 4096 Feb 16 19:41 .pid | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | * Voir le contenu de la génération 42 : | + | |
- | + | ||
- | < | + | |
- | + | ||
- | * Voir le contenu de la dernière génération ('' | + | |
- | + | ||
- | < | + | |
- | + | ||
- | ++++ output | | + | |
- | < | + | |
- | total 28 | + | |
- | drwxr-xr-x | + | |
- | drwxr-xr-x 112 root root 12288 Feb 16 17:53 etc | + | |
- | drwxr-xr-x | + | |
- | drwx------ | + | |
- | drwxr-xr-x | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | * Restaurer le fichier ''/ | + | |
- | + | ||
- | < | + | |
- | + | ||
- | * Démonter la sauvegarde : | + | |
- | + | ||
- | < | + | |
+ | ---- | ||
===== Installation initiale de backupninja ===== | ===== Installation initiale de backupninja ===== | ||
Ligne 260: | Ligne 150: | ||
< | < | ||
- | ===== Mise en place initiale d' | ||
- | |||
- | ==== Prérequis ==== | ||
- | |||
- | * Serveur de départ : '' | ||
- | * Serveur d' | ||
- | |||
- | <wrap info></ | ||
- | |||
- | ==== Installation d' | ||
- | |||
- | Utilisation des dépôts jessie-backports pour avoir une version assez récente. Dans ''/ | ||
- | |||
- | < | ||
- | |||
- | Puis '' | ||
- | |||
- | ==== Préparatifs sur un serveur de destination ==== | ||
- | |||
- | <wrap info></ | ||
- | |||
- | <wrap info></ | ||
- | |||
- | Ajout de l' | ||
- | |||
- | <wrap tip></ | ||
- | |||
- | < | ||
- | quigon ~ # adduser --system --group --disabled-password --shell / | ||
- | </ | ||
- | |||
- | <wrap tip></ | ||
- | |||
- | < | ||
- | quigon ~ # adduser --system --group --disabled-password --shell / | ||
- | </ | ||
- | |||
- | <wrap tip></ | ||
- | |||
- | < | ||
- | kdell~ # adduser --system --group --disabled-password --shell / | ||
- | </ | ||
- | |||
- | On prépare le fichier '' | ||
- | |||
- | < | ||
- | quigon ~ # cd ~obnam | ||
- | quigon ~obnam # sudo -u obnam mkdir .ssh | ||
- | quigon ~obnam # sudo -u obnam touch .ssh/ | ||
- | quigon ~obnam # chmod 600 .ssh/ | ||
- | quigon ~obnam # vim .ssh/ | ||
- | </ | ||
- | |||
- | On teste si la connexion sans mot de passe fonctionne depuis le serveur de départ (ici exemple avec hexagon) et on en profite pour créer le repository pour la sauvegarde (si pas déjà fait). | ||
- | |||
- | < | ||
- | hexagon ~ # sftp obnam@quigon.federez.net | ||
- | sftp> mkdir obnam-repository | ||
- | sftp> ^D | ||
- | </ | ||
- | |||
- | ==== Configuration d' | ||
- | |||
- | Initialisation du répertoire ''/ | ||
- | |||
- | < | ||
- | hexagon ~ # mkdir /etc/obnam && cd /etc/obnam | ||
- | hexagon obnam # touch obnam_hexagon.conf | ||
- | hexagon obnam # touch to_kdell.profile | ||
- | hexagon obnam # touch to_quigon.profile | ||
- | </ | ||
- | |||
- | === Contenu des fichiers de config === | ||
- | |||
- | * Le premier fichier ('' | ||
- | * Les deux fichiers suivants ('' | ||
- | |||
- | <wrap important> | ||
- | |||
- | ++++ config pour hexagon (2016-02-26 12:30) | | ||
- | <file ini obnam_hexagon.conf> | ||
- | [config] | ||
- | client-name = hexagon | ||
- | root = /etc, | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | exclude = .*/ | ||
- | .*/\.cache, | ||
- | / | ||
- | /home/ftp, | ||
- | / | ||
- | /srv/ftp | ||
- | log = / | ||
- | log-level = info | ||
- | log-max = 1000000 | ||
- | log-keep = 10 | ||
- | log-mode = 0600 | ||
- | one-file-system = yes | ||
- | keep = 20h, | ||
- | upload-queue-size = 512 | ||
- | lru-size = 1024 | ||
- | lock-timeout = 900 | ||
- | </ | ||
- | |||
- | <file ini to_kdell.profile> | ||
- | [config] | ||
- | repository = sftp:// | ||
- | </ | ||
- | |||
- | <file ini to_quigon.profile> | ||
- | [config] | ||
- | repository = sftp:// | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ++++ config pour quigon (2016-02-26 12:30) | | ||
- | <file ini obnam_quigon.conf> | ||
- | [config] | ||
- | client-name = quigon | ||
- | root = /etc, | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | exclude = .*/ | ||
- | .*/ | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | log = / | ||
- | log-level = info | ||
- | log-max = 1000000 | ||
- | log-keep = 10 | ||
- | log-mode = 0600 | ||
- | one-file-system = yes | ||
- | keep = 20h, | ||
- | upload-queue-size = 512 | ||
- | lru-size = 1024 | ||
- | lock-timeout = 900 | ||
- | </ | ||
- | |||
- | <file ini to_kdell.profile> | ||
- | [config] | ||
- | repository = sftp:// | ||
- | </ | ||
- | |||
- | <file ini to_hexagon.profile> | ||
- | [config] | ||
- | repository = sftp:// | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ++++ config pour kdell (2016-02-26 12:30) | | ||
- | <file ini obnam_kdell.conf> | ||
- | [config] | ||
- | client-name = kdell | ||
- | root = /etc, | ||
- | / | ||
- | / | ||
- | / | ||
- | / | ||
- | exclude = .*/ | ||
- | .*/ | ||
- | /home/git, | ||
- | / | ||
- | log = / | ||
- | log-level = info | ||
- | log-max = 1000000 | ||
- | log-keep = 10 | ||
- | log-mode = 0600 | ||
- | one-file-system = yes | ||
- | keep = 20h, | ||
- | upload-queue-size = 512 | ||
- | lru-size = 1024 | ||
- | lock-timeout = 900 | ||
- | </ | ||
- | |||
- | <file ini to_hexagon.profile> | ||
- | [config] | ||
- | repository = sftp:// | ||
- | </ | ||
- | |||
- | <file ini to_quigon.profile> | ||
- | [config] | ||
- | repository = sftp:// | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ==== Test première sauvegarde ==== | ||
- | |||
- | Exemple depuis hexagon vers quigon: | ||
- | |||
- | < | ||
- | |||
- | ==== Purger les vieilles générations selon une politique donnée ==== | ||
- | |||
- | L' | ||
- | |||
- | * garder les 20 dernières générations horaires (comme le script est lancé toutes les 4 heures, ca fait garder les générations horaires pour un peu plus de 3 jours (20*4 = 80 heures)) | ||
- | * garder les 30 dernières générations journalières | ||
- | * garder les 52 dernières générations hebdomadaires | ||
- | * garder les 10 dernières générations annuelles | ||
- | |||
- | En appelant la commande suivante une fois par jour, les générations qui sont superflues sont supprimées de l' | ||
- | |||
- | Exemple depuis hexagon avec l' | ||
- | |||
- | < | ||
- | |||
- | ==== Mise en place des cron pour obnam ==== | ||
- | |||
- | Les crons se trouvent dans ''/ | ||
- | |||
- | ++++ Les / | ||
- | |||
- | **hexagon** | ||
- | <file text / | ||
- | PATH=/ | ||
- | 35 1-21/4 * * * root obnam --config / | ||
- | 40 3-23/4 * * * root obnam --config / | ||
- | </ | ||
- | |||
- | **quigon** | ||
- | <file text / | ||
- | PATH=/ | ||
- | 35 1-21/4 * * * root obnam --config / | ||
- | 40 3-23/4 * * * root obnam --config / | ||
- | </ | ||
- | |||
- | **kdell** | ||
- | <file text / | ||
- | PATH=/ | ||
- | 35 1-21/4 * * * root obnam --config / | ||
- | 40 3-23/4 * * * root obnam --config / | ||
- | </ | ||
- | |||
- | ++++ | ||
- | |||
- | |||
- | ++++ Les / | ||
- | |||
- | **hexagon** | ||
- | <file text / | ||
- | PATH=/ | ||
- | 25 0 * * * root obnam --config / | ||
- | 30 2 * * * root obnam --config / | ||
- | </ | ||
- | |||
- | **quigon** | ||
- | <file text / | ||
- | PATH=/ | ||
- | 25 0 * * * root obnam --config / | ||
- | 30 2 * * * root obnam --config / | ||
- | </ | ||
- | |||
- | **kdell** | ||
- | <file text / | ||
- | PATH=/ | ||
- | 25 0 * * * root obnam --config / | ||
- | 30 2 * * * root obnam --config / | ||
- | </ | ||
- | |||
- | ++++ | ||
- | |||
- | < | ||
- | . . . 0 . . . | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | H <- K <- Q . | | ||
- | | ||
- | | backup | ||
- | | ||
- | toutes les 4h | 45 +----------------------------------+ 15 | ||
- | de 3h à 23h | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | H -> K -> Q | ||
- | | ||
- | | backup | ||
- | | ||
- | toutes les 4h ^ | ||
- | de 1h à 21h | ||
- | |||
- | </ | ||
---- | ---- | ||
- | <WRAP center round alert> | + | ===== Mise en place initiale de BorgBackup |
- | Le système de sauvegarde documenté ci-dessous utilisant '' | + | |
- | </ | + | |
- | ====== Duplicity ====== | + | ==== Prérequis |
- | + | * Serveur de départ : '' | |
- | + | * Serveur | |
- | Backup interserveurs en mode push a l'aide de duplicity et son wrapper duplicity-backup. | + | |
- | + | ||
- | * Le wrapper pour duplicity se trouve sous '' | + | |
- | * Les sauvegardes se trouvent sur chaque serveur dans le répertoire ''/ | + | |
- | * La configuration se trouve sous ''/ | + | |
- | * Le shellscript lancé par cron se trouve sous ''/ | + | |
- | + | ||
- | Pour consulter l' | + | |
- | + | ||
- | < | + | |
- | + | ||
- | ==== Situation actuelle ==== | + | |
- | ++++ hexagon → quigon (2015-09-14 21:00) | | + | |
- | <file bash> | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | + | ||
- | EXCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | ++++ hexagon → baldrick (2015-09-14 21:00) | | + | |
- | <file bash> | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | + | ||
- | EXCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | + | ||
- | ++++ quigon → hexagon (2015-09-14 21:00) | | + | |
- | <file bash> | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | + | ||
- | EXCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | ++++ quigon → baldrick (2015-09-14 21:00) | | + | |
- | <file bash> | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | + | ||
- | EXCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | ++++ baldrick → hexagon (2015-06-07 01:00) | | + | |
- | <file bash> | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | + | ||
- | EXCLIST=( "/ | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | ++++ baldrick → quigon (2015-06-07 01:00) | | + | |
- | <file bash> | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | + | ||
- | EXCLIST=( "/ | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | ===== Détails techniques ===== | + | |
- | ==== Mise en place initiale ==== | + | |
- | + | ||
- | FIXME PAS ENCORE ADAPTÉ/MIS EN FORME : ne pas utiliser tel quel ! Mais l' | + | |
- | + | ||
- | :!: Procédure à ne faire que si l'on part de zéro sur tous les serveurs (pas de backups en place) | + | |
- | + | ||
- | ++++ Voir la procédure | | + | |
- | < | + | |
- | nautilus ~ # aptitude install duplicity | + | |
- | nautilus ~ # ssh-keygen -t rsa -b 2048 | + | |
- | nautilus ~ # l / | + | |
- | nautilus ~ # cat / | + | |
- | nautilus ~ # ssh zertrin@quigon.federez.net | + | |
- | zertrin@quigon: | + | |
- | zertrin@quigon: | + | |
- | zertrin@quigon: | + | |
- | zertrin@quigon: | + | |
- | zertrin@quigon: | + | |
- | zertrin@quigon: | + | |
- | zertrin@quigon: | + | |
- | nautilus ~ # sftp duplicity@quigon.federez.net | + | |
- | sftp> mkdir nautilus | + | |
- | sftp> ^D | + | |
- | nautilus ~ # gpg --gen-key | + | |
- | nautilus ~ # gpg --gen-key | + | |
- | nautilus ~ # mkdir scripts && cd scripts | + | |
- | nautilus scripts # git clone git:// | + | |
- | nautilus scripts # cd duplicity-backup | + | |
- | nautilus duplicity-backup (master) # cp duplicity-backup.conf.example / | + | |
- | nautilus duplicity-backup (master) # vim / | + | |
- | nautilus duplicity-backup (master) # ./ | + | |
- | nautilus duplicity-backup (master) # vim / | + | |
- | nautilus duplicity-backup (master) # chmod +x / | + | |
- | </ | + | |
- | ++++ | + | |
- | + | ||
- | ==== Extension sur un nouveau serveur ==== | + | |
- | + | ||
- | :!: Si au moins un des serveurs a déjà été configuré (voir procédure précédente) et qu'on désire préparer un autre serveur pour effectuer des sauvegardes via duplicity-backup. | + | |
- | + | ||
- | ++++ Voir la procédure | | + | |
- | + | ||
- | Pour cette procédure, le nouveau serveur est // | + | |
- | + | ||
- | **Installation de duplicity** | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo aptitude install duplicity | + | |
- | </ | + | |
- | + | ||
- | **Génération | + | |
- | + | ||
- | :!: seulement si nécessaire (pas encore de ''/ | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo ssh-keygen -t rsa -b 2048 | + | |
- | < | + | |
- | baldrick ~$ sudo cat / | + | |
- | < | + | |
- | </ | + | |
- | + | ||
- | **Mise | + | |
- | + | ||
- | Ajout de la clef SSH de root@baldrick aux clef autorisées à se connecter à hexagon avec le login duplicity. | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ ssh zertrin@hexagon.federez.net | + | |
- | hexagon ~$ sudo vim / | + | |
- | < | + | |
- | hexagon ~$ ^D | + | |
- | </ | + | |
- | + | ||
- | On teste si la connexion sans mot de passe fonctionne et on en profite pour créer le dossier de destination de la sauvegarde. | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo sftp duplicity@hexagon.federez.net | + | |
- | sftp> mkdir baldrick | + | |
- | sftp> ^D | + | |
- | </ | + | |
- | + | ||
- | **Récupération du wrapper duplicity-backup.sh** | + | |
- | + | ||
- | Le wrapper est placé dans '' | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo mkdir / | + | |
- | baldrick ~$ sudo git clone git:// | + | |
- | </ | + | |
- | + | ||
- | **Import des clefs GPG de chiffrement | + | |
- | + | ||
- | Pour se simplifier la vie, on importe les données issues d'une [[admin: | + | |
- | + | ||
- | :!: Au préalable, transférer une de ces sauvegardes (.tar.gpg) dans le dossier courant | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ gpg -d duplicity-backup-2013-07-25.tar.gpg | tar x | + | |
- | gpg: données chiffrées avec CAST5 | + | |
- | | + | |
- | </ | + | |
- | + | ||
- | Sinon toute autre méthode pour récupérer les deux clefs privées sous format texte convient aussi :) | + | |
- | + | ||
- | Passons à l' | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo gpg --import duplicity-backup-2013-07-25/ | + | |
- | baldrick ~$ sudo gpg --import duplicity-backup-2013-07-25/ | + | |
- | baldrick ~$ sudo gpg --edit-key 8B97F497 | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | baldrick ~$ sudo gpg --edit-key 9ED0EF7B | + | |
- | < | + | |
- | </ | + | |
- | + | ||
- | **Copie d'une config existante de duplicty-backup et paramétrage** | + | |
- | + | ||
- | Parce que le sysadmin est fainéant, on se contente de copier la config d'un autre serveur et de l' | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo cp / | + | |
- | baldrick ~$ sudo rm -rf / | + | |
- | baldrick ~$ sudo vim / | + | |
- | </ | + | |
- | + | ||
- | Adapter les variables '' | + | |
- | + | ||
- | <file bash duplicity-backup.baldrick_to_hexagon.conf> | + | |
- | ... | + | |
- | DEST=" | + | |
- | ... | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/home" \ | + | |
- | ) | + | |
- | ... | + | |
- | EXCLIST=( | + | |
- | ... | + | |
- | </ | + | |
- | + | ||
- | **Sauvegarde initiale** | + | |
- | + | ||
- | Ceci effectuera la première sauvegarde (complète). | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo / | + | |
- | </ | + | |
- | + | ||
- | Si tout va bien cette sauvegarde apparait dans le résultat de la commande suivante : | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo / | + | |
- | </ | + | |
- | + | ||
- | **Mise | + | |
- | + | ||
- | < | + | |
- | + | ||
- | <file bash duplicity-backup> | + | |
- | #!/bin/sh | + | |
- | test -x / | + | |
- | cd / | + | |
- | LANG=C ./ | + | |
- | </ | + | |
- | + | ||
- | < | + | |
- | + | ||
- | Test du cronjob : | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo / | + | |
- | baldrick ~$ sudo / | + | |
- | </ | + | |
- | + | ||
- | Si tout va bien, bravo c'est fini ! | + | |
- | + | ||
- | ++++ | + | |
- | + | ||
- | ==== Ajout de nouvelles destinations de sauvegarde ==== | + | |
- | + | ||
- | :!: Seulement si le serveur auquel on ajoute une nouvelle destination de sauvegarde a déjà été configuré une première fois (voir procédure ci-dessus). | + | |
- | + | ||
- | ++++ Voir la procédure | | + | |
- | + | ||
- | **Mise en place connexion SFTP par clef SSH vers le serveur de destination** | + | |
- | + | ||
- | Ajout de la clef SSH de root@baldrick aux clefs autorisées à se connecter. | + | |
- | < | + | |
- | baldrick ~$ sudo cat / | + | |
- | < | + | |
- | baldrick ~$ ssh zertrin@quigon.federez.net | + | |
- | quigon ~$ sudo vim / | + | |
- | < | + | |
- | quigon ~$ ^D | + | |
- | </ | + | |
- | + | ||
- | On teste si la connexion sans mot de passe fonctionne et on en profite pour créer le dossier de destination de la sauvegarde. | + | |
- | + | ||
- | < | + | |
- | baldrick ~ # sudo sftp duplicity@quigon.federez.net | + | |
- | sftp> mkdir baldrick | + | |
- | sftp> ^D | + | |
- | </ | + | |
- | + | ||
- | **Copie du fichier de config et paramétrage** | + | |
- | + | ||
- | On crée un fichier de config | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo cp / | + | |
- | baldrick ~$ sudo vim / | + | |
- | </ | + | |
- | + | ||
- | Adapter les variables | + | |
- | + | ||
- | <file bash duplicity-backup.baldrick_to_quigon.conf> | + | |
- | ... | + | |
- | DEST=" | + | |
- | ... | + | |
- | INCLIST=( "/ | + | |
- | "/ | + | |
- | "/ | + | |
- | ) | + | |
- | ... | + | |
- | EXCLIST=( | + | |
- | ... | + | |
- | </ | + | |
- | + | ||
- | **Sauvegarde initiale** | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo / | + | |
- | </ | + | |
- | + | ||
- | Si tout va bien la sauvegarde initiale apparait dans le résultat | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo / | + | |
- | </ | + | |
- | + | ||
- | **Adaptation du cronjob pour effectuer la sauvegarde vers la nouvelle destination** | + | |
- | + | ||
- | < | + | |
- | + | ||
- | <file bash duplicity-backup> | + | |
- | # ajouter cette ligne à la fin | + | |
- | LANG=C ./ | + | |
- | </ | + | |
- | + | ||
- | Test du cronjob : | + | |
- | + | ||
- | < | + | |
- | baldrick ~$ sudo / | + | |
- | baldrick ~$ sudo / | + | |
- | </ | + | |
- | + | ||
- | Si tout va bien, bravo c'est fini ! | + | |
- | + | ||
- | ++++ | + | |
- | ==== Sauvegarde de la config et des clefs de chiffrement ==== | + | |
- | + | ||
- | <WRAP center round important> | + | |
- | **Très important !** Chaque admin technique devrait générer ces sauvegardes pour lui-même et les conserver en lieu sûr (i.e. pas sur les serveurs où elles ont été générées). Sans ces données il sera difficile de restaurer les données. (et même impossible si les clefs GPG sont perdues) | + | |
- | </ | + | |
- | + | ||
- | Ces archives sont générées à l'aide de l'option '' | + | |
- | + | ||
- | Ceci génère une archive TAR chiffrée symétriquement avec GPG. Le mot de passe utilisé est le même pour tous les serveurs et se trouve dans ''/ | + | |
- | + | ||
- | Dans l' | + | |
- | + | ||
- | < | + | |
- | hexagon ~ # / | + | |
- | You are backing up: | + | |
- | 1. / | + | |
- | 2. GPG Secret encryption key: 8B97F497 and GPG secret sign key: 9ED0EF7B | + | |
- | 3. Config file: / | + | |
- | Backup tarball will be encrypted and saved to: / | + | |
- | + | ||
- | >> Are you sure you want to do that (' | + | |
- | yes | + | |
- | Encrypting tarball, choose a password you'll remember... | + | |
- | + | ||
- | IMPORTANT!! | + | |
- | >> To restore these files, run the following (remember your password): | + | |
- | gpg -d duplicity-backup-2013-07-25.tar.gpg | tar x | + | |
- | </ | + | |
- | + | ||
- | ==== Procédure de restauration ==== | + | |
- | + | ||
- | Dans tous les cas il est nécessaire de diposer de la clef de déchiffrement correspondant à la clef GPG '' | + | |
- | + | ||
- | === Restaurer depuis le serveur d' | + | |
- | + | ||
- | On suppose ici le cas où un fichier ou dossier a été modifié ou supprimé par mégarde et qu'on cherche à restaurer celui-ci tel qu'il était auparavant, le tout depuis le serveur d' | + | |
- | + | ||
- | C'est la situation la plus simple car duplicity-backup.sh a déjà été mis en place et est configuré. | + | |
- | + | ||
- | Voici la commande générique : | + | |
- | + | ||
- | < | + | |
- | serveur1 ~ # / | + | |
- | --config / | + | |
- | --restore-file [FILE_TO_RESTORE] [DESTINATION] \ | + | |
- | --time [TIME] | + | |
- | </ | + | |
- | + | ||
- | avec: | + | |
- | + | ||
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * '' | + | |
- | * ''" | + | |
- | + | ||
- | Exemple de restauration du fichier ''/ | + | |
- | / | + | |
- | + | ||
- | < | + | |
- | hexagon ~ #/ | + | |
- | </ | + | |
- | + | ||
- | Exemple de restauration du dossier ''/ | + | |
- | / | + | |
- | + | ||
- | < | + | |
- | baldrick ~ # / | + | |
- | </ | + | |
- | + | ||
- | === Restaurer depuis une autre machine que le serveur d' | + | |
- | On suppose ici que l'on a plus accès au serveur d' | ||
- | On suppose aussi que l'on dispose des éléments suivants : | + | ==== Installation de Borg ==== |
- | * Fichier tar contenant le backup du script et la configuration. Ce fichier est sensé avoir été créé à l'aide de l' | + | TODO |
- | * Passphrase de la clef de chiffrement (à FedeRez c'est la clef GPG '' | + | |
- | :!: Il est très important | + | ==== Configuration |
- | FIXME finir la doc. En attendant voici l' | + | TODO |
- | * Installer duplicity et mettre en place le wrapper duplicity-backup.sh comme documenté ci-dessus. | + | |
- | * Utiliser le fichier de config et les clefs GPG issues de la sauvegarde du script pour restaurer les données de la même manière que documenté dans la section précédente. | + | |
admin/services/backup.txt · Dernière modification : 2020/05/11 01:01 de toadjaune