alpinux.presentations/slides/sauvegardes/script/LISEZMOI.md
Cédrix a04a72054a
Ajouter la sauvegarde automatique sur clé USB
Dès qu'on branche la clé déclarée (reconnue par son UUID), udev demande
à systemd de lancer une sauvegarde rsync des dossiers choisis. Ce qui a
disparu de l'ordinateur est retiré de la clé, mais conservé 30 jours dans
une corbeille datée sur la clé. Notifications de bureau, journal systemd,
garde-fous contre une destination erronée. Installateur, tests sans sudo
et mode d'emploi fournis.

Refs #1
2026-11-05 17:44:54 +01:00

228 lines
10 KiB
Markdown

# Sauvegarde automatique sur clé USB
Petit outil pour **Linux Mint 22** (Cinnamon) : on branche **sa** clé de
sauvegarde, la copie de ses documents démarre toute seule, une notification
dit quand on peut la retirer.
Accompagne la séance Alpinux « Ranger et sauvegarder ses documents ».
## Sommaire
| Pour commencer | Au quotidien | En cas de besoin |
|---|---|---|
| [Pour qui ?](#pour-qui) | [Tester](#tester) | [Restaurer un fichier](#restaurer-un-fichier) |
| [Ce que ça fait](#ce-que-ça-fait) | [Lire le journal](#lire-le-journal) | [Désinstaller](#désinstaller) |
| [Installer (3 commandes)](#installer-en-3-commandes) | [Régler](#régler) | [Limites](#limites-à-connaître) |
| [Trouver l'UUID](#trouver-luuid-de-sa-clé) | | [Comment ça marche](#comment-ça-marche) |
## Pour qui ?
Pour qui veut une copie de ses documents **sans y penser** : on branche la
clé, on attend le message, on la débranche. Il faut savoir ouvrir un
terminal et taper une commande avec `sudo` (une fois, pour l'installation).
## Ce que ça fait
- Seule **la clé déclarée** déclenche la sauvegarde (reconnue par son
identifiant UUID). Une autre clé ne fait rien.
- Le dossier personnel (ou une liste de dossiers) est copié dans
`Sauvegarde/` sur la clé. Les fois suivantes, seul ce qui a changé est
recopié : c'est rapide.
- Ce qui a été **supprimé** de l'ordinateur est retiré de la clé, pour que la
copie reste fidèle.
> **Synchroniser n'est pas sauvegarder.** Une copie « miroir » recopie aussi
> les erreurs : un fichier effacé par mégarde disparaîtrait de la clé au
> branchement suivant. C'est pourquoi, par défaut, **rien n'est effacé d'un
> coup** : ce qui est retiré ou remplacé sur la clé est d'abord mis de côté
> dans `.corbeille/AAAA-MM-JJ_HHMMSS/`, et gardé **30 jours**.
- Notifications : « Sauvegarde en cours… », puis « Sauvegarde terminée,
vous pouvez retirer la clé », ou un message d'erreur (clé pleine…).
- Un fichier `derniere-sauvegarde.txt` à la racine de la clé indique la date
et le résultat de la dernière sauvegarde.
- Ne sont pas copiés : caches (`.cache`), corbeille de l'ordinateur,
miniatures, fichiers temporaires. `Téléchargements` peut être exclu.
## Installer en 3 commandes
Branchez d'abord la clé de sauvegarde, puis dans un terminal :
```bash
git clone --depth 1 https://gitea.alpinux.org/alpinux.cedrica5l/alpinux.presentations.git
cd alpinux.presentations/slides/sauvegardes/script
sudo ./installer.sh
```
(Si `git` manque : `sudo apt install git`.)
L'installateur affiche les clés USB branchées, demande laquelle utiliser et
pour quel utilisateur, puis met tout en place. On peut le relancer sans
risque (changer de clé, mettre à jour) : vos réglages sont conservés.
Ensuite : **débranchez et rebranchez la clé**, la première sauvegarde part.
Elle peut être longue ; les suivantes sont rapides.
Sans questions : `sudo ./installer.sh --uuid E234-70AF --utilisateur marie`
## Trouver l'UUID de sa clé
L'installateur le fait pour vous. Pour le voir vous-même :
```bash
lsblk -o NAME,LABEL,UUID,FSTYPE,SIZE,TRAN
```
Repérez votre clé (colonne `TRAN` = `usb`, taille, nom `LABEL`) : l'UUID est
sur la ligne de la **partition** (`sdb1`…), par exemple `E234-70AF` pour une
clé FAT, ou `3d6f976c-1822-…` pour une clé ext4.
Attention : **reformater la clé change son UUID** ; relancez alors
`sudo ./installer.sh`.
## Tester
```bash
sudo sauvegarde-cle-usb --simulation # montre ce qui serait copié/supprimé, sans rien faire
sudo systemctl start sauvegarde-cle-usb # lance une vraie sauvegarde maintenant
```
Pour vérifier la logique sans clé ni `sudo` (développeurs) :
`./tester-sans-sudo.sh` — un dossier temporaire joue le rôle de la clé.
## Lire le journal
```bash
journalctl -u sauvegarde-cle-usb # tout l'historique
journalctl -u sauvegarde-cle-usb -b # depuis le démarrage
journalctl -u sauvegarde-cle-usb -f # en direct, pendant une sauvegarde
```
Ou plus simplement, ouvrez `derniere-sauvegarde.txt` sur la clé.
## Restaurer un fichier
**Un fichier qui existe encore dans la sauvegarde** : ouvrez la clé dans le
gestionnaire de fichiers, dossier `Sauvegarde/<votre nom>/…`, et copiez le
fichier où vous voulez (copier, pas déplacer).
**Un fichier supprimé ou une ancienne version** : il est dans la corbeille de
la clé, un dossier caché. Dans le gestionnaire de fichiers, appuyez sur
**Ctrl+H** pour voir les dossiers cachés, puis ouvrez `.corbeille/`. Chaque
sous-dossier porte la date de la sauvegarde où le fichier a été retiré
(ex. `2026-11-05_183012`) et reprend l'arborescence de vos dossiers.
Pour chercher un fichier par son nom :
```bash
find /media/$USER/*/.corbeille -iname '*lettre*'
```
**Tout restaurer** (nouvel ordinateur…) : copiez le contenu de
`Sauvegarde/<votre nom>/` dans votre dossier personnel.
## Régler
Tout est dans `/etc/sauvegarde-cle-usb.conf`, commenté :
`sudo xed /etc/sauvegarde-cle-usb.conf`
| Réglage | Rôle | Par défaut |
|---|---|---|
| `SOURCES` | dossiers à sauvegarder | le dossier personnel |
| `DOSSIER_DESTINATION` | dossier sur la clé | `Sauvegarde` |
| `CORBEILLE_JOURS` | durée de conservation de `.corbeille` ; `0` = miroir pur, sans filet (déconseillé) | `30` |
| `EXCLUSIONS` | ce qu'on ne copie pas (enlever le `#` devant `Téléchargements/` pour l'exclure) | caches, corbeille, temporaires |
| `VERIFIER_ESPACE` | vérifier la place libre avant de commencer | `oui` |
Pris en compte au prochain branchement.
## Désinstaller
```bash
sudo ./installer.sh --desinstaller
```
Retire le script, le service, la règle et la configuration. Les copies
présentes sur la clé ne sont pas touchées.
## Limites à connaître
- **Une clé n'est qu'une copie, et elle reste à la maison.** Un cambriolage
ou un dégât des eaux emporte l'ordinateur *et* la clé. Gardez aussi une
copie **ailleurs** (une 2ᵉ clé chez un proche, au travail, ou en ligne).
- **Attendez la notification** « Sauvegarde terminée » avant de retirer la
clé. Retirée en cours de route, la copie est incomplète (elle se
complétera au branchement suivant).
- **Clé FAT32 / exFAT / NTFS** (les clés vendues en magasin) : les documents
sont bien copiés, mais pas les droits Linux ni les liens symboliques
(ignorés, ce n'est pas une erreur). En **FAT32**, pas de fichier de plus de
**4 Go** (signalé par une notification) et certains caractères sont interdits
dans les noms (`: * ? " < > | \`) : ces fichiers-là ne sont pas copiés, la
sauvegarde est dite « avec avertissements » et, par prudence, rien n'est
supprimé de la clé ce jour-là. Pour une copie fidèle, formatez la clé en
**ext4** (Disques ou Formater dans le menu de la clé) — elle ne sera plus
lisible sous Windows.
- **Papiers sensibles** (impôts, banque, santé, pièces d'identité) : une clé
se perd facilement. **Chiffrez-la** (Disques → Formater → « Protégé par mot
de passe (LUKS) »). Après le déverrouillage, le démarrage automatique n'est
pas garanti : lancez alors `sudo systemctl start sauvegarde-cle-usb`, et
choisissez dans l'installateur la ligne `crypt` (clé déverrouillée).
- La corbeille de la clé prend de la place. Si la clé est pleine, supprimez
les plus vieux dossiers de `.corbeille/`.
- Les fichiers en cours d'écriture pendant la copie (base de données de
Thunderbird ou Firefox ouverts…) peuvent être copiés dans un état
incohérent : fermez ces logiciels pour une copie parfaite.
- Si la clé est branchée au démarrage de l'ordinateur, la sauvegarde part
aussitôt, avant même la connexion (sans notification).
## Comment ça marche
```
clé branchée ─► udev reconnaît l'UUID ─► systemd lance sauvegarde-cle-usb.service
─► le script monte la clé sur /run/sauvegarde-cle-usb
─► vérifications ─► rsync ─► purge des vieilles corbeilles
─► sync, démontage ─► notification « vous pouvez retirer la clé »
```
| Fichier (dans ce dossier) | Installé dans |
|---|---|
| `sauvegarde-cle-usb` (le script) | `/usr/local/sbin/` |
| `sauvegarde-cle-usb.conf` (modèle) | `/etc/sauvegarde-cle-usb.conf` |
| `sauvegarde-cle-usb.service` | `/etc/systemd/system/` |
| `99-sauvegarde-cle-usb.rules.modele` | `/etc/udev/rules.d/99-sauvegarde-cle-usb.rules` |
| `installer.sh`, `tester-sans-sudo.sh` | (non installés) |
**Pourquoi udev + systemd ?** udev voit la clé arriver, mais ne doit pas
lancer lui-même une tâche longue (il la tuerait au bout de quelques
secondes) : il demande donc à systemd de démarrer le service, qui tourne
aussi longtemps que nécessaire et écrit dans le journal.
**Pourquoi un montage dédié ?** Quand on branche la clé, Cinnamon (Nemo,
udisks) la monte souvent dans `/media/<utilisateur>/…`, mais pas toujours
(personne de connecté, automontage désactivé) et pas forcément avant le
démarrage de la sauvegarde. Le script monte donc lui-même la clé sur
`/run/sauvegarde-cle-usb`, que Nemo l'ait montée ou non : Linux accepte
plusieurs montages du même système de fichiers. Avantages : le chemin est
toujours le même, les options sont maîtrisées (clé FAT montée au nom de
l'utilisateur), pas de course avec l'automontage, et un « Éjecter » dans Nemo
pendant la copie ne retire que le montage de Nemo, pas celui de la
sauvegarde. Si ce montage échoue, le script réutilise le montage de Nemo
s'il est en écriture. À la fin : `sync` puis démontage de son seul montage
(celui de Nemo reste, la clé reste visible).
**Garde-fous** (une erreur de chemin avec suppression peut effacer des
données) :
- la sauvegarde refuse de partir si la destination n'est pas un sous-dossier
de la clé montée **et** portant l'UUID attendu (même à travers un lien
symbolique) ;
- refus si `SOURCES` est vide, si un dossier source est absent ou **vide**
(disque non monté, dossier chiffré verrouillé : sinon tout serait retiré de
la clé), ou si deux sources portent le même nom ;
- jamais deux sauvegardes en même temps (verrou) ;
- vérification de la place libre avant de commencer ;
- si rsync rencontre une erreur de lecture, il ne supprime rien.
**Options rsync** : clé ext4 → `-aH` (tout est conservé) ;
FAT/exFAT/NTFS → `-rt --modify-window=2` (dates à 2 s près, sans droits) ;
toujours `--delete --one-file-system`, plus
`--backup --backup-dir=.corbeille/<date>` si `CORBEILLE_JOURS` > 0.