URL: https://linuxfr.org/news/sauvegardes-encore-et-restitution Title: Sauvegardes (encore !) et restitution Authors: Yves DEMUR ElectronLibre63, Xavier Teyssier et Ysabeau đŸ§¶ Date: 2024ćčŽ07月08æ—„T17:14:56+02:00 License: CC By-SA Tags: sauvegarde et bash Score: 34 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. ![tape-drive](http://yves.demur.free.fr/tape-drive120.png) 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 ! ---- ---- # 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 20^e 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](http://yves.demur.free.fr). Je m’en sers quotidiennement. Selon les jours, j’envoie les fichiers archives sur le 2e 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 2^e 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 '\n0憆' '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***

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /