Sauvegardes (encore !) et restitution
Ben oui, ce sujet mâintĂ©resse car je suis motivĂ© par la prĂ©servation de ce que je considĂšre comme prĂ©cieux dans les donnĂ©es que je crĂ©e ou rĂ©cupĂšre sur mon PC. En tant que bidouilleur jâai moi aussi crĂ©Ă© un outil pour cela. Il correspond Ă mon besoin et j'en suis satisfait. Voici mon cheminement.
Jâai fait une recherche sur LinuxFR.org avec le mot sauvegarde et jâai trouvĂ© des articles et des rĂ©actions toutes trĂšs intĂ©ressantes. Les besoins, les solutions, les mises en Ćuvre sont trĂšs variĂ©es. Chacun choisit ou crĂ©e selon son ressenti et finit par ĂȘtre satisfait de ce quâil fait. Chacun partage son expĂ©rience, en espĂ©rant quâelle profitera Ă dâautres. Ă mon tour.
Le meilleur outil de sauvegarde est celui quâon utilise et en lequel on a confiance.
Je te propose un jeu : demande Ă un utilisateur de PC, smartphone⊠si la destruction inopinĂ©e de son appareil entraĂźnerait des pertes de fichiers irrĂ©mĂ©diables qui pourraient lâaffecter (photos familiales, documentsâŠ). Demande ensuite sâil fait des copies et/ou des sauvegardes. Pour beaucoup, tu seras cataloguĂ© comme vilain geek alarmiste. Il y a du travail de prise de conscience !
Sommaire
- Notion de sauvegarde
- Que demande-t-on Ă un outil de sauvegarde ?
- Un script shell écrit sur un coin de table (au début)
- Scripts bash tzsauv
- Subtilités et piÚges
- Conclusion
Notion de sauvegarde
Une analyse trÚs courte de la fonction sauvegarde serait « ranger quelque part des données qui permettront de restituer ce que je considÚre comme précieux ».
Les mots clés sont « ranger » « quelque part » « données » « restituer » « précieux ».
On a deux verbes « ranger » « restituer », deux localisations de données « quelque part » « ce qui est précieux », et une notion de filtrage dans le mot « précieux ».
Un autre point de vue serait de dire quâune information prĂ©cieuse doit rĂ©sider en deux endroits, pour que la dĂ©faillance de lâun puisse ĂȘtre compensĂ©e par lâautre. Une des consĂ©quences consiste Ă doubler les archivages : la libĂ©ration des espaces prĂ©cieux par la suppression de donnĂ©es inactives doit ĂȘtre prĂ©cĂ©dĂ©e de lâarchivage des donnĂ©es Ă supprimer vers deux supports distincts. Une autre consĂ©quence est dâutiliser un mĂ©dia spĂ©cifique pour recevoir les sauvegardes (autre que celui oĂč sont les donnĂ©es Ă sauver).
La dĂ©faillance peut ĂȘtre de plusieurs origines : matĂ©rielle, corruption du mĂ©dia, utilisateur qui efface/Ă©craseâŠ
Que demande-t-on Ă un outil de sauvegarde ?
Si je rédigeais un cahier des charges pour un outil de sauvegarde, je ferais les listes suivantes. Je suis dans mon contexte de PC isolé, ayant accÚs éventuellement à un petit serveur sur le réseau local.
Fonctionnalités de base :
- sauver juste ce qui a été modifié depuis la sauvegarde précédente => opération rapide,
- compression des fichiers archives => prend peu de place sur lâespace de sauvegarde,
- facile à lancer et rapide en exécution => sera lancé souvent => sécurisation accrue,
- filtrage => possibilitĂ© de conserver dans les espaces sauvĂ©s des fichiers qui nâencombreront pas les sauvegardes,
- robuste => confiance.
Fonctionnalités nécessaires :
- vĂ©rification de lâintĂ©gritĂ© des fichiers archives engendrĂ©s,
- restitution facile malgré le grand nombre de fichiers archives à exploiter,
- restitution qui permette de rĂ©gĂ©nĂ©rer (ailleurs) lâespace sauvegardĂ© dans le mĂȘme Ă©tat que ce quâil Ă©tait au moment dâune des opĂ©rations de sauvegarde (accĂšs aux Ă©tats antĂ©rieurs),
- recherche/extraction de fichiers dans le grand nombre de fichiers archives obtenus,
- traçage pour vérifier le bon déroulement des opérations.
On peut ajouter aussi :
- algorithme ouvert et source fourni,
- qui sâaccommode de tous types de support de stockage,
- qui utilise des formats standard,
- qui a toutes ses fonctionnalités accessibles en ligne de commande.
Le dernier point permettra dâutiliser lâoutil comme une commande classique. On pourra le lancer dans un script bash qui adaptera lâusage au besoin spĂ©cifique du moment (ajout de montage/dĂ©montage du mĂ©dia de sauvegarde, rsync
rĂ©seau des fichiers gĂ©nĂ©rĂ©sâŠ). Câest une commoditĂ© qui me manque quand je suis coincĂ© dans lâusage dâun outil cliquodrome.
Un script shell écrit sur un coin de table (au début)
Jâai rencontrĂ© le shell lors de mon premier contact avec Unix, en 1987. Au dĂ©but jâai eu le sentiment de rĂ©gresser par rapport Ă la syntaxe COM des Vax/VMS. Depuis, jâai appris Ă apprĂ©cier le bash, bien plus commode que ses ancĂȘtres sh csh. Une des philosophies du shell est de combiner des commandes simples et robustes pour en faire une rĂ©ponse Ă un besoin. Par exemple ls | wc -l
renvoie le nombre de fichiers/rĂ©pertoires du rĂ©pertoire courant. Toutefois, il y a des cas sournois oĂč le rĂ©sultat est faux, on verra plus loin ce que je qualifie de piĂšges.
Avec les pipelines, les redirections, les variables, les traitements de chaĂźnes de caractĂšres, et tout le reste, on peut construire Ă lâinfini des sĂ©quences dâopĂ©rations qui sâappuient sur des commandes simples Ă lancer mais puissantes (genre outil de compression, outil de parcours dâune arborescence de fichiersâŠ). Beaucoup des fonctionnalitĂ©s du systĂšme GNU sont construites comme cela. Un bidouilleur systĂšme ne peut pas ignorer le bash. En plus, emacs permet un accĂšs trĂšs commode aux man. Je nâai jamais eu de projet ou de besoin qui me pousse Ă maĂźtriser Perl ou Python. Je pense quâils sont encore plus puissants que bash.
Comme jâaime bien bidouiller, Ă la fin du 20e siĂšcle jâavais dans lâidĂ©e de faire un outil de sauvegarde basique qui sâappuie sur un pipeline : une commande find
qui sélectionne les fichiers modifiés, tar
pour les copier et gzip
pour compresser. Jâai fait divers essais. En 2021, je mây suis mis sĂ©rieusement et jâai dĂ©couvert beaucoup de subtilitĂ©s du bash.
Un des problĂšmes des sauvegardes incrĂ©mentales est de deviner si un fichier doit ĂȘtre sauvĂ©, sans avoir Ă comparer son contenu avec la version sauvĂ©e derniĂšrement (ça coĂ»te trop cher). Il faut se baser sur les paramĂštres du systĂšme de fichiers. Il faut bien choisir ces paramĂštres (on surveille leur changement), au risque de rater certains fichiers ou alors dâen sĂ©lectionner trop. Je me suis arrĂȘtĂ© sur la date de modification du statut et le numĂ©ro d'inode.
Scripts bash tzsauv
Je pense ĂȘtre arrivĂ© au bout des spĂ©cifications avec lâoutil tzsauv que jâai Ă©crit en bash. Il est disponible sur mon site.
Je mâen sers quotidiennement. Selon les jours, jâenvoie les fichiers archives sur le 2á” disque ou sur clĂ© USB. Je fais aussi un miroir du rĂ©pertoire disque des fichiers archives vers GoogleDrive (ceinture et bretelles). Je fais aussi une sauvegarde Ă longue pĂ©riodicitĂ© (six mois) sur une clĂ© USB dĂ©diĂ©e (double ceinture).
Les opérations principales utilisent les commandes standard find
sed
tar
zstd
md5sum
, le bash sert Ă enchaĂźner tout ça et sert aux dialogues. Pour installer, il suffit de copier deux scripts sur le mĂ©dia de sauvegarde (SauverTZ_ProjXY_01.bash tzsauv.bash, total 96k, ajouter Ă©ventuellement lâaide Alire.txt), et modifier quelques paramĂštres dans lâun des scripts (le script lanceur SauverTZ_*.bash). Le lancement peut se faire en ligne de commande ou via lâexplorateur de fichiers par Clic-Droit/Actions/LancerDansKonsole.
LâinterprĂ©tation du bash prend des ressources, mais je pense quâelles sont nĂ©gligeables par rapport Ă celles prises par les E/S et les commandes standard citĂ©es ci-dessus. Le compresseur zstd semble ĂȘtre trĂšs performant, en temps et en taux de compression. De plus, il est multithread, ce qui lui permet de tirer avantage des processeurs actuels qui gagnent en puissance en augmentant le nombre de cĆurs. Le paramĂ©trage de tzsauv permet de choisir parmi plusieurs formats dâarchives.
Pour la sauvegarde vers le 2e disque, jâai copiĂ© sur le Bureau le lanceur de Konsole, puis jâai renommĂ© la copie et dans ses PropriĂ©tĂ©s/Application jâai modifiĂ© lâargument (-e ./SauverTZ_ProjXY_01.bash) et le dossier de travail. Du coup, avec juste un double-clic je lance la sauvegarde en mode interactif (-> question « ⊠TOTALE o/n/q ? »). Elle est pas belle la vie ?
Subtilités et piÚges
Je fais rĂ©guliĂšrement des petits programmes bash pour explorer des dĂ©tails de fonctionnement soit du bash, soit des commandes. Les man ont beau ĂȘtre dĂ©taillĂ©s, ils ne peuvent pas tout dire. Pour un bug de tar
je suis allĂ© jusquâĂ consulter le source C, le corriger par plaisir et vĂ©rifier que câĂ©tait OK. La remontĂ©e du bug nâa pas abouti (personne nâutilise lâoption -u
de tar
! Câest de la tĂ©trapilectomie, je suis xyloglotte mais pas encore alopĂ©cique).
Si tu lances sous bash ls | wc -l
puis touch -- 'a'$'\n''b'
puis de nouveau ls | wc -l
, le nombre renvoyĂ© aura augmentĂ© de deux alors que tu nâas ajoutĂ© quâun seul fichier. Câest normal car le nom du fichier ajoutĂ© tient sur deux lignes ! Solution : ls -q | wc -l
ou ls --zero | tr '\n\0' '\0\n' | wc -l
. Pour voir le résultat de ls -q
envoyé à wc -l
via le pipeline, entrer ls -q | cat
.
Les deux seuls caractÚres interdits dans les noms de fichiers/répertoires *unix* sont « / » et « \0 » (à méditer).
Je tâinvite Ă crĂ©er sous bash un fichier piĂšge par echo "abcd" > $' xyza\x01b\x02c\x03d\x04e\x05f\x06g\x07h\x08i\x09j\x0ak\x0bl\x0cm\x0dn\x0eo\x0fESC\x1bDEL\x7f\x80\xff\x26\x22\x27\x60\x5c SPC '
, à le sauver avec ton outil, puis à le restituer. Tu verras si ça passe et si le nombre de fichiers est correct. Pour le détruire rm -i *xyza*
devrait convenir.
Essaye aussi avec un sous-répertoire mkdir $' xyzp\x01b\x02c\x03d\x04e\x05f\x06g\x07h\x08i\x09j\x0ak\x0bl\x0cm\x0dn\x0eo\x0fESC\x1bDEL\x7f\x80\xff\x26\x22\x27\x60\x5c SPC '
. Mets-y un fichier, puis fais une sauvegarde totale, modifie le fichier et fais une incrémentale. Ensuite fais un essai de restitution. Joue aussi à modifier le nom du répertoire parent du sous-répertoire piÚge.
Pour jouer avec ces choses dangereuses, je te conseille de faire une zone Ă part, ne fais pas courir de risque Ă ta production. Sur ma Mageia9.2-official, le navigateur Dolphin nâarrive pas Ă dĂ©truire le rĂ©pertoire piĂšge. Je passe par la ligne de commande.
Jâai rencontrĂ© tout plein de piĂšges et jâen ai imaginĂ© dâautres : un fichier de nom -f, un rĂ©pertoire de nom -, comment dĂ©truire le fichier ? Comment faire un cd
vers le répertoire ?
Solutions : rm -f -- -f
et cd -- -/
et si le nom du répertoire est dans la variable var cd -- "${var%/}/"
(prĂ©voir le cas oĂč var="/"
).
Jâai dĂ©couvert que zstd
en mode filtre lancé par tar
, se met en erreur sâil existe un sous-rĂ©pertoire de nom - dans le rĂ©pertoire courant (câest trĂšs particulier, en effet). Lâexamen des sources de tar
et de zstd
mâa confirmĂ© le problĂšme, la solution mâa parue simple (inverser lâordre de deux tests dans le source de zstd
) mais la remontĂ©e de bug nâa pas abouti. Ce nâest pas grave, je sais maintenant quâil ne faut pas utiliser tar ... --zstd ...
, et je mets plutĂŽt zstd -c[d]
dans un pipeline.
Jâen raconte un maximum dans le fichier notes01.bash. Toute cette expĂ©rience me permet de crĂ©er des scripts bash robustes.
Conclusion
Ton outil de sauvegarde est le meilleur, car il te convient.
Fais-toi une idée claire
- de tous tes espaces contenant des fichiers précieux à tes yeux,
- de tous tes espaces de sauvegarde,
- des mécanismes de sauvegarde et de restitution.
Cela participe Ă la confiance.
Nâoublie pas de faire de temps en temps un contrĂŽle dâintĂ©gritĂ© des archives et un exercice de restitution. Câest un peu de travail, juste pour vĂ©rifier quâune mise Ă jour, ou une donnĂ©e inhabituelle, ou autre chose, nâa pas mis en dĂ©faut la capacitĂ© Ă restituer comme tu lâentends.
Si la restitution est rendue impossible, câest comme si tu nâavais jamais sauvegardĂ© !
La confiance, en informatique ça se surveille du coin de lâĆil
Lâinformatique est une science exacte pour la machine, pas pour lâhomme ; il compense par lâhumilitĂ© et lâempirisme
Commentaires : voir le flux Atom ouvrir dans le navigateur