Outils pour utilisateurs

Outils du site


Panneau latéral

Vie de l'asso

Outils de travail

Bureau

Communication

Adminsys

Réseau

Services

ADSL/VDSL

WiFi

VPN

Hébergement de machines

Législatif et politique

Matériels

Transparence

Café vie privée

backup

Sauvegardes

Mise en place

Intro

Les backups sont effectués à l'aide de borgbackup et sont déployés via notre playbook Ansible

Les secrets sont stockés dans un trousseau Keyringer. Comme le niveau des prérequis à l'exécution des rôles de sauvegarde est assez haut, on vous a préparé un petit script afin de vérifier très rapidement si votre machine est configurée correctement :

# dans le dépot adminsys:
python3 verification.py

Il est important de noter que l'ensemble des adminsys ne peuvent pas déployer les backups de toutes les machines de FAImaison. Le prérequis pour pouvoir déployer un backup c'est de pouvoir lire les secrets de la machine à sauvegarder dans Keyringer : si t'es pas admin de la machine t'es pas sensé pouvoir accéder à ces informations: simple.

Étape 1 : configurer les sauvegardes de la machine que l'on veut sauvegarder

Editez ou créez le fichier de configuration dans le host_vars de votre machine (par exemple host_vars/toto.faimaison.net/toto_backups.yml):

Cet exemple sauvegarde vers UN serveur, mais on peut aussi choisir de lister plusieurs cibles dans la liste borg_client_targets.

borg_client_targets:
  - # OBLIGATOIRE : serveur où on souhaite envoyer nos sauvegardes. ce serveur doit être membre du groupe ansible "borg_servers"
    remote_server: "serveur-destination-sauvegardes.faimaison.net"
 
    # FACULTATIF : chemins à sauvegarder 
    # (en plus des chemins déjà listés dans le base_source_path de group_vars/borg_clients.yml)
    extra_source_paths:
      - "/srv/transparency/"
      - "~postgres/etherpad.sql"
 
    # FACULTATIF : liste de fichiers/dossier à exclure
    # par défaut, utilisera la valeur dans "group_vars/borg_clients.yml"
    exclude_patterns: "{{ borg_clients_common_exclude_paths }}"
 
    # FACULTATIF : ici on a une liste de commandes à exécuter avant de lancer la sauvegarde.
    # dans cet exemple, on fera les dump de base de données par exemple
    before_backup_commands:
      -  "sudo -i -u postgres pg_dump -U postgres -F p etherpad > ~postgres/etherpad.sql"
 
    # FACULTATIF : ici on a une liste de commande à exécuter après la sauvegarde, 
    # typiquement on fera un peu de nettoyage (supprimer les dump de base de données)
    after_backup_commands:
        - "rm -f ~postgres/backup-etherpad.sql"
 
    # RECOMMANDÉ : ici on définit quand le backup démarre. 
    # Il est recommandé de réfléchir à un horaire où la machine est au repos
    # syntaxe et variables cron classique https://docs.ansible.com/ansible/latest/modules/cron_module.html
    when:
        hour: "1"
        minute: "0"

Étape 2 : ajouter la machine à sauvegarder au groupe borg_clients

Dans ansible_hosts ajouter la machine à sauvegarder au groupe borg_clients.

Étape 3 : jouer le rôle sur la machine à sauvegarder

ansible-playbook -K --diff -l toto.faimaison.net -t borg-client playbook-fma.yml

Étape 4: ajouter aux serveurs de sauvegarde la nouvelle machine à sauvegarder

Mettre à jour la variable une entrée à la variable borg_server_backup_clients dans group_vars/borg_servers.yml:

borg_server_backup_clients:
  - name: "toto"  # nom de la machine à sauvegarder
    ssh_pubkey: ""  # clef de sauvegarde (contenue dans ssh/borg-keys/toto.faimaison.net.pub)

Étape 5 : vérifier que tous les serveurs de backups sont dans le groupe backup_servers

Dans ansible_hosts vérifier que le groupe backup_servers connait bien toutes les machines de backups de faimaison.

Étape 6 : jouer le role sur les backup_servers

Il faut avoir accès au serveur de sauvegarde visé pour pouvoir effectuer cette étape… Ou bien la faire faire par quelqu'un qui y a accès.

