You are not logged in.
Pages: 1
Salut à tous!
J'ai transformé une ancienne tour en NAS (Debian 12 Bookworm). Syncthing synchronise les PC de la maison dans /home/user (chacun son dossier).
Je souhaite mettre en place un système de sauvegardes incrémentales de /home/* sur deux disques externes (a priori avec BorgBackup, mais mon choix n'est pas arrêté). Lorsque l'un des disques est sur la machine, l'autre est dans un autre lieu (au travail par exemple). Chaque semaine, j'intervertis les disques. C'est ce dernier point qui me fait turbiner. J'ai peur de corrompre les sauvegardes en intervertissant les disques.
Petite précision avant d'aller plus loin, je suis loin d'être un spécialiste. Un amateur averti tout au plus.
Voici mes interrogations:
Est-on d'accord que lors du branchement d'un périphérique de stockage sur Debian sans interface graphique, il faut monter le volume manuellement dans un point de montage?
Est-on d'accord que ce point de montage doit préalablement être créé (mount -U XXX-XXX /media/save1 ne fonctionne pas si /media/save1/ n'est pas existant)?
Est-on d'accord que rien n'empêche d'écrire dans /media/save1/ même si aucun volume n'est monté (ça reste un dossier comme un autre)?
Donc comment m'assurer que lorsque mon disque 1 est monté, ce soit bien les instructions de sauvegarde 1 qui tournent?
Comment m'assurer que les instructions de sauvegarde 2 ne s'écrivent pas dans un dossier qui sera écrasé au montage du disque 2?
J'ai pensé à faire un script Bash, mais mes compétences en la matière sont proches de zéro. Mais voici à quoi je pensais:
if - Vérifier si UUID du disque 1 est présent (pas trouvé comment faire) then - Monter le disque dans /media/save1 (mount -U XXX-XXX /media/save1) - Exécuter le script de sauvegarde 1 (dépendra du logiciel de sauvegarde) - Démonter le volume (sync && umount /media/save1) else - echo "save1 pas présent" elif - Vérifier si UUID du disque 2 est présent (pas trouvé comment faire) then - Monter le disque dans /media/save2 (mount -U XXX-XXX /media/save2) - Exécuter le script de sauvegarde 1 (dépendra du logiciel de sauvegarde) - Démonter le volume (sync && umount /media/save2) else - echo "save2 pas présent" fi
Je suis preneur de tout conseil. Peut-être existe-t-il un système plus simple? Vous les gérez comment vos sauvegardes?
Offline
Yop!
Pour ceux que ça intéresse, j'ai trouvé une solution pour mon script que voici:
#!/bin/bash # Attibution des UUID aux variables UUID1=$(lsblk -o UUID /dev/sd?? | sed -n 2p); UUID2=$(lsblk -o UUID /dev/sd?? | sed -n 2p); if # Si # Vérifier si UUID1 est présent et confirmer [ $UUID1 = XXX-XXX-XXX1 ] && echo "UUID1 présent"; then # Aors # Monter le disque dans /media/save1 et confirmer mount -U XXX-XXX-XXX1 /media/save1 && echo "save1 monté" && # Exécuter le script de sauvegarde 1 et confirmer echo "Exécuter le script de sauvegarde 1" && echo "Sauvegarde 1 exécutée" && # Démonter le volume et confirmer sync && umount /media/save1 && echo "save1 démonté"; elif # Sinon # Vérifier si UUID2 est présent [ $UUID2 = XXX-XXX-XXX2 ] && echo "UUID2 présent"; then # Alors # Monter le disque dans /media/save2 et confirmer mount -U XXX-XXX-XXX2 /media/save2 && echo "save2 monté" && # Exécuter le script de sauvegarde 2 et confirmer echo "Exécuter le script de sauvegarde 2" && echo "Sauvegarde 2 exécutée" && # Démonter le volume et confirmer sync && umount /media/save2 && echo "save2 démonté"; else # Sinon echo "AUCUN DISQUE DISPONIBLE" fi
Voyez-vous quelque chose de louche?
J'attaque l'étude de BorgBackup pour la création de mes scripts de sauvegardes et je reviens ici pour partager mes trouvailles.
A+
Offline
BorgBackup est vraiment une tuerie! La documentation est d'une clarté!
Récapitulatif
Situation de base
J'ai un NAS (PC tour de récupération) sous Debian 12 Bookworm sans interface graphique.
Les PC de la maison se synchronisent au NAS via Syncthing.
Chaque utilisateur a un dossier sur le NAS dans /home/user.
Désire
Sauvegarder /home/* sur deux disques durs externes.
Une semaine sur un disque, une semaine sur l'autre disque.
Script "Master"
Ce script permet de vérifier quel disque est branché au NAS.
Il monte le disque dans le point de montage.
Il lance le bon script de sauvegarde.
Il démonte le point de montage.
01 #!/bin/bash 02 UUID=$(lsblk -o UUID /dev/sdj1 | sed -n 2p); # Attribution de l'UUID à la variable UUID 03 disque1="XXX-XXX-XXX1" # Définition de l'UUID du disque 1 04 disque2="XXX-XXX-XXX2" # Définition de l'UUID du disque 2 05 06 if # Si 07 [ "$UUID" = "$disque1" ] && echo "disque 1 présent"; # Le disque 1 est présent 08 then # Alors 09 mount -U "$disque1" /media/save1 && echo "save1 monté" && # Monter le disque dans /media/save1 10 /root/save/save1.sh && echo "Sauvegarde 1 exécutée" && # Exécuter le script de sauvegarde 1 11 sync && umount /media/save1 && echo "save1 démonté"; # Démonter le volume 12 elif # Sinon 13 [ "$UUID" = "$disque2" ] && echo "disque 2 présent"; # Vérifier si le disque 2 est présent 14 then # Alors 15 mount -U "$disque2" /media/save2 && echo "save2 monté" && # Monter le disque dans /media/save2 16 /root/save2.sh && echo "Sauvegarde 2 exécutée" && # Exécuter le script de sauvegarde 2 17 sync && umount /media/save2 && echo "save2 démonté"; # Démonter le volume 18 else # Si aucun disque n'est présent 19 echo "AUCUN DISQUE DISPONIBLE" # Afficher AUCUN DISQUE DISPONIBLE 20 fi
Script de sauvegarde 1
Ce script est lancé par le script "Master" à la ligne 10 uniquement si le disque 1 est branché sur le NAS.
Je n'ai rien inventé, BorgBackup le donne sur son site...
#!/bin/bash # Emplacement du dépôt export BORG_REPO=/media/save1 # Mot de passe de chiffrement export BORG_PASSPHRASE='XXX' # Quelques aides et gestion des erreurs info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } trap 'echo $( date ) SAUVEGARDE INTERROMPUE >&2; exit 2' INT TERM info "Début de la sauvegarde" # Sauvegarde borg create \ --verbose \ --list \ --stats \ --show-rc \ --compression lz4 \ --exclude-caches \ \ ::"{now:%Y-%m-%d_%H:%M:%S}" \ /home backup_exit=$? info "Elagage des sauvegarde" # Elagage des sauvegardes borg prune \ --list \ --show-rc \ --keep-minimal 7 \ --keep-weekly 4 \ --keep-monthly 6 prune_exit=$? # Compacter le dépôt info "Compactage du dépôt" borg compact compact_exit=$? # Résultat du script global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit )) global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit )) if [ ${global_exit} -eq 0 ]; then info "Sauvegarde, Elagage et compactage terminé avec succès" elif [ ${global_exit} -eq 1 ]; then info "Sauvegarde, Elagage et/ou compactage terminé avec des WARNING" else info "Sauvegarde, Elagage et/ou compactage terminé avec des ERREURS" fi exit ${global_exit}
Script de sauvegarde 2
Ce script est lancé par le script "Master" à la ligne 16 uniquement si le disque 2 est branché sur le NAS.
Rien de bien différent, si ce n'est l'emplacement du dépôt ainsi que la PassPhrase de chiffrement.
#!/bin/bash # Emplacement du dépôt export BORG_REPO=/media/save2 # Mot de passe de chiffrement export BORG_PASSPHRASE='XXX' # Quelques aides et gestion des erreurs info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } trap 'echo $( date ) SAUVEGARDE INTERROMPUE >&2; exit 2' INT TERM info "Début de la sauvegarde" # Sauvegarde borg create \ --verbose \ --list \ --stats \ --show-rc \ --compression lz4 \ --exclude-caches \ \ ::"{now:%Y-%m-%d_%H:%M:%S}" \ /home backup_exit=$? info "Elagage des sauvegarde" # Elagage des sauvegardes borg prune \ --list \ --show-rc \ --keep-minimal 7 \ --keep-weekly 4 \ --keep-monthly 6 prune_exit=$? # Compacter le dépôt info "Compactage du dépôt" borg compact compact_exit=$? # Résultat du script global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit )) global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit )) if [ ${global_exit} -eq 0 ]; then info "Sauvegarde, Elagage et compactage terminé avec succès" elif [ ${global_exit} -eq 1 ]; then info "Sauvegarde, Elagage et/ou compactage terminé avec des WARNING" else info "Sauvegarde, Elagage et/ou compactage terminé avec des ERREURS" fi exit ${global_exit}
En ajoutant "exec 2>&1" au début du script "Master" (juste après le shebang) et en lançant le script comme ceci
emplacement du script master | tee -a fichier-de-log
toutes les informations affichées à l'écran seront loggées dans le fichier spécifié.
On peut bien entendu ajouter une ligne à Crontab pour exécuter le script "Master" à la fréquence désirée.
Voilà, de mon côté, la première sauvegarde est en cours sur mon disque 1. Ca va prendre du temps.
Si vous avez des commentaires, si vous voyez des erreurs dans mes scripts, n'hésitez pas à vous manifester. J'ai fait ça en tâtonnant...
Allé, salut!
[edit 04.11.2023: légères modifications des scripts pour les rendre conformes. Merci Q!]
Last edited by oinska (04 Nov 2023 14:33:12)
Offline
Pages: 1