Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Appel à contributeurs pour la doc.

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.

#1 Le 06/01/2017, à 18:37

cristobal78

(résolu) rsync, sauvegarde sur support externe, message d'erreur

Bonjour
J'ai remarqué chez moi qu'à chaque fois que je branche une clé usb ou un DD son "nom" change à chaque fois.
Donc pour faire une sauvegarde avec rsync il faut au préalable que je vérifie et note le nom du périphérique de destination de la sauvegarde.
Pour me soulager de cette opération j'ai écrit ce script inspiré de ceux de soupalonion, de sorbus et d'autres (merci à eux !!)  smile

#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Fonction du script = sauvegarde sur support externe
# 05.01.2017
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
### choix de la source
source=$(zenity  --title="Naviguer jusqu'au dossier à sauvegarder sur un périphérique externe, puis valider" --file-selection --directory)

### on se place directement dans /media/USER pour ne pas avoir à naviguer inutilement
cd /media/$USER
dest=$(zenity  --title="Cliquer sur le nom du périphérique extérieur (DD externe, USB, ...) qui va recevoir la sauvegarde puis valider" --file-selection --directory)

### si on n'a pas choisi de périphérique de destination, on sort
if [[  $dest == "/media/$USER"  ]] ; then zenity --error --text="Pas de périphérique sélectionné : arrêt du script"; exit ; fi

### sinon on sauvegarde "source" sur "destination"
rsync -a    "$source"   "$dest"

Ça à l'air de marcher puisque je retrouve les fichiers sur le support de sauvegarde mais :

1- j'ai ce message d'erreur que je ne comprends pas puisque je retrouve bien mes fichiers transférés :

rsync: chgrp "/media/moi/41B3-AB83/Images" failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]

2- J'ai un doute sur cette condition :

if [[  $dest == "/media/$USER"  ]] ....

- est elle correcte ?
- Les [[ et ]] sont ils nécessaires ?
- Y a til une meilleure (ou plus simple) condition pour tester qu'on a bien choisi un périph valide/existant ?

Dernière modification par cristobal78 (Le 10/01/2017, à 17:23)


1 pc 32 bits avec 14.04 LTS et 2 laptop 64 bits avec 16.04 LTS

Hors ligne

#2 Le 06/01/2017, à 20:07

erresse

Re : (résolu) rsync, sauvegarde sur support externe, message d'erreur

Bonjour,

Tu as une erreur de changement de groupe sur le périphérique de sortie... qui est en NTFS ou en FAT32, ce qui ne permet pas de sauvegarder les droits et propriétés des objets Linux que tu sauvegardes !

Par ailleurs, pour avoir toujours le même nom pour le support de sauvegarde, il te suffit de lui en donner un : attribuer une étiquette, toujours la même, à la partition sur le support, et ce pour tous les supports de sauvegarde.
Par exemple, tu donnes l'étiquette "Sauvegarde" à la partition de toutes tes clés ou disques de sauvegarde, ils seront tous toujours montés sur "/media/$USER/Sauvegarde" et tu n'auras plus besoin d'un script pour choisir le support de sortie.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 07/01/2017, à 02:05

cristobal78

Re : (résolu) rsync, sauvegarde sur support externe, message d'erreur

Bonsoir erresse

Merci. On en apprend tous les jours sur ce forum smile smile smile

1/- Bien vu : c'est une clé usb formatée en fat32 !
Donc ok pour ta remarque concernant le système de fichier fautif (!).
Pourtant qd je regarde les propriétés des dossiers et fichiers (maintenant transférés sur cette clé usb en FAT32)  je vois qu'ils ont tous conservé leur nom, leur taille et leur dates (heureusement  smile ) mais aussi leurs permissions à savoir : drwx --- --- pour le dossier et -rw- r-- r-- pour les fichiers. 
Je peux modifier les droits rwx du user mais effectivement pas les droits du groupe ou des other.
Je suppose que c'est ça le sens de ta remarque et l'interprétation du message d'erreur code 23.

2/- Pour attribuer une étiquette j'ai essayé avec gparted . J'ai compris qu'il fallait démonter, puis faire Partition > Étiquette > Définir l'étiquette de partition et donner un nom.
Super,  ça marche : maintenant je vois bien le nom que j'ai donné à ma clef  dans /media/user/

PS : même si mon script se justifie moins pourrais tu me conseiller pour la remarque concernant  la partie if [[ ...]] que j'ai mis dans mon script  ?

Dernière modification par cristobal78 (Le 07/01/2017, à 02:06)


1 pc 32 bits avec 14.04 LTS et 2 laptop 64 bits avec 16.04 LTS

Hors ligne

#4 Le 07/01/2017, à 17:02

erresse

Re : (résolu) rsync, sauvegarde sur support externe, message d'erreur

cristobal78 a écrit :

2- J'ai un doute sur cette condition :

if [[  $dest == "/media/$USER"  ]] ....