Si avertissement car catalogue apt périmé sur le serveur de sauvegarde, sudo apt update -o Acquire::Check-Valid-Until=false sur ce dernier.

Solution long terme : mettre à niveau carlota :-p.

Jocelyn 2020/10/06 00:25

ansible-playbook --diff -K -l borg_servers -t borg-server playbook-fma.yml

Procédures manuelles

Ces procédures nécessitent que les sauvegardes aient été configurées conformément aux sections précédentes, et les infos bien commitées dans le dépôt adminsys.

PROCÉDURE : Récupérer d'une sauvegarde plantée (lock)

On prend ici l'exemple de la machine bambelle.faimaison.net, qui pousserait ses sauvegardes sur la machine carlota.faimaison.net. Il faudra adapter les noms de fichiers au cas réel…

On peut avoir ce genre de message remonté par cron dans un mail par exemple :

Remote: borg.locking.LockTimeout: /var/borg-backups/repos/bambelle/lock

Cela veut dire qu'une sauvegarde a crashée, et par prudence un « lock » est laissé… Et empêche toute sauvegarde ultérieure m(. À moins qu'un processus borg soit toujours en cours d'exécution (sudo ps aux|grep borg pour s'en assurer), il faut « casser » le lock pour que les sauvegardes puissent reprendre :

On commence par ouvrir un « shell borg » avec toutes les variables d'env définies((plus d'infos avec --help)).

