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
228 lines
10 KiB
Markdown
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.
|