- est elle correcte ?
- Les [[ et ]] sont ils nécessaires ?
- Y a til une meilleure (ou plus simple) condition pour tester qu'on a bien choisi un périph valide/existant ?

- La condition me paraît correcte, telle que tu l'as posée.
- Les [[ et ]] ne sont pas toujours obligatoires (parfois [ et ] est suffisant), mais ils ont le mérite de fonctionner dans tous les cas, autant les utiliser systématiquement, ça ne mange pas de pain...
- Tu peux tester le code retour de zenity qui t'indique si on a validé ou abandonné l'instruction.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#5 Le 09/01/2017, à 02:23

cristobal78

Re : (résolu) rsync, sauvegarde sur support externe, message d'erreur

salut erresse

Tu suggères :
" Tu peux tester le code retour de zenity qui t'indique si on a validé ou abandonné l'instruction."

Ça paraissait séduisant mais en fait ça ne marche apparemment pas car la ligne

dest=$(zenity  --title="Cliquer .........

est toujours satisfaite (la variable "dest" étant tjrs crée) donc $? est tjrs égal à zéro.
Dommage mais comme j'ai une solution avec "ma" condition c'est pas grave.  smile


Mais du coup j'ai une autre question. big_smile
En utilisant

rsync -a    "$source"   "$dest"

cela a bien transféré tous mes dossiers de mon /home sur mon DD externe (formatté en ext3, merci erresse smile ). Ça a pris 50 mn !! C'est long.

Mais qd un ou plusieurs dossiers de mon home auront changé est ce que rsync ne transférera QUE ces fichiers modifiés (ou nouveaux) sur le DD, ou bien est ce que rsync va de nouveau transférer TOUS les fichiers de mon home  ?
Parce que si ça prend 50 mn à chaque fois ça freine les envies de sauvegarde !  sad


1 pc 32 bits avec 14.04 LTS et 2 laptop 64 bits avec 16.04 LTS

Hors ligne

#6 Le 09/01/2017, à 19:03

erresse

Re : (résolu) rsync, sauvegarde sur support externe, message d'erreur

Bonjour,

Je te confirme que, lorsque tu quittes la fenêtre zenity de choix du répertoire/fichier par le bouton "Annuler", le code retour n'est pas 0 mais 1 dans $? et la variable réceptrice doit être vide.

Concernant rsync, oui, la première sauvegarde copie tous les fichiers et répertoires à sauver, puisqu'ils ne l'ont pas encore été.
Mais les fois suivantes, il repère les objets qui ont été modifiés ou qui sont nouveaux et ne transfère que ceux-là, tout ce qui est identique à la sauvegarde précédente n'est pas recopié. Et c'est donc beaucoup plus rapide...
smile


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#7 Le 10/01/2017, à 01:59

cristobal78

Re : (résolu) rsync, sauvegarde sur support externe, message d'erreur

erresse a écrit :

Bonjour,

Je te confirme que, lorsque tu quittes la fenêtre zenity de choix du répertoire/fichier par le bouton "Annuler", le code retour n'est pas 0 mais 1 dans $? et la variable réceptrice doit être vide.

Ta remarque m'a surpris donc j'ai revérifié.

Pour faire le test j'ai mis 2 clef usb (pour être sur  que le choix de périph ne puisse pas se faire automatiquement c'est à dire sans intervention de ma part) et  j'ai modifié mon script  contenant rsync avec zenity etc ... mais sans mettre le code de sortie dans une variable cette fois.En plus j'ai ajouté

echo $?
read keypress

pour être sur de rester en terminal et pour voir le résultat.

Conclusion
- si on choisi "annuler" (dans la fenêtre zenity) alors oui tu as raison le code retour est"1"
mais
- si on appui sur "entrée" SANS avoir sélectionné un périph alors code retour est "0"

Concernant rsync, oui, la première sauvegarde copie tous les fichiers et répertoires à sauver, puisqu'ils ne l'ont pas encore été.
Mais les fois suivantes, il repère les objets qui ont été modifiés ou qui sont nouveaux et ne transfère que ceux-là, tout ce qui est identique à la sauvegarde précédente n'est pas recopié. Et c'est donc beaucoup plus rapide...

Je pense qu'il manquait l'option --del dans la ligne de cde.
J'ai rajouté ça aussi dans mon script et après essais il semble bien que ça marche !

Voici la modif :

## si on a cliqué sur "annuler", on sort
if [  $code -eq 1 ] ; then zenity --error --text="Vous avez chois d'annuler la sauvegarde : arrêt du script"; exit ; fi
## si on n'a pas choisi de périphérique de destination, on sort
if [  $dest == "/media/$USER"  ] ; then zenity --error --text="Pas de périphérique sélectionné : arrêt du script"; exit ; fi

Et je passe en résolu en remerciant encore l'ami erresse pour ses explications  smile

Dernière modification par cristobal78 (Le 10/01/2017, à 17:24)


1 pc 32 bits avec 14.04 LTS et 2 laptop 64 bits avec 16.04 LTS

Hors ligne