Backup FTP OVH
Par Daniel Polli aka DanSteph



Sommaire:

  • Introduction
  • Installation pour les confirmés
  • Installation détaillées pour les débutants
  • Questions fréquente et réponses
  • Le listing du script
  • Contact et auteur





  • Introduction

    OVH mets gratuitement à disposition au locataire de serveurs un espace FTP de backup. (pour accéder à cet espace il faut ouvrir le compte voir "backup FTP" dans votre manager) Le but de cette doc est de vous aider à mettre en place un backup automatique de votre serveur sur le backup FTP d'OVH. La doc est clairement orientée pour les (relativement) débutants avec une section pour que les confirmés ne s'em... pas à tout lire.


    Les possibilités de ce backup:

  • Simple à installer et à configurer
  • Robuste et fiable
  • Entièrement automatique
  • Backup de "/home" "/usr/local/apache/conf" et "/var/named" en archive TAR.GZ (archive compressée)
  • Fréquence des backup au choix, backup conservé un mois (dépend de la taille de votre espace FTP et de serveur)
  • Contrôle des erreurs à tout les niveaux: vous ête prevenu dans les logs et par mail du status du backup



  • Le principe:

    Un tache CRON lance le script shell "backupftpovh.sh" qui va archiver et compresser les trois répertoires les plus important "/home" "/usr/local/apache/conf" et "/var/named" en excluant "/home/ovh" et "/home/log/". Le backup étant Lancé toujours les même jour du mois et le nom de l'archive contenant la date du jour (1,4,8...) les backup seront remplacés chaque mois par le nouveaux, vous conservez ainsi en permanence 4, 8 ou même 30 backup par mois à votre convenance. Notez que l'archive transferée ou non est supprimée de votre disque dur à la fin du script.

    Une trace dans le log "secure" vous indique le début et la fin du backup et un mail vous est envoyé si le backup échoue. Optionellement (activé par défaut) vous pouvez recevoir aussi un mail vous indiquant quand le backup s'est bien terminé, la durée du backup et la taille de l'archive crée.

    Pourquoi cette doc et ce script?

    Comme tout le monde j'ai du me gratter la tête aucune solution n'étant fournie "clé en mains" pour le backup FTP. J'ai bien trouvé quelques scripts de ci de la mais certains étaient des usines à gaz et les autres n'incluaient aucun contrôles d'execution ou d'erreur. Le jour ou le disque lache il est un peut tard pour s'apercevoir que le backup ne marchait plus depuis 6 mois. J'ai donc d'abord fait ce script pour moi et comme la fourmi est décidement préteuse j'ai décider de partager. Le backup est souvent négligé peut-être par manque de connaissances et c'est une grave erreur.

    J'aurais pu pousser et faire un script beaucoup plus complexe entièrement parametrable pour satisfaire même ceux qui ont des installations spéciale mais ca aurait été l'inverse du but cherché: une application simple à installer et utiliser et surtout avec un contrôle fiable de la bonne execution. Ce script étant assez simple il peut aussi vous servir de base pour ecrire un script plus évolué qui correspondra mieux à vos besoins.



    Installation pour les confirmés

    0Testez dabord la taille prevue pour un backup avec df qui vous donnera la taille utilisée de /home et la place restante. L'archive sera effacée une fois envoyée mais évidemment elle doit pouvoir rentrer dans /home. Comptez donc 75% de "used" et regarder si ca rentre dans "available".

    1Créez un répertoire "backupsite" dans "/home"

    2Importez le fichier "backup_exclude.txt" dans "/home/backupsite" : wget http://www.dansteph.com/backup_exclude.txt

    3Importez le script ou vous voulez: wget http://www.dansteph.com/backupftpovh.sh

    4N'oubliez pas de le chmoder en rwx------

    5Editez "backupftpovh.sh" pour mettre vos données serveur username et password.

    6Programmer le lancement en cron de ce script toujours les même jours chaque mois (le 1 du mois puis le 5, le 9, le 13 etc. etc. la fréquence dépend de la place sur votre espace FTP et de la taille des backups, vous pouvez le lancer une fois pour tester la taille: sh backupftpovh.sh)



    Installation détaillées pour les débutants

    0Connectez vous en root en SSH avec putty ou autre programme. (si vous ne savez pas le faire c'est mal barré :) )

    1Testez dabord la taille prevue pour un backup en tapant df qui vous donnera la taille utilisée de /home et la place restante. L'archive sera effacée une fois envoyée mais évidemment elle doit pouvoir rentrer dans /home. Comptez donc 75% de "used" et regarder si ca rentre dans "available".

    2Allez dans le repertoire home en tapant: cd /home

    3Crée le répertoire "backupsite" en tapant: mkdir backupsite

    4Allez dans le répertoire /home/backupsite en tapant: cd /home/backupsite

    5Importer le fichier d'exclusion en tapant: wget http://www.dansteph.com/backup_exclude.txt

    6Tapez: ls vous devez avoir ce fichier backup_exclude.txt dans le répertoire "/home/backupsite"

    Note: On va crée un répertoire dans /usr pour mettre le script dedans, vous pouvez mettre le script ailleurs si vous avez déjà une place dédiée a vos scripts. Toutefois dans la doc je suppose qu'il s'agit d'un répertoire "/usr/mes_scripts" et je me réfère tjrs à ce répertoire, tenez en compte si vous mettez le script ailleurs.

    7Allez dans le repertoire Usr en tapant: cd /usr

    8Crée le répertoire "mes_scripts" en tapant: mkdir mes_scripts

    9Allez dans le répertoire "/usr/mes_scripts" en tapant: cd /usr/mes_scripts

    10Importer le script shell en tapant: wget http://www.dansteph.com/backupftpovh.sh

    11Tapez: ls vous devez avoir ce fichier backupftpovh.sh dans le répertoire "/usr/mes_scripts"

    12Changez les droits de ce fichier en tapant: chmod a-r-w-x,u+rwx backupftpovh.sh (vous devez être connecté en root absolument)

    13Editez ce script en tapant: vi backupftpovh.sh appuyez sur la touche insert, et entrez vos données serveurs dans la partie:

    SERVER="XXX.XXX.XXX.X"
    USER="XXX"
    PASS="XXX"
    EMAIL="XXX@XXX.com"
    #Serveur backup d'OVH
    #Votre nom d'utilisateur
    #Votre password
    #Pour envoi mail si backup echoue


    14Pressez sur la touche escape et tapez :wq puis la touche "entrée", vous devez être de retour dans le shell et vos modifs doivent être sauvée.

    15Vous pouvez maintenant lancer le backup manuellement pour voir la taille que prendra chaque backup et pour tester l'installation, attention ca risque de durer 10-20mn suivant la place de vos fichiers. Tapez: sh backupftpovh.sh pour l'executer sinon passez à l'étape suivante.

    16Il faut choisir à quel fréquence vous voulez que votre backup soit effectué. Ca dépend de la place sur votre FTP (en général la même que le HD de votre serveur), de la taille de vos sauvegardes et si vous faite de fréquent changement. Rapellez vous que vos backup seront conservé un mois, ca fait en gros 8 backup par mois si vous en faite un tout les 4 jours, 4 si une fois par semaine etc. etc. Dans mon cas pour une sauvegarde à 1.4 GO avec une place de 40GB sur le FTP j'ai choisi un backup tout les 4 jours à cause des forums et autres bases.

    17Il faut maintenant configurer une tache CRON pour lancer votre backup: lancer WEBMIN allez dans "Systèmes" puis en bas dans "Tâches CRON" cliquez sur "Créer une nouvelle tâche cron programmée". puis renseignez les différents champs comme indiqué dans l'image en dessous en choisissant la fréquence désirée, une fois pas semaine, tout les deux jours etc etc. Pour ne pas trop charger la machine au heures de pointes evidemment executer plutôt le backup la nuit.

    Exemple de lancement tout les 4 jours:



    Questions fréquente et réponses

    Q:Le script est trop simple j'aurais aimé pouvoir faire aussi...
    R: On peut, on peut... la philosophie de ce script c'est justement la simplicité, ca le rend facile à lire et à modifier pour l'adapter à vos besoins même avec un minimum de connaissance. Si j'avais rajouté pleins de possibilités ce serait devenu très vite une usine à gaz illisible (donc très dur à modifier), difficile à configurer, moins robuste et qui n'aurais pas satisfait tout le monde de toute façon. En partant de ce script on peut faire pleins de choses , regardez plus bas les réponse à certaines questions. Notez que je n'ouvre jamais de manuel pour me lancer sur de nouveaux language, je lis des scripts et je pose mes questions à google il suffit d'utiliser les bon mots clé (ex: "TUTO BASH TAR REPERTOIRE"). Même si vous êtes une brique en shell vous pouvez faire de même et modifier facilement le script tout en apprenant un peu de shell.

    Q:quand je lance le script depuis le shell il m'affiche: "tar: Removing leading `/' from member names" et ">tar: /home/mysql/mysql.sock: socket ignored" est ce normal ?
    R:oui c'est normal c'est des messages d'information du compresseur TAR.

    Q:Comment voir les fichiers sur mon espace FTP d'OVH ?
    R:Avec un script php comme celui ci par exemple

    Q:Mon disque a crashé mais j'ai des backup, comment faire ?
    R:Désolé, ce genre d'information est en dehors du champ de cette page, cherchez sur google ou dans les listes et forum OVH.

    Q:Le backup ne marche pas comment faire ?
    R:J'ai ecrit ce script pour une release standard en red hat 7.2 OVH mise à jours, si ca ne marche pas ecrivez moi (voir contact plus bas) et donnez le maximum d'info.

    Q:Les bases de donnée MYSQL sont elle dans le backup ?
    R:Oui, le dossier /home/mysql contient toutes les bases de données du serveur, donc elle sont aussi dans le backup.

    Q:Comment exclures des fichiers ou répertoire que je ne veut pas dans le backup ?
    R:Editez le fichier "backup_exclude.txt" et rajoutez ce que vous voulez exclure. Exemple: "/home/moi/www/photosvacance" (répertoire) "/home/moi/www/mongroszip.zip" (fichier)

    Q:Comment inclure d'autre répertoires ou fichiers ?
    R:Facile en modifiant un peu le script (voir question 1 "le script est trop simple...") rajoutez la ligne SAVEDIR3="/mon/rep/ou/fich" en dessous de la ligne SAVEDIR2="" puis ajouter simplement cette nouvelle variable a la fin de la ligne TAR comme ceci: tar cfzX $TEMPDIR$FILENAME.gz $EXCLUDEFILE $SAVEDIR $SAVEDIR1 $SAVEDIR2 $SAVEDIR3 inutile de dire que vous pouvez ajouter d'autres lignes SAVEDIRXX=

    Q:Comment changer le nom du backup ?
    R:Editez la ligne: FILENAME=`date +"%d"`_backupsite.tar #nom du fichier  et changez uniquement le texte "backupsite"

    Q:Comment lancer plusieurs backups, un simple chaque jour et un complet chaque semaine par exemple ?
    R:Copiez le script: cp backupftpovh.sh backuphebdo.sh en utilisant les réponses plus haut éditez chaque scripts pour qu'il fasse ce que vous voulez et lancer les en cron à la fréquence désirée. C'est une bonne idée dans ce cas de changer le nom de l'archive pour distinguer les backups (voir question juste au dessus). Rapellez vous toutefois que la fréquence doit toujours être les même jours du mois pour qu'ils soient ecrasé chaque mois par les nouveau, ainsi un backup hebdo pourra etre lancé le 1,7,14,21 et le 28 par exemple. Si vous le programmez pour "dimanche" vous allez vous retrouver avec une belle salade de backup.

    Q:L'archive est vide très petite ou ca ne marche pas ?
    R:Si l'archive est vide faite très attention au fichier "exclude_backup.txt" une ligne vide indiquera de tout exclure. Evitez donc les retours chariot et les lignes vide dans ce fichier. Si ca ne marche pas controller la syntaxe du fichier SH, Il suffit par exemple de coller les commentaires "BIDULE='mon/fichier'#commentaire" pour que la valeurs soit fausse et que ca ne marche pas.

    Q:Je l'ai lancé depuis le shell et ca fait n minute que mon ecran ne bouge plus.
    R:Ca veut dire qu'il bosse, pour vous tranquiliser lancez une autre session et faite des ls -l dans le répertoire "/home/backupsite" vous verrez l'archive en construction qui augmente de taille à chaque refresh.




    Le listing du script

    Je vous déconseille fortement de copier ce listing pour utilisation, ca ne marchera pas à cause des quelques saut de lignes. Suivez plutôt l'installation plus haut.


    #!/bin/bash
    
    #***********************************************************************#
    #             BACKUP SUR FTP OVH  par daniel Polli aka Dansteph         #
    #             ------------------                                        #
    # Ce script a lancer en cron tout les deux ou trois jours backup les    #
    # repertoire "/home" "/usr/local/apache/conf/" et "/var/named"          #
    # et les envois sur votre espace backup FTP. Editez les paramètres      #
    # ci-dessous.                                                           #
    #                                                                       #
    #***********************************************************************#
    
    #########################################################################
    # PARAMETRES A EDITER
    #########################################################################
    SERVER="XXX.XXX.XXX.X"                  #Serveur backup d'OVH
    USER="XXX"                              #Votre nom d'utilisateur
    PASS="XXX"                              #Votre password
    EMAIL="XXX@XXX.com"                     #Pour envoi mail si backup echoue
    MAILSIOK="O"                            #Mettre "O" si on veut un mail aussi si backup ok
    SAVEDIR="/home"                         #Backup de /home SANS slash a la fin
    SAVEDIR1="/usr/local/apache/conf"       #Backup optionnel SANS slash a la fin
    SAVEDIR2="/var/named"                   #Backup optionnel SANS slash a la fin
    #########################################################################
    
    #autres parametre a éditer seulement par confirmé------------------------
    FILENAME=`date +"%d"`_backupsite.tar                #nom du fichier 
    TEMPDIR="/home/backupsite/"                         #repertoire temporaire de home
    EXCLUDEFILE="/home/backupsite/backup_exclude.txt"   #ce fichier doit contenir ...
    #fin parametres, rien pour vous plus bas---------------------------------
    
    STARTTIME=`date +%s`
    
    #pour traduire les codes d'erreur de ncftpput en texte
    declare -a CDERR
    CDERR[1]="Could not connect to remote host."
    CDERR[2]="Could not connect to remote host - timed out."
    CDERR[3]="Transfer failed."
    CDERR[4]="Transfer failed - timed out."
    CDERR[5]="Directory change failed."
    CDERR[6]="Directory change failed - timed out."
    CDERR[7]="Malformed URL."
    CDERR[8]="Usage error."
    CDERR[9]="Error in login configuration file."
    CDERR[10]="Library initialization failed."
    CDERR[11]="Session initialization failed."
    CDERR[142]="Delai depassé pour la connexion."
    
    #envoi des infos sur le log authpriv (le log "secure" sur OVH)
    DATE=`date +%H:%M:%S`
    logger -p authpriv.info "[$0] -->Debut de backup de $SAVEDIR a $DATE"
    echo "[$0] -->Debut de backup de $SAVEDIR a $DATE"
    
    #compression dun ou plusieurs repertoires choisi en parametre
    tar cfzX $TEMPDIR$FILENAME.gz $EXCLUDEFILE $SAVEDIR $SAVEDIR1 $SAVEDIR2
    RESULT=$?
    if [ "$RESULT" != "0" ]; then
            DATE=`date +%H:%M:%S`
            logger -p authpriv.info "[$0] -->ERREUR TAR à $DATE Backup NON effectué."
            echo "[$0] -->ERREUR TAR à $DATE Backup NON effectué."
            echo "Erreur TAR le backup FTP sur OVH non effectue" | mail -s 'ERREUR BACKUP FTP OVH' $EMAIL
            exit $RESULT
    fi
    
    ncftpput -m -u $USER -p $PASS $SERVER "/" $TEMPDIR$FILENAME.gz
    RESULT=$?
    FILESIZE=`ls -l $TEMPDIR$FILENAME.gz | awk '{print $5}'`
    FILESIZE=$(($FILESIZE/1000000))
    rm -f $TEMPDIR$FILENAME.gz
    if [ "$RESULT" != "0" ]; then
            DATE=`date +%H:%M:%S`
            logger -p authpriv.info "[$0] -->ERREUR: ${CDERR[$RESULT]} à $DATE Backup NON effectué."
            echo "[$0] -->ERREUR: ${CDERR[$RESULT]} à $DATE Backup NON effectué."
            echo "[$0] -->ERREUR: ${CDERR[$RESULT]} à $DATE Backup NON effectué." | mail -s 'ERREUR BACKUP FTP OVH' $EMAIL
    else
            TOTALTIME=$(((`date +%s`-$STARTTIME)/60))
            DATE=`date +%H:%M:%S`
            logger -p authpriv.info "[$0] -->Fin de backup normal de $SAVEDIR a $DATE. Durée: $TOTALTIME mn. Taille: $FILESIZE Mb"
            echo "[$0] -->Fin de backup normal de $SAVEDIR a $DATE.  Durée: $TOTALTIME mn. Taille: $FILESIZE Mb"
    
            if [ "$MAILSIOK" = "O" ]; then
                    echo -e "Backup effectué à $DATE Status: OK\nDurée du backup: $TOTALTIME minutes\nFichier: $FILENAME.gz 
    				transféré avec une taille de $FILESIZE Mb" | mail -s 'BACKUP FTP OVH OK' $EMAIL
            fi
    fi
    exit $RESULT
    



    Contact et auteur
    Daniel Polli aka Dansteph
    http://orbiter.dansteph.com
    http://www.fspassengers.com
    http://www.laboiteabroderie.com
    contact: daniel at dansteph.com ou sur le formulaire de contact ici: http://orbiter.dansteph.com



    page vue 7677 fois