Script bash pour sauvegardes et restitutions

ydemur Membre non connecté
-
- Voir le profil du membre ydemur
- Inscrit le : 05/01/2023
- Groupes :
L'outil se veut simple et rapide, pour sauver en fin de journée les fichiers modifiés des espaces précieux. Il s'accommode de tous les caractères autorisés pour les noms (seuls / et \x00 sont exclus). Il permet de faire des sauvegardes totales ou incrémentales.
Il permet de restituer un espace dans l'état qu'il avait à une date donnée, en tenant compte des fichiers et répertoires supprimés. Il permet aussi de rechercher et restituer les diverses versions de fichiers, enregistrées au fil des opérations de sauvegarde.
Le script est prévu pour être mis sur le média de sauvegarde, avec son fichier de paramétrage. Le média envisagé est une clé USB ou un disque amovible, mais ce n'est pas exclusif.
Je l'utilise mais j'aimerais avoir l'avis de testeurs (et des retours de bugs ?).
En espérant qu'il soit utile aux courageux qui oseront lire le fichier Alire.txt ...
Édité par ydemur Le 06/07/2024 à 19h32
l'informatique est une science exacte pour la machine, pas pour l'homme ; il compense par l'humilité et l'empirisme

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Wow... Travail colossale. Avant de lancer du code qui vient d'internet, je regarde toujours le contenu. Et là, c'est un peu trop à analyser, un fichier monolitique.
Je viens de regarder SauverTX_ProjXY_01.bash, certes, c'est plus simple à la rédaction, mais des noms de variable plus long rends le code plus simple à lire (une première fois) car il n'y a pas à se souvenir de leur signification.
Le script est tres statique, il n'utilise pas d'argument, ni de fichier de configuration (par exemple).
Alire.txt : il serait bon de le convertir en .md au lieu du .txt et utiliser la syntaxe markdown. Les lecteurs markdown peuvent ajouter automatiquement des ToC (table de contenu), ainsi, d'un coup d'œil on voit la structure du document, et les titres catapultent au chapitre. Des images peuvent aussi être insérées, des liens vers des fichiers, des tableaux...
le notes01.bash contient vraiment énormément de commentaire.
txsauv.bash : line 15, elle peut être retirée, on pourrait retrouver cette somme dans un fichier txsauv.md5sum à coté du txsauv.zip là où on télécharge, c'est généralement ce qui est fait , par exemple : https://www.mageia.org/fr/downloads/get/?q=Mageia-8-i586.iso on y voit le lien directe, puis 3 fichiers de somme de l'iso, garantissant l'intégrité du téléchargement. Il est possible de signer ce fichier somme ainsi on garanti aussi la provenance, on authentifie l'intégralité du code (une chaine, zip -> somme -> signature attestant la somme -> somme attestant l'intégralité du téléchargement).
ligne 41, un switch case pour un seul cas possible ? étrange. là aussi, j'aurais aimé retrouver une structure classique analysant les arguments, et en fonction d'eux, appeler des fonctions ou définir des variables.
Par exemple:
Code BASH :
#!/bin/bash function print_error () { if [[ "_${log_with_time}" != "_" ]] ; then echo "$(date): ${@}" >&2 else echo "${@}" >&2 fi } function print_help () { cat <<EOT Voici comment utiliser le script: -h --help affiche cette aide. --directory <argument> définit un répertoire à travailler. --time affiche des logs avec la date et l'heure au travers d'une variable. EOT } while [[ ${#} -gt 0 ]] ; do case ${1} in -h|--help) print_help shift 1 # oui cette ligne est inutile exit 0 ;; --directory) directory_to_save=${2} shift 2 if [[ ! -e ${directory_to_save} ]] ; then print_error "Le répertoire n'existe pas." exit 1 fi ;; --time) log_with_time=true shift 1 ;; *) print_error "Option inconnue." print_help exit 1 ;; esac done if [[ ! -e ${directory_to_save} ]] ; then print_error "Le fichier n'est pas un dossier." # cette condition devrait être dans le switch-case du dessus lors de l'analyse des arguments. exit 1 fi
Il existe une autre manière de faire pour analyser les options d'un script, qui est d'ailleurs bien plus propre que ce que je viens de proposer: utiliser getopt.
En gros : https://en.wikipedia.org/wiki/Getopts
En détails : https://www.man7.org/linux/man-pages/man1/getopt.1.html ou https://www.man-linux-magique.net/man1/getopt.html
Lignes 8 et 9, il existe la variable ${COLUMNS} qu'on peut coupler avec print:
Code BASH :
printf "%0.s$" $(seq 1 ${COLUMNS})
mais attention, COLUMNS n'existe pas (par défaut) en dehors d'un shell interactif (modifiable avec shopt).
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Girotte Membre non connecté
-
- Voir le profil du membre Girotte
- Inscrit le : 05/06/2011
- Groupes :
-
Membre d'Honneur
Le script et la discussion m'intéressent beaucoup, même si je suis incapable d'y participer de manière utile.
Juste merci!!!
Mageia 8 - Fluxbox sur PC "fixe"
Cauldron - Xfce4 sur PC portable
Cauldron - Xfce4 sur PC portable

ydemur Membre non connecté
-
- Voir le profil du membre ydemur
- Inscrit le : 05/01/2023
- Groupes :
Merci d'avoir regardé le script.
Je me rends compte que je n'ai jamais pratiqué l'exercice de "revue de code" en équipe. Je me sens un apprenti qui apprend d'un spécialiste. Ma culture autodidacte vient du bash manual et aussi du site stackoverflow.
J'ai regardé getopts. En effet cela semble bien fait. Il faut donc concevoir les options en vue de l'utilisation de getopts. Dans mon cas j'ai une option avec 4 arguments et une autre avec 6. Il faut découper cela pour n'avoir qu'un argument par option. Je ne vois pas comment faire simple. Je vais prendre le temps de mûrir ça.
Je vais ajouter un txsauv.zip.md5 à côté du txsauv.zip
Je ne connaissais pas du tout le markdown. Je découvre, il y a un mode markdown sous emacs, ça me plaît bien !
J'ai l'habitude de saisir tout ce que je peux avec emacs : notes en vrac, brouillons de courriels, SMS, WhatsApp, documents de travail avant mise en forme ... puis je fais des copier-coller. Je soupçonne le mode markdown de permettre de faire de la mise en forme depuis emacs. Je vais entrer dans le 21e siècle !
Vite, googler "markdown emacs tutorial" ... il y a des trucs à lire ... banzaï !
l'informatique est une science exacte pour la machine, pas pour l'homme ; il compense par l'humilité et l'empirisme

ydemur Membre non connecté
-
- Voir le profil du membre ydemur
- Inscrit le : 05/01/2023
- Groupes :
Les deux scripts ont été modifiés, aussi il faut reporter les paramètres dans le nouveau script lanceur, puis lancer une sauvegarde totale.
Les fichiers sélectionnés pour une sauvegarde incrémentale sont ceux dont la date du statut a changé et ceux dont le numéro d'inode a changé, depuis la sauvegarde précédente. Il faut suivre ces deux attributs pour être sûr de sélectionner tous les fichiers qu'il faut. Le numéro d'inode permet de résoudre un cas où la date du statut ne suffit pas, c'est rare et tordu mais possible.
Sinon, ces scripts sont juste un enrobage pour la commande tar couplée avec xz.
l'informatique est une science exacte pour la machine, pas pour l'homme ; il compense par l'humilité et l'empirisme

ydemur Membre non connecté
-
- Voir le profil du membre ydemur
- Inscrit le : 05/01/2023
- Groupes :
http://yves.demur.free.fr/tzsauv.zip et http://yves.demur.free.fr/tzsauv.zip.md5
Les fichiers archives ne sont pas compatibles entre txsauv/tzsauv. A la mise en service de tzsauv il faut faire des sauvegardes totales.
J'ai eu des plantages aléatoires lors de tests en sauvegarde vers une clé USB ; en recommençant ça passait parfois ; le même envoi sur disque dur passait normalement.
L'erreur se situait lors de la relecture du fichier .tar.zst juste après sa création, pour créer la liste .log : " ... decoding error ... corrupted block detected ...".
J'ai fortement soupçonné un effet de badblock. La suite est expliquée au paragraphe PROBLEME BIZARRE du Alire.txt. Je farfouille encore.
l'informatique est une science exacte pour la machine, pas pour l'homme ; il compense par l'humilité et l'empirisme

ydemur Membre non connecté
-
- Voir le profil du membre ydemur
- Inscrit le : 05/01/2023
- Groupes :
https://www.amazon.fr/gp/customer-reviews/R6GZ9GWTUZBAM
J'avoue que je les ai testées et re-testées. J'ai créé deux scripts pour cela, j'ai découvert le h2testw de .indows ... et j'ai passé beaucoup de temps à "geeker" comme dit ma tendre et chère. Avec des clés de 234Gio la moindre opération globale prend du temps !
Me débarrasser de ces clés a été une libération !
Mes conclusions sont dans l'avis Amazon référencé ci-dessus et dans le Alire.txt du zip
http://yves.demur.free.fr/tzsauv.zip
J'ai fait évoluer tzsauv. J'ai mis en place les md5 des archives sauvegarde *.tar.zst. J'ai trouvé comment calculer les md5 et le listing (tar -tvf ... > *.log) dans le flot de l'écriture du *.tar.zst sur le média. J'utilise des | tee et >(...). Cela évite de faire des relectures après écriture sur le média => on gagne du temps et on ne risque pas de calculer un mauvais md5 si le fichier est posé sur des badblocks. Dans le cas de badblocks sur le média, la vérification md5 en lisant le média donnera une erreur, parce que le bon md5 enregistré a été calculé dans le pipeline (sous réserve évidemment que le fichier qui enregistre les md5 ne soit pas vérolé).
J'arrive à enchaîner jusqu'à 7 |, ce qui donne 8 process qui s'envoient des stdout->stdin à la queue leu leu. Le pstree est joli à voir quand ça calcule.
J'ai ajouté des mesures de temps de traitement et de débit. C'est toujours intéressant de se rendre compte du coût en temps et puissance de traitement en fonction des volumes.
J'ai aussi ajouté quelques astuces, comme une option pour vérifier les md5 et un script de désarchivage vite fait. Le script central fait quand même 1245 lignes. Je pense l'avoir blindé, mais pour le moment je suis le seul testeur connu.
l'informatique est une science exacte pour la machine, pas pour l'homme ; il compense par l'humilité et l'empirisme

ydemur Membre non connecté
-
- Voir le profil du membre ydemur
- Inscrit le : 05/01/2023
- Groupes :
Malgré tout, je suis persuadé que l'outil reste simple d'utilisation. Je pense aussi qu'il est robuste, mais tant qu'il n'aura pas été testé avec ardeur et par des utilisateurs divers, j'aurai des doutes.
Je m'en sers régulièrement pour mettre à l'abri mes travaux et je joue parfois à faire des gros tests (tant que j'ai des espaces disponibles). Cela me permet aussi de tester des clés USB (formatage exfat ou f2fs).
Les derniers ajouts sont :
- mise des sommes md5 dans le *.cpr, cela évite d'avoir un fichier de plus (*.md5)
- enrichissement des affichages
- ajout de la possibilité de ne pas envoyer les fichiers sauvés dans un *.tar.zst mais dans une arborescence de répertoires équivalente a un *.tar.zst désarchivé
Le mode "arborescence" a les mêmes fonctionnalités qu'avec les *.tar.zst : restitution de zone, recherche/restitution de fichiers, contrôle md5.
En comparaison avec le mode *.tar.zst :
- la durée de sauvegarde peut varier beaucoup (en plus ou en moins), selon le taux de petits fichiers, la compressibilité, la puissance CPU
- le résultat des sauvegardes n'est pas protégé des modifications, le contrôle md5 peut en être affecté
- aucune compression (effet sur l'espace utilisé), il sera possible de la déléguer au système de fichiers
- on peut faire des recherches et copies directement avec un explorateur de fichiers (ou "à la main" depuis une Konsole)
- un badblock ou une anomalie ne rend inutilisable qu'un fichier, pas toute une archive
Ce mode "arborescence" fonctionne un peu comme des sauvegardes avec un "rsync --delete" ou un "mirrordir", sauf que :
- on conserve l'accès aux anciennes versions des fichiers modifiés sans avoir eu à faire des copies multiples de la zone entière (gain de place, effet "incrémentales") ; on peut parler de "~mirrordir historisé"
- on restitue avec fidélité : les incrémentales sont restituées en tenant compte des suppressions à faire pour être conforme à l'état des zones au moment de l'incrémentale : on ne retrouvera pas en deux exemplaires les fichiers renommés entre deux sauvegardes, les répertoires vides seront restitués ...
De plus, la restitution est automatisée : il suffit de spécifier une date et les sauvegardes a prendre en compte sont déterminées automatiquement
l'informatique est une science exacte pour la machine, pas pour l'homme ; il compense par l'humilité et l'empirisme
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie