Export des sauvegardes BackupPC sur disques externes USB chiffrés

Benjamin Renard 005e23ba27 Correction d'une coquille dans la doc 3 years ago
README.md 005e23ba27 Correction d'une coquille dans la doc 3 years ago
backup-usb 889b8f2e6b Correction d'une erreur dans la redirection de STDOUT vers le fichier de log 3 years ago
backuppcfs fe225f17b1 Initial commit 3 years ago
run-bkp-usb ae57511269 Ajout de la possibilité de lancer manuellement l'export sur un disque déjà branché 3 years ago
udev-bkp-usb fe225f17b1 Initial commit 3 years ago

README.md

Export des sauvegardes BackupPC sur disques externes USB chiffrés

Installation

  • Installer les dépendances :
apt-get install inoticoming cryptsetup beep libfuse-perl util-linux
  • mettre les fichiers suivant dans /usr/local/sbin :

    • backup-usb
    • backuppcfs
    • udev-bkp-usb
    • run-bkp-usb
  • créer les dossiers /mnt/backuppcfs et /mnt/usb :

mkdir /mnt/backuppcfs /mnt/usb
  • créer le fichier /etc/udev/rules.d/99-bkp-usb.rules :
# A l'insertion du disque, lancement du script de backup
# Rechargement des regles udev manuellement si necessaire : `udevadm control --reload-rules`
  
# Exemple :
#   Disk 1
#   ACTION=="add", ENV{DEVTYPE}=="disk", ENV{ID_FS_UUID}=="41fc79d3-25fd-4424-9fc8-92479deead27", RUN+="/usr/local/sbin/udev-bkp-usb"
  • lancer la commande :
udevadm control --reload-rules
  • ajouter les lignes suivantes dans le fichier /etc/rc.local :
# Run backup on USB device detection (trigger by udev rule)
inoticoming --logfile /var/log/bkp-usb.log /var/run/ --stderr-to-log --stdout-to-log --regex '^bkp-usb-detected$' /usr/local/sbin/run-bkp-usb \;
  • lancer manuellement la commande inoticoming du fichier précédent (ou rebooter)

  • mettre en place la rotation du fichier de log en créant le fichier /etc/logrotate.d/backup-usb :

    /var/log/bkp-usb.log {
        rotate 7
        weekly
        compress
        missingok
        notifempty
    }
    

Création du mot de passe de et la clé LUKS

pwgen -1 -y 40 > /root/.luks.pwd
dd if=/dev/urandom of=/root/.luks.key bs=1024 count=4
chmod 0600 /root/.luks.pwd /root/.luks.pwd

Creation d'un disque USB

  • brancher le disque sur le serveur puis se connecter en tant que root au serveur
  • détecter le nom qu'a pris le disque (en regardant le résultat de la commande dmesg par exemple), par exemple /dev/sdg
  • formater le disque :
cryptsetup -q --use-urandom luksFormat /dev/sdg /root/.luks.pwd
cryptsetup luksAddKey /dev/sdg /root/.luks.key --key-file /root/.luks.pwd
  • "Ouvrir" le disque chiffré :
cryptsetup luksOpen /dev/sdg bkp-usb --key-file /root/.luks.key
  • Formater le disque chiffré en ext4 :
mkfs.ext4 /dev/mapper/bkp-usb
tune2fs -i0 -c0 -m0 /dev/mapper/bkp-usb
  • Fermer le disque chiffré :
cryptsetup close bkp-usb
  • Récupérer l'identifiant UUID du disque :
udevadm info -q all /dev/sdg|grep 'ID_FS_UUID='

Exemple :

root@bkphost:~# udevadm info -q all /dev/sdg|grep 'ID_FS_UUID='
E: ID_FS_UUID=41fc79d3-25fd-4424-9fc8-92479deead27
  • Ajouter l'exécution automatique de l'export des backups pour ce disque dans le fichier le règle udev /etc/udev/rules.d/99-bkp-usb.rules :
# Disk X
ACTION=="add", ENV{DEVTYPE}=="disk",
ENV{ID_FS_UUID}=="41fc79d3-25fd-4424-9fc8-92479deead27",
RUN+="/usr/local/sbin/udev-bkp-usb"
  • Recharger les règles UDEV :
udevadm control --reload-rules
  • Débrancher puis re-brancher le disque une première fois pour vérifier qu'il est bien détecter et que le premier export (long) soit lancé.

Note : A des fins de tests, il est possible de simuler l'exécution du script /usr/local/sbin/udev-bkp-usb par UDEV de la manière suivante :

ACTION=add DEVTYPE=disk DEVNAME=/dev/sdg /usr/local/sbin/udev-bkp-usb

Lancer manuellement l'export des sauvegardes sur un disque USB déjà branché

Vous pouvez utiliser le script run-bkp-usb pour lancer manuellement l'export des sauvegardes sur un disque USB déjà branché :

Usage : /usr/local/sbin/run-bkp-usb [device]
   device		To manually run export, provide the USB Drive device path

Exemple :

run-bkp-usb /dev/sdc

Voir l'état actuel d'un export

Vous pouvez utiliser le paramètre -s du script backup-usb pour voir l'état actuel d'un export :

# backup-usb -s
2017-04-21 - 10h52m54s -- [INFO] Fichier de lock present
2017-04-21 - 10h52m54s -- [INFO] Un export de sauvegarde est en cours (commande rsync détectée)
2017-04-21 - 10h52m54s -- [INFO] Disque LUKS ouvert
2017-04-21 - 10h52m54s -- [INFO] Disque LUKS monté
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/bkp-usb  3.6T  1.2T  2.5T  31% /mnt/usb
2017-04-21 - 10h52m54s -- [INFO] BackupPC-FS monté

Ouvrir et monté un disque USB chiffré manuellement

Si vous avez besoin de voir ce qu'un de vos disques USB chiffrés contient, vous pouvez utiliser le paramètre -o du script backup-usb :

backup-usb -o -u /dev/sdc

Le disque chiffré USB sera ouvert et monté dans son point de montage habituel (/mnt/usb par défaut). Le fichier de lock sera positionné et vous pourrez démonter et fermer le disque USB chiffré une fois fini à l'aide du paramètre -c du script backup-usb :

backup-usb -c

Lancer une vérification du système de fichiers d'un disque USB chiffré

En cas de doute ou de problème avec le système de fichier d'un disque USB, vous pouvez utiliser le paramètre -f du script backup-usb :

backup-usb -f -u /dev/sdc

Le disque USB chiffré sera ouvert et un fsck sera lancé sur le système de fichiers qu'il contient. Une fois terminé et si le fsck s'est bien terminé, le disque USB chiffré sera fermé.