user@bambelle $ sudo /opt/borgbackup-client/carlota.faimaison.net_bambelle.sh -c
[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ #

On vérifie ensuite qu'on est bien bloqué par le lock

[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # borg list $REPOSITORY
[… snip : l'erreur est très longue]
Remote: borg.locking.LockTimeout: /var/borg-backups/repos/bambelle/lock.exclusive
[…]

Il a pas l'air content ! À condition qu'aucun autre process borg ne tourne, on "casse" le lock

[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # borg break-lock $REPOSITORY

Puis on vérifie que ça va mieux :

[borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$  # borg list $REPOSITORY
bambelle-2020-05-17-02-00            Sun, 2020-05-17 02:00:11
bambelle-2020-05-24-02-00            Sun, 2020-05-24 02:00:10
bambelle-2020-05-31-02-00            Sun, 2020-05-31 02:00:11
bambelle-2020-06-07-02-00            Sun, 2020-06-07 02:00:10
bambelle-2020-06-08-02-00            Mon, 2020-06-08 02:00:10
bambelle-2020-06-09-02-00            Tue, 2020-06-09 02:00:11
bambelle-2020-06-10-02-00            Wed, 2020-06-10 02:00:10
bambelle-2020-06-11-02-00            Thu, 2020-06-11 02:00:10
bambelle-2020-06-12-02-00            Fri, 2020-06-12 02:00:10
bambelle-2020-06-13-02-00            Sat, 2020-06-13 02:00:11
bambelle-2020-06-14-02-00            Sun, 2020-06-14 02:00:10

La prochaine sauvegarde devrait pouvoir s'effectuer comme il faut. Si on ne veut pas attendre, on peut aussi créer une sauvegarde manuelle (cf ci-après).

PROCÉDURE : Créer une sauvegarde manuellement

Avant certaines opérations délicates, on peut souhaiter réaliser une sauvegarde manuelle.

  1. se connecter sur la machine à sauvegarder
  2. passer root sudo su
  3. Exécuter le script de sauvegarde /opt/<machine_source>_<machine_cible>.sh

PROCÉDURE : Récupérer totalement une sauvegarde depuis la machine concernée

Cette procédure restaure l'intégralité d'une sauvegarde, en écrasant éventuellement des fichiers en place sur la machine. Pour faire plus fin, regarder la doc de borg extract ou utiliser borg mount qui permet de monter une sauvegarde distante pour l'examiner ou y piocher quelques fichiers.

  1. se connecter sur la machine à sauvegarder
  2. passer root sudo su
  3. Exécuter le script de sauvegarde /opt/<machine_source>_<machine_cible>.sh /opt/<machine_source>_<machine_cible>.sh -c
  4. lister les sauvegardes disponibles :
    [borg@carlota.faimaison.net:repos/bambelle ]$  # borg list $REPOSITORY
    bambelle-2020-05-17-02-00            Sun, 2020-05-17 02:00:11
    bambelle-2020-05-24-02-00            Sun, 2020-05-24 02:00:10
    bambelle-2020-05-31-02-00            Sun, 2020-05-31 02:00:11
    bambelle-2020-06-07-02-00            Sun, 2020-06-07 02:00:10
    bambelle-2020-06-10-02-00            Wed, 2020-06-10 02:00:10
    bambelle-2020-06-11-02-00            Thu, 2020-06-11 02:00:10
    bambelle-2020-06-12-02-00            Fri, 2020-06-12 02:00:10
    bambelle-2020-06-13-02-00            Sat, 2020-06-13 02:00:11
    bambelle-2020-06-14-02-00            Sun, 2020-06-14 02:00:10
    bambelle-2020-10-04-02-00            Sun, 2020-10-04 02:00:09
    bambelle-2020-10-05-02-00            Mon, 2020-10-05 02:00:11

    Repérer le nom de l'archive qui nous intéresse, par exemple bambelle-2020-10-05-02-00.

  5. Repasser root (en conservant les variables d'environnement), pour avoir le droit de restaurer la sauvegarde dans le système de fichiers.
    [borg@carlota.faimaison.net:repos/bambelle ]$  # su
  6. Se rendre à la racine (sinon on va restaurer notre sauvegarde dans un sous-dossier)
    root@bambelle # cd /
  7. Lancer la restauration de l'archive choisie.
root@bambelle # borg extract $REPOSITORY::bambelle-2020-10-05-02-00

Des opérations supplémentaires peuvent ensuite être nécessaire selon le type de fichiers restaurés (ex: restaurer un fichier .sql dans une base).

PROCÉDURE : Récupérer une sauvegarde depuis une autre machine

On doit récupérer :

  • le dépôt borg qui contient les sauvegardes de la machine
  • la passphrase du dépôt

Le dépôt (repository) est contenu sur le serveur de sauvegarde ((actuellement, carlota -- //Jocelyn 2020/10/05 23:53//)) dans le répertoire /var/borg-backups/repos/.

On va imaginer qu'on veut récupérer les sauvegardes de la machine bambelle.faimaison.net dans le cas ou celle-ci aurait-été détruite.

  1. Récupérer le dossier /var/borg-backups/repos/bambelle depuis le serveur de sauvegarde (par ex en demandant gentiment à un·e admin du serveur de sauvegarde). Ici on va considérer qu'on le stocke en local dans ~/repo_bambelle
  2. Récupérer la passphrase du dépôt et la stocker dans la variable qui va bien :
    BORG_PASSPHRASE=$(keyringer fma-machines decrypt noyau/bambelle.faimaison.net/borg/repository_passphrase.asc)
  3. Lister les archives contenues dans le dépôt :

    $ borg list ~/repo_bambelle
    bambelle-2020-05-17-02-00            Sun, 2020-05-17 02:00:11
    bambelle-2020-05-24-02-00            Sun, 2020-05-24 02:00:10
    bambelle-2020-05-31-02-00            Sun, 2020-05-31 02:00:11
    bambelle-2020-06-07-02-00            Sun, 2020-06-07 02:00:10
    bambelle-2020-06-10-02-00            Wed, 2020-06-10 02:00:10
    bambelle-2020-06-11-02-00            Thu, 2020-06-11 02:00:10
    bambelle-2020-06-12-02-00            Fri, 2020-06-12 02:00:10
    bambelle-2020-06-13-02-00            Sat, 2020-06-13 02:00:11
    bambelle-2020-06-14-02-00            Sun, 2020-06-14 02:00:10
    bambelle-2020-10-04-02-00            Sun, 2020-10-04 02:00:09
    bambelle-2020-10-05-02-00            Mon, 2020-10-05 02:00:11
  4. Créer un dossier pour extraire l'archive de ton choix et l'extraire

    $ mkdir ~/restauration
    $ cd ~/restauration
    $ borg extract ~/repo_bambelle

Il est aussi possible d'utiliser borg mount au lieu de borg extract pour examiner/picorer l'archive plutôt que de l'extraire d'un bloc.

backup.txt · Dernière modification: 2020/10/06 00:28 de jocelynd