Outils pour utilisateurs

Outils du site


backup-telephone

Backup de mon téléphone Android

Pour ceux que cela pourrait intéresser, voici comment je procède pour le backup de mon téléphone. Comme je ne fais absolument aucune confiance aux différents clouds, je n'utilise pas la sauvegarde automatique proposée par Google ou les différents constructeurs. J'effectue la sauvegarde uniquement du téléphone vers mon ordinateur personnel avec les logiciels de mon choix. Le backup n'est pas automatique: il est en lancement manuel.

Ce qui est sauvegardé:

  • La totalité des fichiers du téléphone (stockage interne et MicroSD), ce qui inclue les photos, les fichiers téléchargés, la base Keepass, etc.
    • J'exclue quelques répertoires (caches, miniatures, etc.)
  • Contacts
  • SMS
  • Agenda
  • Logs d'appels

Les paramètres des applications ne sont donc pas sauvegardés (sauf les applications qui enregistrent leurs paramètres sous forme de fichiers).

Logiciels utilisés

Sur le téléphone:

Sur l'ordinateur:

  • sshfs
  • borg (voir BorgBackup)
  • un script maison (voir ci-dessous)

Principe

  • Quotidiennement, automatiquement, SuperBackup effectue une sauvegarde des contacts/sms/agendas sous forme de fichiers dans la mémoire interne du téléphone.
  • Toutes les semaines, manuellement:
    • Je lance primitive ftpd sur le téléphone.
    • Je lance mon script sur l'ordinateur.

Cela ne fait que 2 actions simples à effectuer pour lancer le backup, une fois par semaine.

Fonctionnement: Mon script monte (via sshfs) le stockage du téléphone exposé par primitive ftpd dans un répertoire. Puis borg vient faire la sauvegarde de ce répertoire (ce qui embarque également les fichiers de sauvegarde contacts/sms/agenda créés par SuperBackup).

Préparation

