IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Optimisation d'un backup


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut Optimisation d'un backup
    Bonjour

    Suite à mon thread sur rync, je voudrais vous demander quelques suggestions.
    Ma stratégie de backup consiste dans un premier temps à faire un rsync sur mes répertoires/fichiers sources vers un répertoire temporaire. Dans un 2ème temps, ce répertoire temporaire est compressé en tgz et les fichiers sauvegardés premièrement sont effacés. Enfin, dans un dernier temps, l'archive est envoyé par rsync vers un serveur.
    Ma question est simple, je voudrais pouvoir gagner du temps et surtout de l'espace disque sur mes postes clients qu iferont leur backup. L'étape limitante de ma stratégie est l'étape 2 où je me retrouve momentanément avec mes fichiers premièrement sauvegardés et une archive AVANT délétion de ces fichiers (sauf l'archive, je le reprécise).
    Voici ma portion de code pour résumer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #Backup 1
    		rsync -az --delete --exclude-from=$keepme_exclude_list $SRC $tmp_dest 2>> $keepme_log
    		#On targézippe
    		ARCHIVE=$keepme_dir/BACKUP_`date +"%d%m%Y"`.tgz
    		cd $tmp_dest
    		tar cfz $ARCHIVE * 2>> $keepme_log
    		cd $PWD
    		#On peut virer Les répertoires/fichiers backuppés maintenant
    		#qu'ils sont archivés
    		rm -rf $tmp_dest 2>> $keepme_log
    		#Backup 2 de l'archive vers le cluster par ssh
    		rsync -az --delete -e ssh $ARCHIVE $destination 2>> $keepme_log
    Plus simplement, est-il envisageable de faire un pipe entre mon premier rsync et tar ?

    Merci de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Bonjour,

    Et que penses-tu de l'option -z qui permet de faire des transferts compressés ? Inutilisable dans ton cas ?

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Salut KiLVaiDeN

    Si j'ai bien compris la doc de rsync, l'option -z de rsync permet de compresser les données à sauvegardés au moment de leur transfert. Une fois le transfert terminé, les datas sont décompressées et l'utilisateur n'y voit que du feu. C'est une astuce pour augmenter les vitesses de transfert.
    Donc, cette option ne te permet pas d'avoir un fichier compressé au final.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Oui en effet, j'ai lu trop rapidement le man, désolé pour la fausse information..

    En fait, si je comprend bien ton script, tu te sers de rsync comme d'un outil de transfert uniquement, car au final dans ton repertoire temp de destination il n'y a pas de fichiers (si?)

    Pourquoi ne pas plutot directement compresser les fichiers qui t'interessent au départ, et effectuer le transfert ensuite ?

  5. #5
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Hmmm, l'idée est pas mauvaise d'autant plus qu'avec l'option --preserve de tar, je conserve les propriétés de mes fichiers.
    A voir.
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  6. #6
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Ok, ça me semble correct. Je met en Résolu, en attendant l'opinion de mon supérieur

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  7. #7
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    D'accord, car en réfléchissant bien, faire un pipe me parrait impossible avec rsync, car étant donné que ça fonctionne avec un daemon, il faudrait que ce daemon offre la possibilité de rediriger le flux : je n'ai pas vu cette option

    Je serais quand même curieux de voir, si un gourou Unix aurait une idée pour faire cette redirection, comme tu la souhaitait au départ

  8. #8
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Tu ne testes aucun code retour.
    Si une commande échoue, le reste du programme s'effectue quand même.
    ça me paraît un petit peu dangereux.

    Je déconseillerai de faire un pipe pour lier rsync et tar.
    • 1. Je ne vois pas trop l'optimisation là dedans. A moins que tu aies un 386sx25mhz
      2. Si une erreur survient, tu auras plus de difficultés pour savoir si ça vient de rsync ou de tar.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  9. #9
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Voici un petit script, qui, je te l'accorde, est un petit peu lourd mais il a pour avantage :

    • 1. de faire un fichier de log impeccable (commentaire/affichage de la commande lancée/résultat de la commande)
      2. de s'arrêter proprement lorsqu'une erreur survient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    #!/bin/sh
    #
    # sauvegarde de la configuration de portier
    #
     
    # creation d'un string date
    date_jour=`date +"%d%m%y"`
     
    # creation du nom du fichier pour la liste des packages installes
    packages_list="/tmp/pkg"$date_jour
    # creation du nom du fichier pour la tarball des fichiers de configuration
    save_etc="/tmp/etc"$date_jour".tar"
    # creation du nom du fichier pour la tarball de /var/lib/squidguard
    save_squid="/tmp/squid"$date_jour".tar"
     
    # les repertoires  a sauvegarder dans l'arborescence
    rep_etc="/etc"
    rep_squid="/var/lib/squidguard"
     
    # liste des 3 fichiers importants
    file_list="$packages_list $save_etc $save_squid "
     
    # adresse IP du serveur samba
    samba_ip="192.168.28.5"
    # creation du nom du fichier d'erreurs
    log_file="/var/log/save_conf_portier2smb/"$date_jour".log"
     
    distant_script="/etc/cron.daily/purge_save_portier2smb"
     
     
    #Suppression des fichiers crees durant le script
    clean()
    {
            echo -e "#Suppressions eventuelles de $file_list" | tee -a $log_file
     
            if [ "$1" ]
            then
                    echo "#suite a $1" | tee -a $log_file
            fi
     
            for i in $file_list
            do
                    if [ -f "$i" ]
                    then
                            echo "rm -v $i" | tee -a $log_file
                            rm -v $i >> $log_file 2>&1
                    fi
            done
    }
     
    #gestion d'erreurs et logs
    launch() {
            cmd=$1
            purpose=$2
            redirection=$3
     
            echo "#$purpose" | tee -a $log_file
     
     
            if [ $redirection ]
            then
                    #cas ou on a une redirection dans la commande
                    #on ne peut pas doublement rediriger
                    #donc on ne log pas les erreurs eventuelles
                    if [ $redirection = o ]
                    then
                            echo $cmd | tee -a $log_file
                            eval "$cmd"
                    else
                    #cas ou le 3eme argument est mal saisi
                            echo "ERREUR launch : verifier arguments" | tee -a $log_ file
                            clean "Erreur script"
                            exit
                    fi
            else
                    #cas standard
                    echo $cmd | tee -a $log_file && eval "$cmd >> $log_file 2>&1"
                    if [ $? -ne 0 ]
                    then
                            echo "ERREUR $? : $err" | tee -a $log_file
                            clean "Erreur commande"
                            exit
                    fi
            fi
    }
     
    #affichage d'entete du fichier de log presentant le script
    entete() {
    cat << EOF
    ------------------------------------------------------------------------
    Sauvegarde de /etc, de la liste des packages et de /var/lib/squidguard
    le $date_jour
    ------------------------------------------------------------------------
     
    packages_list=$packages_list
    save_etc=$save_etc
    save_squid=$save_squid
     
    rep_etc=$rep_etc
    rep_squid=$rep_squid
     
    samba_ip=$samba_ip
    log_file=$log_file
     
    EOF
    }
     
     
    # Debut du script
     
    entete | tee $log_file
     
    # Creation d'un fichier contenant la liste des packages installes
    launch "dpkg --get-selections > $packages_list" "Creation d'un fichier avec la l iste des packages installes" "o"
     
    # Creation d'un fichier comprenant tous les fichiers de configurations contenus dans /etc
    launch "tar -cvf $save_etc $rep_etc" "Creation d'un tarball avec les fichiers de  configurations /etc"
     
    # Creation d'un fichier comprenant des fichiers pour squidguard
    launch "tar -cvf $save_squid $rep_squid" "Creation d'un tarball avec la blacklis t pour squidguard"
     
    # Changement de proprietaire
    launch "chown -v sauvegarde.sauvegarde $save_etc $save_squid $packages_list" "Ch angement de proprietaire"
     
    # On endosse l'identite de l'utilisateur sauvegarde le temps de la copie reseau
    # il est l'utilisateur qui permet la copie reseau sans authentification
    # http://lea-linux.org/reseau/secu/ssh.html
    launch "sudo -u sauvegarde scp $packages_list $save_etc sauvegarde@$samba_ip:/ho me/sauvegarde" "Sauvegarde vers samba"
     
    # Verification de l'existence du script de purge sur samba
    launch "sudo -u sauvegarde rsh $samba_ip test -f $distant_script" "Verification existence script distant sur samba gerant l'effacement des sauvegardes des plus de 15 jours"
     
    clean "deroulement normal"
     
    # Suppression des logs de plus de 15 jours
     
    launch "/usr/bin/find `dirname $log_file` -atime +15 -type f -name "??????.log" -exec /bin/rm -v {} \;" "Nettoyage des logs"
     
     
    exit 0
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  10. #10
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Un script super interessant, merci de le partager ggnore !

    Une question pour toi : même si ça te parrait être une mauvaise solution, quel serait le moyen de faire un pipe entre rsync et tar ? Il faudrait en quelque sorte changer le daemon rsync, pour qu'il n'écrive pas les fichiers dans un repertoire, mais plutot pour qu'il les redirige vers tar, non ? comment ? je ne comprend pas trop comment ça serait possible..

  11. #11
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    L'idée est pas mal ggnore. Dans mon script, j'intègre l'idée de log file. Là dessus, je suis tranquille. Concernant l'arrêt inopiné, peut être devrais aussi avoir recours à ta fonction launch ?
    Toujours est-il que pour simplifier mon problème :
    1) je compresse avec tar -cspzf --exclude-from mes fichiers sources.
    2) L'archive est envoyé sur le serveur via rsync.
    3) Suppression de l'archive sur ma machine.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation script de Backup
    Par Melancoliah dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 19/06/2013, 12h05
  2. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  3. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 08h47
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24
  5. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo