Les backups pour l'infra Colibris


Sources : Doc borgmatic officielle, doc de Luc Didry, référence commandes borgmatic

Sur le serveur à backuper

Ajout des infos ssh de Globenet

vi /root/.ssh/config


Host *
  IgnoreUnknown UseKeychain
  AddKeysToAgent yes
  UseKeychain yes

Host <nom alias exemple : globenet>
HostName <hostname exemple : be-heb.globenet.org>
Port <port ssh exemple : 22 >
User <user ssh>
IdentitiesOnly yes
IdentityFile <chemin vers la clé>


on met la clé échangée avec Globenet dans le home qui va bien
puis on rentre le mot de passe pour qu'il le garde en mémoire
eval `ssh-agent`
ssh-add -k /root/.ssh/id_rsa


une autre solution serait d'avoir une passphrase vide
ssh-keygen -p -f /root/.ssh/id_rsa


Install de borgmatic


apt install borgbackup python3-pip -y
pip3 install borgmatic # pour maj de borgmatic faire `sudo pip3 install --upgrade borgmatic`
generate-borgmatic-config # création du fichier de conf
vi /etc/borgmatic/config.yaml # ajustements aux besoins du serveur colibris voir ci dessous
validate-borgmatic-config #  # vérification du fichier de conf


Changements notables dans /etc/borgmatic/config.yaml (à adapter a chaque serveur), ATTENTION les "..." ne sont pas à copier, ils indiquent des parties non modifiées du fichier de config original
...
location:
    # List of source directories to backup (required). Globs and
    # tildes are expanded.
    source_directories:
        - /home
        - /etc
        - /var/www

    # Paths to local or remote repositories (required). Tildes are
    # expanded. Multiple repositories are backed up to in
    # sequence. See ssh_command for SSH options like identity file
    # or port.
    repositories:
   		# on utilise l'alias configuré dans /root/.ssh/config et le nom du serveur comme repo
        - ssh://globenet/srv/backups/colibris/ivanillitch
        
...

    # Où on évite de sauvegarde les fichiers temporaires et le cache
    
    # Any paths matching these patterns are included/excluded from
    # backups. Globs are expanded. (Tildes are not.) Note that
    # Borg considers this option experimental. See the output of
    # "borg help patterns" for more details. Quote any value if it
    # contains leading punctuation, so it parses correctly.
    # patterns:
        # - R /
        # - '- /home/*/.cache'
        # - + /home/susan
        # - '- /home/*'
        - */tmp/
        - */log/
        - */cache/

...

""<span id="TOC_1_5" class="yeswiki-title-anchor"></span>""# Repository storage options. See
======https://borgbackup.readthedocs.io/en/stable/usage/create.html and
""<span id="TOC_1_9" class="yeswiki-title-anchor"></span>""# https://borgbackup.readthedocs.io/en/stable/usage/general.html for
======details.
storage:
...
    encryption_passphrase: "<mettre une passphrase de ouf que personne ne trouvera jamais>"
...
    # Command to use instead of "ssh". This can be used to specify
    # ssh options.  Defaults to not set.
    ssh_command: ssh -i <chemin vers la clé privée ssh>
...
   
retention:
...
    # Number of daily archives to keep.
    keep_daily: 7

    # Number of weekly archives to keep.
    keep_weekly: 4

    # Number of monthly archives to keep.
    keep_monthly: 3
...
consistency:
    # List of one or more consistency checks to run: "repository",
    # "archives", "data", and/or "extract". Defaults to
    # "repository" and "archives". Set to "disabled" to disable
    # all consistency checks. "repository" checks the consistency
    # of the repository, "archives" checks all of the archives,
    # "data" verifies the integrity of the data within the
    # archives, and "extract" does an extraction dry-run of the
    # most recent archive. Note that "data" implies "archives".
    checks:
         - repository
         - archives
...
    # Restrict the number of checked archives to the last n.
    # Applies only to the "archives" check. Defaults to checking
    # all archives.
    check_last: 3
...
hooks:
...
    mysql_databases:
        # Database name (required if using this hook). Or
        # "all" to dump all databases on the host. Note
        # that using this database hook implicitly enables
        # both read_special and one_file_system (see
        # above) to support dump and restore streaming.
        # on sauve toutes les bases
        - name: "all"
...
          # Username with which to connect to the database.
          # Defaults to the username of the current user.
          username: root

          # Password with which to connect to the database.
          # Omitting a password will only work if MySQL is
          # configured to trust the configured username
          # without a password.
          password: "<mot de passe root de mysql pour avoir toutes les dbs>"

          # Additional mysqldump options to pass directly to
          # the dump command, without performing any
          # validation on them. See mysqldump documentation
          # for details.
          options: --skip-comments
...


Premier backup crash test

Init de repository
borgmatic init -e repokey


Premier lancement du backup
borgmatic --verbosity 1 --files


Mise en place du cron

rajout d'une tâche CRON
crontab -e  # a faire en tant que root


pour un démarrage à 3h15
15 3 * * * PATH=$PATH:/usr/bin:/usr/local/bin /usr/local/bin/borgmatic --verbosity -1 --syslog-verbosity 1


Commandes borgmatic utiles

Lister les archives du repo
borgmatic list


Lister de maniere compacte les archives du repo
borgmatic list --short --last 1

la chaine de carctère entre [ ] représente l'ID de la sauvegarde

Lancement d'une session de sauvegarde
borgmatic create --progress --stats --files


Restaurer une sauvegarde
borgmatic mount --archive [NOMDELARCHIVE] --mount-point /root/RestoreBackups

le nom de l'archive etant de la forme <nomserveur-date> exemple : ivanillitch-2022-01-24T02:15:04.683566

Une fois le backup copié/recupéré, faire un
borgmatic umount --mount-point /root/RestoreBackups


En cas d'erreur Failed to create/acquire the lock /srv/backups/colibris/ivanillitch/lock (timeout). s'assurer que rien ne tourne et faire
borgmatic borg break-lock