Avant que le script soit utilisable, il faut paramétrer un certain nombre de choses:

  • SuperBackup est paramétré pour sauvegarder les contacts, SMS et agenda sous forme de fichier stockés dans la mémoire du téléphone (stockés dans /storage/emulated/0/SmsContactBackup/…)
  • primitive ftpd est configuré (port d'écoute, login, mot de passe…). Je l'ai configuré en mode “Ancien système de fichiers classique”.
  • Sur l'ordinateur, un repo borg est créé (mkdir backup-telephone.borg ; borg init --encryption=none backup-telephone.borg/)

Avantages/inconvénients

J'ai parfaitement conscience que ce mode de backup n'est pas adapté à tout le monde, puisqu'il nécessite deux actions manuelles pour lancer un backup. Cela implique une certaine discipline.

Mais il a l'avantage:

  • de ne pas dépendre de serveurs extérieurs (disponibilité, débit, confidentialité…)
  • de ne pas balader les données sur internet (je passe uniquement en LAN)
  • d'être très efficace en matière de stockage (grâce à la compression et déduplication de Borg).
  • de permettre de récupérer un fichier effacé il y a plusieurs mois (grâce à l'historisation de borg)

Script

Voici le script que j'utilise (certaines informations confidentielles ont bien entendu été modifiées).

backup.sh
#!/bin/bash
cd "${0%/*}"
mkdir -p mount
 
if [ ! -d "mount/emulated/0/Android" ]; then
    echo "Montage du répertoire distant..."
    echo "motdepasse" | sshfs admin@192.168.0.13:/storage mount -p 11222 -o password_stdin
fi
 
if [ ! -d "mount/emulated/0/Android" ]; then
    echo "Montage incorrecte. Arrêt du backup."
    exit
fi
 
# Backup borg du téléphone (CC1D-1527/ = carte MicroSD ; emulated/0/ = mémoire interne du téléphone)
borg create --list --filter=AME -v --progress --compression zstd,7 --stats --files-cache=ctime,size --exclude-caches backup-telephone.borg::{now} mount/CC1D-1527/ mount/emulated/0/ 
 
# Démontage une fois le backup terminé:
fusermount -u mount
 
# Purge des backups si vous le souhaitez:
#borg prune -v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=12 backup-telephone.borg/
 
echo "--- Backup terminé ---"
read

À noter:

  • L'adresse IP (192.168.0.13), port (11222), login (admin) et mot de passe (motdepasse) sont bien entendu à adapter à votre cas (dans la ligne sshfs)
  • Le nom du dossier de la MicroSD (CC1D-1527) sera à adapter à votre carte MicroSD.
  • Le premier backup sera bien entendu très long, puisque borg va devoir ramener tous les fichiers. Les backups suivants seront plus rapides (quelques minutes, selon la quantité de fichiers ajoutés/modifiés).
  • Il n'est pas utile de sauvegarder certains dossiers du téléphone (caches, miniatures…). Si vous ne voulez pas qu'un dossier soit sauvegardé, copiez le fichier suivant dans le répertoire. Ce répertoire (et ses sous-répertoires) ne seront alors pas sauvegardés par Borg (grâce à l'option --exclude-caches):
CACHEDIR.TAG
Signature: 8a477f597d28d172789f06886806bc55

Explication de toutes les options de la ligne de commande borg utilisée:

  • create : on créé un backup
  • --list : on affiche chaque fichier sauvegardé
  • --filter=AME : on affiche que les fichiers ajoutés et modifiés.
  • -v : verbose pour que borg dise ce qu'il fait.
  • --progress : affiche la progression du backup (permet de voir quels répertoire borg est en train de balayer)
  • --compression zstd,7 : Compression avec l'algorithme zstd (la compression est assez forte, mais plus rapide que le taux de transfer par wifi)
  • --stats : afficher des statistiques à la fin du backup. Regadez en particulier la ligne This archive, colonne Deduplicated size : C'est la quantité de données dont votre backup borg a augmenté.
  • --files-cache=ctime,size: pour savoir si un fichier est à examiner, borg regarde par défaut l'inode (si l'inode a changé, il va lire le contenu du fichier). Or les inodes ne sont pas constants en sshfs, ce qui ferait des transfers de fichiers inutiles et une perte de temps. On utilise donc seulement ctime (change time) et taille.
  • --exclude-caches : on exclue les répertoires contenant le fameux fichier CACHEDIR.TAG.
  • backup-telephone.borg::{now} : on sauvegarde dans le répertoire backup-telephone.borg, et le backup a comme nom la date courante (exemple: 2020-08-23T13:48:04)
  • mount/CC1D-1527/ mount/emulated/0/ : Les répertoies à sauvegarder. Avec sshfs nous avons monté le répertoire /storage du téléphone dans mount/
    • CC1D-1527/ correspond à la carte MicroSD. Chez vous, elle portera sans doute un nom différent. Notez que Primitive ftpd ne vous laisse l'accès qu'en lecture à ce répertoire.
    • emulated/0/ correspond à la mémoire interne du téléphone. Notez que Primitive ftpd ne vous autorise pas l'accès à emulated/ mais qu'il vous autorise bien l'accès à emulated/0/ (en écriture).

Questions/FAQ/idées

  • Pourquoi pas en utilisant adb ? Parce que adb n'a aucune option pour faire un backup juste de ce qui a été modifié. C'est du full à chaque fois, bien trop lent.
  • On pourrait très bien automatiser en utilisant un script cron sur le PC qui vérifie la présence du téléphone sur le LAN pour déclencher son backup, mais cela impliquerait d'avoir primitive ftpd lancé en permanence, ce qui n'est probablement pas une bonne idée (Bien qu'on puisse restreindre les IP (ou plages d'IP) des clients dans primitive ftp).
  • À améliorer: Signal fait un backup par jour, et garde 2 jours de backup. On pourrait exclure un des deux fichiers du backup hebdomadaire pour perdre moins de place.
  • Si vous voulez juste faire un miroir (non compressé, non versionné) du téléphone vers l'ordinateur, rsync sera plus beaucoup plus rapide que sshfs+borg. (Je ne sais pas si primitive ftpd est compatible avec rsync, mais SSHelper (un autre serveur ssh) l'est. Il faut juste ajouter l'option -zz à rsync pour que ça passe))
backup-telephone.txt · Dernière modification: 2020/09/04 10:43 de sebsauvage