Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/09/2020, à 18: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

geole a écrit :

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 à

Coeur Noir a écrit :

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.


Desktop xubuntu 20.04 i5-7400 ram 8Go SSD 500Go DD 2To

Hors ligne

#2 Le 10/09/2020, à 19: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, à 19: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

Hors ligne

#3 Le 11/09/2020, à 10: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, à 10:55)


Desktop xubuntu 20.04 i5-7400 ram 8Go SSD 500Go DD 2To

Hors ligne

#4 Le 12/09/2020, à 10: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, à 18: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

Hors ligne

#5 Le 14/09/2020, à 13: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 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, à 15: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

Hors ligne

#6 Le 18/09/2020, à 17:46

gibar84

Re : Automatisation sauvegarde fichiers sda vers sdb

Bonjour

geole a écrit :

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 !!!


Desktop xubuntu 20.04 i5-7400 ram 8Go SSD 500Go DD 2To

Hors ligne