[Solution: Backup avec réplications] pour PI/NUC en local et multi-clouds

J’ai trouvé ma solution, elle est basée sur 2 composants du même développeur:

  • Auto-backup pour gérer les sauvegardes et leur rétention
  • rclone backup pour gérer la duplication des sauvegardes sur d’autres support, y compris cloud.

(A ne pas confondre avec un autre dépôt appelé rclone GitHub - ViViDboarder/hassio-addon-rclone: An rclone addon to sync snapshots to a remote device )


1/ Auto Backup me permet de :

  • faire des sauvegardes journalière partielles que je conserve 7 jours (7 versions)
  • faire des sauvegardes hebdomadaires full que je garde 1 mois (4 versions)

via 2 automatisations:

  • journalière:
alias: Maintenance Backup - 02H00 - Full Backup Daily not Monday 7 copies
description: ""
trigger:
  - platform: time
    at: "02:00:00"
condition:
  - condition: time
    weekday:
      - tue
      - wed
      - thu
      - fri
      - sat
      - sun
action:
  - service: auto_backup.backup_full
    data:
      name: "DailyBackup: {{ now().strftime('%A, %B %-d, %Y') }}"
      keep_days: 7
      exclude:
        folders:
          - share
          - media
mode: single
  • hebdomadaire:
alias: Maintenance Backup - 02H00 - Full Backup Monday 4 copies
description: ""
trigger:
  - platform: time
    at: "02:00:00"
condition:
  - condition: time
    weekday:
      - mon
action:
  - service: auto_backup.backup_full
    data:
      name: "WeeklyBackup: {{ now().strftime('%A, %B %-d, %Y') }}"
      keep_days: 28
mode: single

2/ rclone backup

image

rclone est un superbe utilitaire qui permet de gérer des fichiers (synchronisation/copie/suppression/etc.) sur tout type de support local (local, Samba, ftp ou cloud (Google, Amazon, pcloud, etc.)

Rclone helps you:

  • Backup (and encrypt) files to cloud storage
  • Restore (and decrypt) files from cloud storage
  • Mirror cloud data to other cloud services or locally
  • Migrate data to the cloud, or between cloud storage vendors
  • Mount multiple, encrypted, cached or diverse cloud storage as a disk
  • Analyse and account for data held on cloud storage using lsf, ljson, size, ncdu
  • Union file systems together to present multiple local and/or cloud file systems as one

Je l’utilise pour synchroniser mes backup en local sur un PC Windows via SAMBA et à distance sur un cloud pcloud avec chiffrement des données.

Concrètement:

  • je synchronise (sync) mon répertoire /backup sur un PC Windows via SAMBA. J’ai une automatisation Home Assistant qui fait un WOL (Wake-On-LAN) qui réveille le PC avant la sauvegarde, ceci n’étant pas géré par rclone.
  • je copie (copy) mes sauvegardes qui vont être chiffrées (crypt) à la volée sur pcloud en conservant 7 jours les fichiers journaliers et 30 jours les fichiers hebdomadaires
  • je supprime (delete) les versions qui ont plus de x jours

L’installation n’est plas des plus triviales car elle nécessite 2 étapes:

  • créer le fichier rclone.conf (à placer dans /config) qui définit les périphériques de stockage
  • créer les jobs rclone (synchronistaion, copie, suppression) entre tous les supports.

Personellement, j’ai installé rclone (un simple exécutable Rclone downloads ) sous Windows pour créer le fichier rclone.conf via la commande rclone rcd --rc-web-gui

rclone.conf:

[smb_mediacenter]
type = smb
host = 192.168.100.111
user = medianet
pass = Dxxxxxxxxxxxx8973JbjD9hs9Y5r

[pcloud]
type = pcloud
username = email@provider.fr
token = {"access_token":"KLJDxxxxxxxxxxxxkjl_lkdkljd","token_type":"bearer","expiry":"0001-01-01T00:00:00Z"}
hostname = api.pcloud.com

[pcloud_crypt]
type = crypt
remote = pcloud:/
directory_name_encryption = false
password = LG-lxkljekjekJZKxxxxxxxxxxxkjEKljElkje3
filename_encryption = off

J’ai recopié le fichier rclone.conf (voir la commande rclone cong file pour le répertoire) dans le répertoire /config de HA

J’ai paramétré le job rclone sous HA de la façon suivante (référence pour la syntaxe à utiliser):

- name: Sync Daily & Weekly Backups mediacenter
  schedule: 01 04 * * *
  command: sync
  sources:
    - /backup
  destination: smb_mediacenter:/d/sauvegardes
  include: []
  exclude: []
  flags: {}
- name: Copy Daily & Weekly Backups pcloud & pcloud crypt
  schedule: 02 04 * * *
  command: copy
  sources:
    - /backup
  destinations:
    - pcloud:/sauvegardes_ha_sync
    - pcloud_crypt:/sauvegardes_ha_sync_crypt
  include: []
  exclude: []
  flags:
    "--max-age": 7d
- name: Delete pcloud Daily Backups > 7 days
  schedule: 00 05 * * *
  command: delete
  sources:
    - pcloud:/sauvegardes_ha_sync
  include:
    - DailyBackup*.tar
  exclude: []
  flags:
    "--min-age": 7d
    "--ignore-case": null
- name: Delete pcloud crypt Daily Backups > 7 days
  schedule: 00 05 * * *
  command: delete
  sources:
    - pcloud_crypt:/sauvegardes_ha_sync_crypt
  include:
    - DailyBackup*.tar
  exclude: []
  flags:
    "--min-age": 7d
    "--ignore-case": null
- name: Delete pcloud Weekly Backups > 30 days
  schedule: 05 05 * * *
  command: delete
  sources:
    - pcloud:/sauvegardes_ha_sync
  include:
    - DailyBackup*.tar
  exclude: []
  flags:
    "--min-age": 30d
    "--ignore-case": null
- name: Delete pcloud crypt Weekly Backups > 30 days
  schedule: 05 05 * * *
  command: delete
  sources:
    - pcloud_crypt:/sauvegardes_ha_sync_crypt
  include:
    - DailyBackup*.tar
  exclude: []
  flags:
    "--min-age": 30d
    "--ignore-case": null

Voilà, cette solution fait exactement ce que je voulais avec beaucoup de souplesse.

L’interface rclone:

NOTE: J’ai testé DUPLICATI qui semblait faire le job mais qui sauvegarde les fichiers sous un format propriétaire, ce qui ne me convenait pas.