Outils pour utilisateurs

Outils du site


backup-telephone

Backup de mon téléphone Android

Depuis le passage à Android 11, Android n'autorise plus les applications à accéder à Android/data, cette procédure n'est donc plus valide. Je procède désormais à un backup par FolderSync (voir en fin de page).

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))

Android 11 : Backup par MTP

Le backup par MTP fonctionne, mais étant horriblement lent, j'ai à nouveau changé ma méthode de backup, en passant par FolderSync (voir plus bas)

Android 11 n'autorisant plus les applications à accéder à Android/data, j'ai dû revenir à un backup par MTP (câble USB). C'est horriblement lent: MTP est très lent pour aller récupérer le contenu d'un répertoire (mais rapide pour transférer un fichier). Mais je n'ai pas le choix.

Voici donc le script que j'utilise:

backup-mtp.sh
#!/bin/bash
cd "${0%/*}"
#Création du repo:  mkdir -p backup-mia3.borg; borg init --encryption=repokey-blake2 backup-mia3.borg
sourcedir='/run/user/1002/gvfs/mtp:host=Xiaomi_Mi_A3_8366d9d2b359'
borgdir=$(pwd)
 
# Backup
cd "$sourcedir"
nice borg create --list --filter=AME -v --progress --compression=zstd,7 --stats --checkpoint-interval 900 --files-cache=mtime,size --exclude-caches -e "Carte SD Samsung/Android/data/net.osmand.plus/files/*.obf" "$borgdir/backup-mia3.borg::{now}" '.'
cd "$borgdir"
 
echo "--- Backup terminé ---"
read

Une autre piste que MTP est d'utiliser adbfs : https://github.com/spion/adbfs-rootless

Android 11 : Backup par FolderSync

Sous Android 11, les applications ne peuvent plus accéder simplement à tout ce qu'il y a dans Android/data. Les serveurs ssh/ftp ne fonctionnent plus correctement par rapport à ça. MTP permet le backup, mais c'est horriblement lent. J'ai donc choisi de passer par FolderSync qui - lui - accède sans problème à Android/data et tout le stockage (interne et sdcard).

FolderSync est une application Android. La version gratuite est déjà très sympa, mais j'ai pris la version payante qui a des fonctions plus avancées.

Je procède donc comme suit:

backup-telephone-foldersync.png

Inconvénient:

  • J'ai une copie complète du contenu du téléphone dans ma partition chiffrée qui prend de la place.
    • J'ai réduit en choisissant de ne pas sauvegarder certains fichiers et répertoires (exemple: Cartes OsmAnd) grâce aux filtres de FolderSync.

Avantage:

  • La synchro du smartphone vers le PC est infiniement plus rapide que par MTP. (Tout est généralement terminé en 5 minutes.). FolderSync se connecte au serveur ssh du PC.
  • Les données du téléphone sur le PC sont embarquées lors des backups réguliers du PC lui-même (avec l'excellent Borg).

Pour faire le backup, je dois:

  • Allumer le PC et ouvrir la partition VeraCrypt.
  • Activer le Wifi sur le smartphone et appuyer sur "Tout synchroniser" dans FolderSync.

Ce n'est pas très contraignant.

À noter:

  • Cela ne sauvegarde que les fichiers.
  • Pour que cela sauvegarde aussi les SMS, contacts, journaux d'appels et agendas, j'ai SuperBackup qui me fait un backup quotidien de tout cela sous forme de fichiers (qui sont alors transférés par FolderSync).
  • J'ai configuré Signal pour qu'il fasse un backup automatique également. FolderSync embarque également le fichier de sauvegarde Signal.

Pour plus d'informations:

EDIT: Vous êtes plusieurs à me parler de SyncThing : Même si l'application est super sympa à utiliser, elle ne me convient pas. Je préfère FolderSync car il est capable de se greffer à n'importe quel serveur existant (ssh, ftp, smb, webdav/NextCloud, et même GoogleDrive, DropBox, etc.). FolderSync possède aussi des fonctions plus poussées (comme le fait de ne se synchroniser que sur certains réseaux Wifi).

backup-telephone.txt · Dernière modification : 2022/02/04 21:03 de sebsauvage