#1 Le 10/09/2020, à 17:20
- gibar84
Automatisation sauvegarde fichiers sda vers sdb
Bonjour
Je poste ici suite à la discussion:
https://forum.ubuntu-fr.org/viewtopic.p … 055031&p=7 #171
Au cours de la discussion j'avais noté ton désir de faire chaque jour un sauvetage total d'une partie de ton répertoire /home du SDD et de l'actualiser plusieurs fois par jour.
Si tu sais le faire, parfait. Sinon, ouvre une autre discussion. On pourra t'y proposer un script basé sur sync ou mv qui sera certainement à améliorer afin de faire quelques contrôles et même y ajouter le transfert vers le disque externe.
Avec lancement à la souris.
Les deux posts que j'ai lancés et qui ont finalement connu des fins positives, ont mis en évidence mon manque de culture linuxienne à laquelle s'ajoutent mes incompréhensions et mes erreurs. Tu me proposes ce qui pour moi représente une nouvelle aventure. Je suis partant mais j'ai besoin d'être assuré qu'une maj (automatique ou déclenchée) des fichiers modifiés de mon dossier personnel (sda===>sdb) avec une périodicité à définir pourra être maîtrisée. Ce qui m’inquiète par rapport à
Il serait intéressant que ce double soit alimenté en temps réel
En temps réel ?
Tu veux dire dès que quelque chose est modifié dans /home/jules sur sda1 tu veux que ce soit immédiatement « répercuté » sur la copie, dans sdb1 ?
Dans ce cas on ne parle pas de sauvegarde mais plutôt de synchronisation ( entre 2 dossiers, par ex ton dossier /home/jules et un dossier synchro_jules stocké quelque part dans /media/DATA )
Ça signifie que si tu effaces par erreur quelque chose d'un côté, tu le répercutes de l'autre, immédiatement.
Il te faut donc en parallèle un système de sauvegarde pour récupérer une éventuelle version précédente de tes affaires…
Il y a des logiciels qui permettent d'automatiser des sauvegardes à intervalles réguliers ( dejadup, backuppc, luckybackup voir https://doc.ubuntu-fr.org/sauvegarde ) en conservant par exemple 2 ou 3 états précédents de la sauvegarde.mple 2 ou 3 états précédents de la sauvegarde.
Lenovo IPS3 15IAH 15.6 FHD Intel Core i5 12450H RAM 16 Go LPDDR 512 Go SSD Puce Intel UHD Graphics
Hors ligne
#2 Le 10/09/2020, à 18:15
- geole
Re : Automatisation sauvegarde fichiers sda vers sdb
Bonjour
Le but est d'abord de définir exactement ce que tu veux.
Lorsque tu as évoqué le quasi "temps réel" J'ai pensé au raids en espérant que non.
Maintenant tu as évoqué une sauvegarde par jour sur le disque de sécurité dans un répertoire par jour.
Cela est un script facile à faire. En gros
Vérifier que le disque récepteur est bien présent
Créer le répertoire du jour.
Y dupliquer les répertoires que tu souhaites. A confirmer que ce sont les répertoires classiques (Téléchargements, documents, videos, musiques, Images)
Ce script, tu peux le lancer plus ou moins automatiquement et surveiller ses retours d'erreurs.
Si ce script devait être lancé automatiquement, il écrirait alors les erreurs dans la messagerie . Mais qui consulte la messagerie? ou dans un fichier cumulatif d'erreurs.
Ce script pourrait aussi inclure la mise à jour du disque externe avec les répertoires des jours précédents s'ils n'y sont pas encore.
Tu as aussi évoqué le fait de pouvoir le mettre à jour plusieurs fois par jour. Ce n'est pas impossible. Mais tu devras dire si les fichiers que tu as supprimés dans l'intervalle doivent aussi être supprimés de la duplication du jour.
Si oui, la commande sync me semble bien pour faire le ménage. Si non, on pourra continuer avec une commande de copie (cp --update)
Avec la même logique pour le lancement.
Ce sont des scripts à bâtir. Je pense que les personnes qui te les proposeront, les auront testés.
Mais tu auras toujours le risque de faire un mauvais copier/coller ou un mauvais paramétrage. Cependant tu pourras montrer comment tu as installé avant de lancer. C'est une affaire qui va durer plusieurs jours avant que tu reçoives un premier jet.
Déjà un entraînement pour lancer à la souris. Je vais compléter demain ou un peu plus tard.
En t'aidant de ce lien https://forum.ubuntu-fr.org/viewtopic.p … #p22324607
Préparer le fichier MonTest.sh à mettre de préférence dans le Bureau afin de le voir facilement.
contenant les trois commandes suivantes:
echo Bonjour
sleep 15
echo fin
Apprendre à le lancer avec la souris.
Apprendre à afficher son contenu à la souris pour modifier le temps de mise en sommeil et contrôler que cela fonctionne.
Dernière modification par geole (Le 10/09/2020, à 18:33)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#3 Le 11/09/2020, à 09:49
- gibar84
Re : Automatisation sauvegarde fichiers sda vers sdb
Bonjour,
Je crains de me lancer dans une aventure qui me dépasse, mais peut-être que des explications et points de vue complémentaires seront de nature à me rassurer.
Ce lien https://forum.ubuntu-fr.org/viewtopic.p … #p22324607 me conforte dans mes appréhensions
Je suis certain que la poursuite de ce post doit intéresser beaucoup d'utilisateurs. Alors attendons pour voir, sinon je me dirigerais, sans doute, vers des sauvegardes ponctuelles et manuelles (copier vers... (sda====>sdb)
En attendant je prépare ma structure sdb/jules sauvegardes
-dossiers en cohérence avec sda/mes documents
-tri et rapatriement des mes sauvegardes anciennes, copier vers jules sauvegardes/(202XMMJJ)
Dernière modification par gibar84 (Le 11/09/2020, à 09:55)
Lenovo IPS3 15IAH 15.6 FHD Intel Core i5 12450H RAM 16 Go LPDDR 512 Go SSD Puce Intel UHD Graphics
Hors ligne
#4 Le 12/09/2020, à 09:26
- geole
Re : Automatisation sauvegarde fichiers sda vers sdb
Bonjour
Je te sens bien défaitiste. On a jusqu'à la de fin de l'année, voir plus si besoin.
Je ne sais pas si tu as acquis le mécanisme pour pouvoir lancer avec des clics à la souris. Mais ce n'est pas très grave. Cela pourra toujours être lancé par une ligne classique de commande de ce style:
$home/Bureau/Script.sh
Ce matin, je présente aux intervenants le script que j'ai préparé afin qu'il soit commenté.
En priorité sur le choix du contenu des variables.
=> J'ai essayé de proposer en fonction de la discussion de référence dans laquelle j'avais retenu:
Nom d'utilisateur en majuscule.
Nom de répertoire avec des espaces. Je n'aime pas trop. Pourquoi pas un tiret?
Le point de montage de la partition externe avait été peu abordé, Je propose d'utiliser le LABEL
Voici donc les variables à prépositionner tel que je les mises et soumises à discussion.
### Définition des variables
### Le nom de l'utilisateur à retenir.
Nom=$(echo $USER| tr '[a-z]' '[A-Z]')
echo $Nom
### Le répertoire de sortie de la partition du disque externe.
Extrep=/media/$USER/Label-Partition/"$Nom Sauvegardes Externes"
echo $Extrep
### Le répertoire de sortie de la partition du disque interne.
Intrep="/media/DATA/$Nom Sauvegardes Internes"
echo $Intrep
### Format du sous-niveau de répertoire.
Sousniv=$Nom-$(date +"%Y%m%d")
echo $Sousniv
### Petite mise en sommeil pour avoir le temps de lire le contenu des commandes echo .
Som=4
### liste des répertoires à copier
Rep[0]=Téléchargements
Rep[1]=Documents
Rep[2]=Musique
Rep[3]=Vidéos
Rep[4]=Images
Voici les quelques difficultés que j'ai rencontrées pendant cette écriture ( Je ne connais pas grand chose)
Je suis parti avec des lignes de commandes faites par copier/coller
Ce fut très très dur de récupérer la réponse de l'utilisateur.
Puis lorsque j'ai utilisé la technique du lancement à la souris, le code que j'avais écrit n'était plus reconnu. Du coup, j'ai ajouté la fameuse ligne
#! /bin/bash
ce qui semble avoir débloqué la récupération de la réponse read
Voici donc la version V0 du fichier
#! /bin/bash
### Commandes de duplication de répertoires du /home dans d'autres partitions.
### Le principe retenu est le suivant.
### Au moins une fois par jour le script est lancé.
### Au premier lancement de la journée, il duplique le contenu de securité du disque interne dans un disque externe si celui-ci est branché.
### Puis il fabrique un répertoire dans un disque interne et y copie les répertoires du home
### Aux lancements suivants, il se contente de recopier les nouveaux fichiers et les fichiers modifiés.
###
### Définition des variables
### Le nom de l'utilisateur à retenir.
Nom=$(echo $USER| tr '[a-z]' '[A-Z]')
echo $Nom
### Le répertoire de sortie de la partition du disque externe.
Extrep=/media/$USER/Label-Partition/"$Nom Sauvegardes Externes"
echo $Extrep
### Le répertoire de sortie de la partition du disque interne.
Intrep="/media/DATA/$Nom Sauvegardes Internes"
echo $Intrep
### Format du sous-niveau de répertoire.
Sousniv=$Nom-$(date +"%Y%m%d")
echo $Sousniv
### Petite mise en sommeil pour avoir le temps de lire le contenu des commandes echo .
Som=4
### liste des répertoires à copier
Rep[0]=Téléchargements
Rep[1]=Documents
Rep[2]=Musique
Rep[3]=Vidéos
Rep[4]=Images
### Quelques conseils.
### Le premier jet de ce script ne va pas faire de contrôles sur les autorisations d'écriture ni sur la place disque disponible.
### et très peu traiter l'absence de connexion du support externe pour la première duplication de la journée.
### Début du script.
### unset $rep1 ; unset $rep2
# Vérification que le répertoire de la partition du disque interne est bien présent.
if [ ! -d "$Intrep" ];then
echo "Le répertoire $Intrep n'existe pas et le script n'assure pas sa création."; sleep $Som
echo "Faites le nécessaire et relancer le script. Appuyer sur Entrée pour terminer le script."
read rep2
exit 1
fi
### Vérification si le sous-répertoire du jour est bien présent.
if [ ! -d "$Intrep/$Sousniv" ];then
### echo "Le sous-répertoire du jour dans $Intrep n'existe pas. C'est donc le premier lancement de la journée."; sleep $Som
### echo "Nous allons mettre à jour la partition du disque externe avant de commencer la duplication des données."; sleep $Som
if [ -d "$Extrep" ];then
### Le répertoire du disque externe a été trouvé. On va transférer.
#### echo "On va maintenant vérifier que la partition externe est bien à jour des répertoires sauvegardés."; sleep $Som
list=`ls "$Intrep" `
for i in $list
do
if [ ! -d "$Extrep/$i" ];then
cp -R "$Intrep/$i" "$Extrep"
sync
echo "copie de $i terminée."; sleep $Som
fi
done
else
echo "Le répertoire $Extrep n'existe pas et le script n'assure pas sa création. Peut-être avez-vous oublié de brancher le disque?"; sleep $Som
echo -n "Voulez-vous continuer sans assurer la duplication sur support externe? [Oui/N] "
read rep1
echo "La réponse est" ; echo $rep1; sleep $Som
### on s'aperçoit alors qu'il existe plein de caractères parasites dans la réponse. On va donc isoler les 3 premiers caractères
### rep2=$( echo $rep1 | cut -c1-3 )
### echo $rep1 | cut -c223-225
if [[ $rep1 =~ "Oui" ]]
then
echo "On va donc continuer le traitement sans duplication externe. Ne jouer pas trop souvent avec cette possibilité de déphasage!"
else
echo "Faites le nécessaire et relancer le script. Appuyer sur Entrée pour terminer le script."
read rep2
exit 1
fi
fi
### Nous allons maintenant créer le sous-répertoire afin de pouvoir stocker les données. (Pas de vérification d'autorisation)
mkdir "$Intrep/$Sousniv"
for j in ${!Rep[@]}
do
echo "début de traitement du répertoire ${Rep[j]}" ; sleep $Som
cp -Rp $HOME/${Rep[j]} "$Intrep/$Sousniv/${Rep[j]}"
done
echo "copie totale terminée. Appuyer sur Entrée pour terminer le script."
read rep2
exit 0
fi
### Traitements additionnels en cours de journée.
for j in ${!Rep[@]}
do
cp -Rup -v $HOME/${Rep[j]} "$Intrep/$Sousniv"
done
echo "copie complémentaire terminée. Appuyer sur Entrée pour terminer le script."
read rep2
echo "La réponse est" ; echo $rep2; sleep $Som ; sleep $Som
exit 0
Un problème que j'ai traité à ma façon
Si dans la journée, des fichiers sont supprimés, ils ne sont pas supprimés de la référence du jour. Il ne seront pas dans la référence du lendemain. Cela me semble suffisant et évite la commande sync
Un problème que je n'ai abordé: "Le manque de place disque"
Dans la technique actuelle de lancement, il me semble que cela sera facile à constater en lisant la sortie écran.
Mais si on va plus loin en automatisant, il va falloir traiter. Je ne sais pas trop comment.
Je ne sais pas écrire écrire dans le journal sans utiliser une commande sudo que je ne souhaite pas utiliser.
Je vais donc creuser la piste de la messagerie pour une version future si la version actuelle est réellement utilisée.
Ce script fonctionne pour les versions ubuntu 18.04.3 et 20.04.1
Dernière modification par geole (Le 12/09/2020, à 17:57)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#5 Le 14/09/2020, à 12:10
- geole
Re : Automatisation sauvegarde fichiers sda vers sdb
Bonjour
Voici maintenant la version en "aveugle" avec lancement par crun ou sans affichage à l'écran ou par crontab.
On peut lancer autant de fois qu'on veut par jour. La fabrication du jour n'est toujours pas dupliquée sur disque externe. Le nombre de jours consécutifs d'absence du disque externe est maintenant paramétrable. Les erreurs sont consultables avec l'application mail
( Il faut frapper un n° de message pour pouvoir le consulter. Il se supprime en frappant d. On quitte mail en frappant q
Exemple de mon crontab
@reboot /home/a/Bureau/CopieV1.sh
13 */3 * * * /home/a/Bureau/CopieV1.sh
Le script V1
#! /bin/bash
### Commandes de duplication de répertoires du /home dans d'autres partitions.
### Le principe retenu est le suivant.
### Au moins une fois par jour le script est lancé.
### il fabrique un répertoire dans un disque interne (si nécessaire) et y copie les répertoires indiqués du home
### il duplique le contenu de securité du disque interne dans un disque externe si celui-ci est branché.
### il informe du résultat par mail.
###
### Définition des variables
### En mode CRONTAB, l'utilisateur n'est pas connu!!!! Il faut donc le mettre en dur.
USER=a
Nom=$(echo $USER| tr '[a-z]' '[A-Z]')
### Le répertoire de sortie de la partition du disque externe.
Extrep=/media/$USER/Label-Partition/"$Nom Sauvegardes Externes"
### Le répertoire de sortie de la partition du disque interne.
Intrep="/media/DATA/$Nom Sauvegardes Internes"
### Format du sous-niveau de répertoire.
Sousniv=$Nom-$(date +"%Y%m%d")
### Nombre de jours autorisés sans alerte d'absence de copie sur disque externe et répertoire de mémorisation.
Nbj=4
Incident=$HOME/SuiviCopie
### liste des répertoires à copier
Rep[0]=Téléchargements
Rep[1]=Documents
Rep[2]=Musique
Rep[3]=Vidéos
Rep[4]=Images
### Nom du fichier de suivi des incidents rencontrés. Ne pas oublier de consulter la messagerie......
Ficbug=/$HOME/Copie-Bug-$(date +"%Y%m%d").txt
### Quelques conseils: Le premier jet de ce script ne va pas faire de contrôles sur les autorisations d'écriture ni sur la place disque disponible.
### Début du script.
### Vérification que le répertoire de la partition du disque interne est bien présent.
if [ ! -d "$Intrep" ];then
echo "Le répertoire $Intrep n'existe pas et le script n'assure pas sa création.">>$Ficbug
fi
### Vérification si le sous-répertoire du jour est bien présent.
if [ ! -d "$Intrep/$Sousniv" ];then
### "Le sous-répertoire du jour dans $Intrep n'existe pas. C'est donc le premier lancement de la journée."
### Nous allons créer le sous-répertoire afin de pouvoir stocker les données. (Pas de vérification d'autorisation)
mkdir "$Intrep/$Sousniv" 2>>$Ficbug
for j in ${!Rep[@]}
do
cp -Rp $HOME/${Rep[j]} "$Intrep/$Sousniv/${Rep[j]}" 2>>$Ficbug
done
fi
### Traitements additionnels en cours de journée.
for j in ${!Rep[@]}
do
cp -Rup -v $HOME/${Rep[j]} "$Intrep/$Sousniv" 2>>$Ficbug
done
### echo "Nous allons mettre à jour la partition du disque externe.
if [ -d "$Extrep" ];then
### Le répertoire du disque externe a été trouvé. On va transférer.
#### "On va maintenant vérifier que la partition externe est bien à jour des répertoires sauvegardés."
list=`ls "$Intrep" `
for i in $list
do
if [ ! -d "$Extrep/$i" ];then
#### On ne transfert pas celui du jour qui est encore incomplet.
if [ "$i" != "$Sousniv" ] ;then
cp -R "$Intrep/$i" "$Extrep" 2>>$Ficbug
sync
fi
fi
done
### Si les copies se passent mal, il y aura une alerte donc on va supprimer le fichier de suivi. On pourrait aussi le mettre à jour
rm -r $Incident
else
### On va vérifier s'il faut alerter. Le repertoire de suivi est-il présent?
if [ ! -d "$Incident" ];then
mkdir -p $Incident 2>>$Ficbug
echo $(date +"%Y%m%d") > $Incident/Date
fi
### on va alors regarder depuis combien de temps
if [ "$(head -1 $Incident/Date)" -ne "$(date +"%Y%m%d")" ] ;then
let Laps=$(date +"%Y%m%d") - $(date +"%Y%m%d")
if [[ $Laps -gt $nbj ]]; then
echo "Le sauvetage externe n'a pas été fait depuis le $Laps jours. Merci d'y remédier rapidement" >>$Ficbug
fi
fi
fi
### Préparation de la messagerie
if [ -s $Ficbug ]
then
mail -s "Gros Bug dans La Copie journalière" $USER <$Ficbug
else
echo "copie journalière sans incident $(date +'%Y-%m-%d-%H-%M-%S') " | mail -s "Copie journalière OK" $USER
fi
rm $Ficbug
exit 0
Le choix de fabriquer chaque jour des répertoires contenant la totalité des sauvegardes me semble extrêmement gourmand en place disque.
Je ne sais pas le volume que tu as à sauver. Mais je pense que, tôt ou tard, tu évolueras pour économiser la place dans une formule classique:
Sauver de temps en temps la totalité des données et sauver régulièrement la différence qui apparaît!
Une idée:
Sauvetage total mensuel et sauvetages incrémentaux sur répertoires quotidiens.
Dans un tel contexte, la commande rsync est à utiliser. Voir ce lien https://forum.ubuntu-fr.org/viewtopic.p … #p22336258
A titre d'exemple.
##### Test rsync
Save="/media/sauvegarde/$user/Save"
#sudo mkdir $Save
#sudo chown $USER:$USER $Save
### Répertoires à transférer
echo Documents>/$HOME/FILE.SYNC
echo Téléchargements>>/$HOME/FILE.SYNC
echo Musique>>/$HOME/FILE.SYNC
echo Vidéos>>/$HOME/FILE.SYNC
echo Images>>/$HOME/FILE.SYNC
### Si premier passage, il faut fabriquer la référence du mois précédant de façon artificielle
if [ ! -d "$Save/FULL-$DATE" ];then
DATE=$(date --date '1 month ago' +'%Y-%m')
echo $DATE
rsync -rltgoxv --files-from=/$HOME/FILE.SYNC $HOME $Save/FULL-$DATE
fi
DATE=$(date +'%Y-%m')
echo $DATE
### Si premier passage du mois, il faut fabriquer la référence du mois. Sinon on incrémente
if [ ! -d "$Save/$FULL-DATE" ];then
rsync -rltgoxv --files-from=/$HOME/FILE.SYNC $HOME $Save/FULL-$DATE
else
rsync -rltgoxv --delete --backup --backup-dir=$Save/INCR-$(date +'%Y-%m'-%d) --files-from=/$HOME/FILE.SYNC $HOME $Save/FULL-$DATE
fi
Dernière modification par geole (Le 14/09/2020, à 14:02)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#6 Le 18/09/2020, à 16:46
- gibar84
Re : Automatisation sauvegarde fichiers sda vers sdb
Bonjour
Ce matin, je présente aux intervenants le script que j'ai préparé afin qu'il soit commenté. #5
Comme tu le sais, je ne peux pas donner d'avis sur les travaux que tu as entrepris. J'espère que très prochainement des intervenants se manifesteront !!!
Lenovo IPS3 15IAH 15.6 FHD Intel Core i5 12450H RAM 16 Go LPDDR 512 Go SSD Puce Intel UHD Graphics
Hors ligne