====== Différences ======

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

sauvegarde [2013/12/23 11:23]
r.doiteau
sauvegarde [2019/05/11 14:35] (Version actuelle)
Ligne 4: Ligne 4:
 Créer un système de sauvegarde automatique qui sauvegarde les données utilisateurs tous les jours en incrémentation de la sauvegarde complète faite le dimanche. Créer un système de sauvegarde automatique qui sauvegarde les données utilisateurs tous les jours en incrémentation de la sauvegarde complète faite le dimanche.
  
-==== Topologie du réseau ====+===== Topologie du réseau ​=====
  
 {{ :​topologie.png |}} {{ :​topologie.png |}}
Ligne 10: Ligne 10:
 Il existe plusieurs utilisateurs sur les deux machines Debian et Windows7. Leur dossiers personnels sont sur le serveur FreeNas. On souhaite réaliser un sauvegarde de ces dossiers sur le serveur de Backup: une complète faite tous les dimanche et des incrémentales faites tous les jours. Il existe plusieurs utilisateurs sur les deux machines Debian et Windows7. Leur dossiers personnels sont sur le serveur FreeNas. On souhaite réaliser un sauvegarde de ces dossiers sur le serveur de Backup: une complète faite tous les dimanche et des incrémentales faites tous les jours.
  
-==== Cahier des charges ====+===== Cahier des charges ​=====
  
     -Sauvegarde automatisée à travers le réseau des réperotires utilisateurs du serveur nas sur le servBackup.     -Sauvegarde automatisée à travers le réseau des réperotires utilisateurs du serveur nas sur le servBackup.
Ligne 24: Ligne 24:
  
  
-===== Solutions possibles pour la sauvegarde ​===== +===== Etude ===== 
-==== Dump ====+ 
 +==== Partie Freenas ​==== 
 + 
 +Chaque Utilisateur dispose d'un espace de partage, disponible à tout moment. 
 + 
 +{{::​freenas1.png|}} 
 + 
 +Un partage NFS permet une redirection des partages utilisateurs sur le serveur de backup 
 + 
 +{{:​freenas2.png|}} 
 + 
 + 
 +==== Partie Client ==== 
 + 
 +Chaque profil utilisateur doit être créer sur les postes de travail, lors de l'​ouverture de session utilisateur 
 +un script.bat, connecte les espaces de stockage attribués. 
 + 
 +<​note>​echo off 
 + 
 +net use * /DELETE /​PERSISTENT:​yes 
 + 
 +net use N: \\FREENAS\%user% /​user:​%identifiant% %mot de passe%</​note> ​  
 + 
 +{{::​user.png|}} 
 + 
 +Afin d'​éviter tous stockage dans la bibliothèque,​ qui ne serait pas sauvegarder,​ la bibliothèque sera déplacer dans l'​espace de stockage sur le réseau. dans une optique de transparence pour l'​utilisateur. 
 + 
 +{{::​user2.png|}}  
 + 
 +==== Partie Serveur ==== 
 + 
 +Ce serveur Debian non graphique permet la sauvegarde des partages utilisateurs par l'​intermédiaire du serveur Freenas. 
 + 
 +**Le principe est le suivant:​** 
 +  
 +  - Chaque jour une sauvegarde incrémentale,​ compresse les fichiers modifiés du jour 
 +  - Chaque semaine une sauvegarde complète est effectué. 
 +  - 3 jeux de sauvegardes sont conservés afin de parer à toute éventualité. 
 +  - L'​automatisation de ces sauvegardes sera effectué avec cron. 
 +  - Un mail est envoyé à administrateur après chaque sauvegarde.  
 + 
 +**Trois méthode de sauvegarde ont été testées, dump, dd et tar :** 
 + 
 + 
 +== Dump ==
 [[cours:​activite1:​tpsauvegarde:​dump|Sauvegarde Dump]] [[cours:​activite1:​tpsauvegarde:​dump|Sauvegarde Dump]]
 Après essai, dump ne gère que le format "​ext"​ et donc ne peut être utilisé ici. Après essai, dump ne gère que le format "​ext"​ et donc ne peut être utilisé ici.
  
-==== dd ====+== dd ==
 [[cours:​activite1:​tpsauvegarde:​dd|Sauvegarde dd]] [[cours:​activite1:​tpsauvegarde:​dd|Sauvegarde dd]]
 dd est un outil puissant et dangereux, le fait de rater une option peut faire perdre définitivement des données. Les données ne sont pas compressées et il est plus souvent utilisé pour faire des copies complètes de disque durs avec MBR, fichiers supprimés,​... dd est un outil puissant et dangereux, le fait de rater une option peut faire perdre définitivement des données. Les données ne sont pas compressées et il est plus souvent utilisé pour faire des copies complètes de disque durs avec MBR, fichiers supprimés,​...
  
-==== tar ==== +== tar ==
-http://​doc.ubuntu-fr.org/​tar +
-tar permet de copier, de concaténer et de compresser les données. Il garde les droits, le propriétaire et le groupe des fichiers et des répertoires. +
-La compression se fait avec des logiciels annexes tel que gzip, Bzip2, Lzma qui sont plus ou moins performant. ​+
  
 +Un fichier d'​archive créé par l'​opérateur tar n'est pas compressé. On appelle parfois le fichier d'​archivage créé un tarball.
  
 +L'​archivage se fait presque toujours sur un disque. L'​usage le plus courant actuellement consiste cependant à créer ou lire un fichier archive.
 +
 +Tar préserve les droits, le propriétaire et le groupe des fichiers et des répertoires. Il permet également de sauvegarder les liens symboliques et les fichiers spéciaux orientés bloc ou caractère.
 +
 += Extensions et compression =
 +
 +|Utilitaire de compression |extension Unix |extension MS-DOS|
 +|compress ​                 |         ​.tar.Z|  ​       .taz|
 +|gzip |            ​.tar.gz |        .tgz|
 +|bzip2| ​          ​.tar.bz2 |        .tbz|
 +|lzma |             .tar.lz|  ​      .tlz|
 +|xz |          .tar.xz|        .txz|
 +|7zip|            ​.tar.7z |
 +
 +{{images:​compression_tar.png}}
 +
 += Gzip =
 +
 +{{:​gzip.png}}
 +
 +L'​extension usuelle des fichiers « gzippé » est « .gz ». Les logiciels UNIX sont souvent distribués avec des fichiers terminés par .tar.gz ou .tgz, appelés tarball. Ce sont des fichiers archivés avec tar et ensuite compressés avec gzip. Ils peuvent être décompressés avec gzip -d file.tar.gz ou décompressés et désarchivés avec tar xzvf file.tar.gz (: version Linux GNU de tar). Depuis la fin des années 1990, de plus en plus de logiciels sont distribués à la place en archives .tar.bz2 parce que bzip2 permet de meilleurs taux de compression que gzip, au prix d'un temps de compression plus long
 +
 += Bzip2 =
 +
 +{{:​bzip2.png}}
 +
 +L'​extension des fichiers compressés avec ce logiciel est généralement .bz2.
 +bzip2 est très utilisé sous UNIX comme alternative,​ voire comme remplacement à l'​utilitaire gzip, du fait de son efficacité supérieure. Il ne le remplace pas totalement car il est significativement moins rapide ; le choix entre les deux logiciels se fait donc selon l'​usage et les contraintes.
 +
 +L'​utilisation de bzip2 comme alternative lente mais efficace à gzip est remise en question par l'​arrivée de LZMA. En effet, cet algorithme encore plus efficace et plus rapide à la décompression s'​impose de plus en plus pour les tâches de distribution (installeurs sous Windows, paquets de certaines distributions de GNU/​Linux...). bzip2 conserve néanmoins des avantages par rapport à LZMA : une faible utilisation mémoire à la compression,​ la robustesse des archives à la corruption et la parallélisation possible sur de nombreux threads (LZMA ne peut exploiter plus de deux threads).
 +
 += Lzma  =
 +
 + ​L'​outil lzma compresse les fichiers en ajoutant une extension .lzma à la fin du nom de fichier. L'​utilisation de ce format de fichier est fortement déconseillé par les concepteurs2,​ car ce format n'a pas de vérification d'​intégrité des données. En particulier,​ l'​outil lzma ignore toutes données supplémentaires à la fin du fichier; de telles données sont usuellement interprétée comme une erreur par les autres programmes du même type.
 +Le fait d'​avoir un très bon taux de compression et une excellente vitesse de décompression a permis à ce format d'​être utilisé dans des formats de systèmes de fichiers compressés accédés en lecture seule.
 +
 +On peut utiliser lzma au-dessus de l'​archiveur tar à la façon de bzip2 ou gzip. Ce n'est pas incongru, certaines versions de tar (celle de busybox par exemple) gèrent les archives (.tar.lzma) lzma. Puisque lzma gère nativement le multithreading cela peut être plus rapide qu'​utiliser bzip2. (à noter qu'il existe aujourd'​hui une version multithread de bzip2 sous le nom de pbzip2 qui apporte le même type de gain de vitesse).
 +
 += 7zip =
 +
 +{{:​7zip.png}}
 +
 +7-Zip est un logiciel de compression de données et d’archivage de fichiers fonctionnant sous Windows développé par le Russe Igor Pavlov. Il peut également être utilisé avec d’autres systèmes d’exploitation (Linux…) grâce, par exemple, au projet Wine ou au portage de sa version console sous Linux, nommé p7zip.
 +
 +Le programme fonctionne en ligne de commande ou avec une interface graphique traduite dans 79 langues dont le français.
 +
 +Il prend en charge les formats de fichier suivants :
 +
 +  * Archivage (sans compression) : TAR ;
 +  * Compression/​Décompression : 7z, BZIP2, GZIP, WIM, XZ et ZIP;
 +  * Décompression : APM, ARJ, CAB, CHM, Cpio, image disque CramFS, DEB, DMG, image disque HFS, image ISO (ISO 9660), LZH, LZMA, MBR, MSI, NSIS, image disque NTFS, RAR, RPM, UDF, VHD, XAR et Z.
 +
 +7-Zip prend en charge également le procédé de chiffrement AES en 256 bits et la création d’archives auto-extractibles.
 +
 +Les formats natifs 7z et XZ sont des formats modulaires ouverts qui permettent le stockage de fichiers compressés utilisant différents algorithmes,​ avec des noms de fichiers Unicode. Par défaut, le logiciel crée des fichiers au format d’archivage 7z (avec l’extension .7z) en utilisant les algorithmes de compression LZMA ou LZMA2, qui permettent la création d’archives plus compactes que les formats tels que ZIP, voire que RAR ou ACE, lorsque les fichiers à compresser ne sont pas de type multimédia (images ou musique).
 +
 +Le concepteur affirme que son programme compresse mieux que WinRAR (3.50) et WinZip (10.0) au format 7z, et qu'il produit des fichiers ZIP mieux compressés que tout autre compresseur tout en étant compatible avec tous les décompresseurs existant.
 +
 += Xz =
 +
 +{{:xz.png}}
 +
 +XZ est un format de fichier destiné à accueillir des données compressées. C'est une spécification ouverte. Le but de ce format est d'​éviter la multiplication des formats à chaque nouvel algorithme de compression. Ce format permet de choisir l'​algorithme entre plusieurs algorithmes de compression mais aussi entre plusieurs algorithmes de vérification d'​intégrité.
 +
 +La méthode de compression par défaut du format XZ est l'​algorithme de compression LZMA2, qui est une nouvelle version de l'​algorithme LZMA. XZ ne permet actuellement de choisir qu'​entre ces deux algorithmes.
 +
 +Les algorithmes disponibles pour la vérification de l'​intégrité des données compressées sont CRC-32, CRC-64 et SHA-256. Par défaut, il utilise CRC-64, qui a semblé être aux concepteurs un bon compromis entre la vitesse et la garantie d'​intégrité.
 +
 +<​note>​**Ce format sera utilisé dans notre script de sauvegarde**</​note>​
 +
 += Commandes courantes =
 +
 +
 +Voici les commandes courantes de compression et décompression des archives en fonction de leur extension.
 +
 +Afficher liste des fichiers :
 +
 +   tar -tf archive.tar
 +
 +Extraction (éventuellement pour un fichier ou un répertoire spécifique) :
 +
 +   tar -xvf archive.tar [fichier1... ]
 +
 +Décompression + extraction (spécifique à certaines implémentations,​ comme GNU tar ou bsdtar) :
 +
 +   tar -xzvf archive.tar.gz
 +   tar -xjvf archive.tar.bz2
 +   tar -xYvf archive.tar.lzma
 +
 +Plus généralement,​ on peut arriver au même résultat avec :
 +
 +   zcat archive.tar.gz ​ | tar -xv
 +   bzcat archive.tar.bz2 | tar -xv
 +
 +Remarque : on utilise parfois gzcat ou gzip -cd.
  
 Archivage : Archivage :
Ligne 60: Ligne 197:
    tar -c . | ( cd /​Repertoire/​Destination;​ tar -xv )    tar -c . | ( cd /​Repertoire/​Destination;​ tar -xv )
  
-<note tip>[[cours:​activite_1:​initiation_au_shell:​commande_linux:​tar|Manuel tar]]</​note>​ +<note tip>​[[:​commande_linux:​tar|Manuel tar]]</​note>​
  
  
-==== Solution retenue ​====+ 
 +**Solution retenue** 
 La solution que nous avons retenue est tar car il offre la possibilité de concaténer et de compresser les données rapidement suivant la compression choisie. Nous allons donc réaliser un script de sauvegarde qui concatènera et compressera les données utilisateurs. Nous utiliserons l'​outil cron pour automatiser le tout. La solution que nous avons retenue est tar car il offre la possibilité de concaténer et de compresser les données rapidement suivant la compression choisie. Nous allons donc réaliser un script de sauvegarde qui concatènera et compressera les données utilisateurs. Nous utiliserons l'​outil cron pour automatiser le tout.
 La compression se fera avec Lzma car c'est le plus performant et le moins couteux en ressources. La compression se fera avec Lzma car c'est le plus performant et le moins couteux en ressources.
Ligne 70: Ligne 209:
 ===== Déroulement de la sauvegarde et de la restauration ===== ===== Déroulement de la sauvegarde et de la restauration =====
  
-==== La Sauvegarde ====+== La Sauvegarde ​== 
 + 
 +La sauvegarde se déroule en plusieurs étapes: 
 +==Initialisation et créations des différents dossiers et fichiers:​== 
 +__script_init.sh__:​ 
 +Les dossiers crées sont:  
 +                         ​-mnt/​home => point de montage du FreeNas. 
 +                         ​-mnt/​sauvegarde/​complete => la sauvegarde complète sera placée ici. 
 +                         ​-mnt/​sauvegarde/​incrementale => les sauvegardes incrémentielles seront placées ici. 
 +                         ​-mnt/​sauvegarde/​script => les scripts seront placés ici. 
 + 
 +Le script Initialisation créer les fichiers scripts suivants dans le dossier mnt/​sauvegarde/​script:​ 
 + 
 +{{::​script.png|}} 
 + 
 +__ConfNas.txt__:​ Contient l'​adresse ip du serveur FreeNas et la où il est monté. 
 +__sauvegarde.sh__:​ Programme principale de la sauvegarde qui fait appel au différents fonctions et variables nécessaires. Il contient également l'aide à l'​utilisateur. 
 +__script_conf.sh__:​ Inscrit dans le fichier ConfNas.txt la configuration du FreeNas (adresse Ip et point de montage.) 
 +__script_listfichier.sh__:​ Lit le fichier de log et l'​affiche. 
 +__script_restauration.sh__:​ Fonctions et variables nécessaires à la restauration de la sauvegarde. 
 +__script_sauvegarde.sh__:​ Fonctions et variables nécessaires à la sauvegarde. 
 + 
 +==== Fichier complet d'​installation ==== 
 + 
 +{{::​sauv.tar|}} 
 + 
 +===== ReadMe ===== 
 + 
 +<​code=bash>​ 
 + 
 +##################################################################​ 
 +# PROJET : SCRIPT DE SAUVEGARDE ​                                 # 
 +# FICHIER : README.txt ​                                          # 
 +# EQUIPE : M.BAILLEUL R.DOITEAU S.CHEVRIER M.CHANTELOUP ​         # 
 +##################################################################​ 
 + 
 + 
 ++------------------------------+ 
 +|------- ​    ​RESUME ​    ​-------| 
 ++------------------------------+ 
 + 
 +Ce programme sauvegarde les répertoires utilisateurs tout les jours de façon incrémentale et fait une sauvegarde complète une fois par semaine. 
 +Il envoie un mail à l'​administrateur avec le détail de la sauvegarde. 
 + 
 + 
 ++------------------------------+ 
 +|------- ​   SOMMAIRE ​   -------| 
 ++------------------------------+ 
 + 
 +Installation 
 +|_Prérequis 
 +|_Installation du programme 
 +Configuration 
 +|_Configuration du programme 
 +Utilisation 
 +|_Usage 
 + 
 + 
 ++------------------------------+ 
 +|------- ​ INSTALLATION ​ -------| 
 ++------------------------------+ 
 + 
 +---- Prérequis ---- 
 + 
 +Il est nécessaire d'​avoir un serveur de fichier (FreeNas), un serveur de sauvegarde (sous Debian 7) et des machines clientes (Windows 7 et/ou Debian 7) 
 +Tout ceci dans le même réseau. 
 + 
 + 
 +---- Installation du programme ---- 
 + 
 +- Télécharger le fichier sauv.tar 
 +- Le décompresser avec la commande: tar xvf sauv.tar, il décompresse l'​archive à l'​emplacement du fichier sauv.tar. 
 +- Allez dans PROJET_SAUVEGARDE. 
 +- Lancer la commande: bash script_init.sh,​ il crée les dossiers et fichiers nécessaire au fonctionnement des sauvegardes et initialise l'​environnement. 
 + 
 + 
 ++------------------------------+ 
 +|------- ​ CONFIGURATION ​ ------| 
 ++------------------------------+ 
 + 
 +---- Configuration du programme ---- 
 + 
 +- Pour lancer la configuration de la sauvegarde, lancer la commande: sauvegarde.sh -C -i "​votre_ip_serveur"​ -m "​votre_répertoire_source"​ 
 +- L'​installation à configurée crontab, de façon à ce que le script de sauvegarde soit lancé tous les jours. 
 +- Pour modifier la fréquence ou pour desactiver la sauvegarde, il faut éditer /​etc/​crontab et commenter la dernière ligne ou la modifier en fonctions de la configuration souhaitée 
 + 
 + 
 ++------------------------------+ 
 +|------- ​ UTILISATION ​ --------| 
 ++------------------------------+ 
 + 
 + 
 +---- Usage ---- 
 +>​sauvegarde.sh -h 
 + 
 +Les options obligatoires : 
 + 
 + 
 +  -C , -i , -m , Configuration du serveur de fichier 
 +       [-i] XXX.XXX.XXX.XXX ​    IP du serveur de fichiers 
 +       [-m] /rep                Définit l'​emplacement du répertoire source 
 + 
 + 
 +  -R, [-u],​[-r],​[-f],​[-e],​[-d], ​ Restauration 
 +       [-u] user                 suivi du nom de l'​utilisateur 
 +       [-r] repertoire ​          suivi du nom du repertoire 
 +       [-f] fichier ​             suivi du nom du fichier 
 +       [-e] .ext                 suivi de l'​extension 
 +       [-d] date                 suivi de la date de récupération souhaité 
 + 
 + 
 +  -S, [-c]  ​Sauvegarde ​des Répertoire personnels 
 +       ​[-c] ​                     force la sauvegarde complète 
 + 
 + 
 +Exemple d'​utilisation : 
 +  # Configuration du serveur de fichier 
 +    bash sauvegarde.sh -C -i 192.168.1.1 -m /mnt/vol0 
 +  # Sauvegarde des répertoires utilisateurs 
 +    bash sauvegarde.sh -S 
 +    - Pour forcer une sauvegarde complete 
 +    bash sauvegarde.sh -S -c 
 +  # Restauration : 
 +    - De tous les fichier de l'​utilisateur '​util1'​ avec l'​extension .doc sauvegardé le 22/​10/​2013 
 +    bash sauvegarde.sh -R -u util1 -f *.doc -d 10-22 
 +    - Du repertoire personnel de util2 
 +    bash sauvegarde.sh -R -u util2 
 +</​code>​ 
 + 
 +===== Détails des différents scripts ===== 
 + 
 +==script_init.sh== 
 + 
 +<​code=bash>​ 
 +#!/bin/sh 
 +##################################################################​ 
 +# PROJET : SCRIPT DE SAUVEGARDE ​                                 # 
 +# FICHIER : script_init.sh ​                                      # 
 +# EQUIPE : M.BAILEUL R.DOITEAU S.CHEVRIER M.CHANTELOUP ​          # 
 +##################################################################​ 
 + 
 + 
 +REPSAVE=/​mnt/​sauvegarde 
 +REPSAUVALL=$REPSAVE/​complete 
 +REPSAUVINC=$REPSAVE/​incrementale 
 +REPLOG=$REPSAVE/​journal 
 +REPSCRIPT=$REPSAVE/​script 
 +REPHOME=/​mnt/​home 
 + 
 +#########################################################​ CREATION REPERTOIRE ############################################################​ 
 + 
 +mkdir $REPSAVE 
 +mkdir $REPSAUVALL 
 +mkdir $REPSAUVINC 
 +mkdir $REPLOG 
 +mkdir $REPSCRIPT 
 +mkdir $REPHOME 
 + 
 +##############################################################​ COPIE SCRIPT ##############################################################​ 
 + 
 +cp ./​data/​script_sauvegarde.sh $REPSCRIPT/​script_sauvegarde.sh 
 +cp ./​data/​script_restauration.sh $REPSCRIPT/​script_restauration.sh 
 +cp ./​data/​script_conf.sh $REPSCRIPT/​script_conf.sh 
 +cp ./​data/​script_listfichier.sh $REPSCRIPT/​script_listfichier.sh 
 +cp ./​data/​sauvegarde.sh $REPSCRIPT/​sauvegarde.sh 
 + 
 +chmod 755 $REPSCRIPT/​sauvegarde.sh 
 + 
 +################################################################​ CRONTAB #################################################################​ 
 + 
 +echo "0 2 * * * root bash /​mnt/​sauvegarde/​script/​sauvegarde.sh -S" >>/​etc/​crontab 
 + 
 +################################################################​ COMMANDE ################################################################​ 
 + 
 +echo "Pour renseigné l'​adresse IP et le repertoire source de votre sauvegadre"​ 
 +echo "​Executez cette commande :" 
 +echo "bash sauvegarde.sh -C -i (l'ip du serveur) -m (repertoire source)"​ 
 + 
 +##################################################################​ MSMTP #################################################################​ 
 +aptitude install msmtp -y --assume-yes 
 + 
 +(echo "​account default"​ 
 +echo "tls on" 
 +echo "host smtp.gmail.com"​ 
 +echo "port 587" 
 +echo "from doiteau.romain@gmail.com"​ 
 +echo "auth on" 
 +echo "user doiteau.romain"​ 
 +echo "​password ********"​ 
 +echo "​tls_starttls on" 
 +echo "​tls_certcheck on" 
 +echo "​tls_trust_file /​etc/​ssl/​certs/​ca-certificates.crt"​ 
 +) > /​root/​.msmtprc 
 + 
 +##################################################################​ PATH ##################################################################​ 
 + 
 +varPATH=$PATH 
 +echo "​export PATH=/​mnt/​sauvegarde/​script:​$varPATH"​ >> /​root/​.bashrc 
 +su 
 +exit</​code>​ 
 + 
 + 
 +==ConfNas.txt== 
 + 
 +<​code=bash>​ 
 +192.168.231.110 #Adresse du FreeNas 
 +/​mnt/​vol0 ​      #​Point de montage du FreeNas 
 +</​code>​ 
 + 
 +==sauvegarde.sh== 
 + 
 +<​code=bash>​ 
 +#!/bin/sh 
 +##################################################################​ 
 +# PROJET : SCRIPT DE SAUVEGARDE ​                                 # 
 +# FICHIER : script_sauvegarde.sh ​                                # 
 +# EQUIPE : M.BAILEUL R.DOITEAU S.CHEVRIER M.CHANTELOUP ​          # 
 +##################################################################​ 
 + 
 + 
 +###################################################################​ 
 +############################​ VARIABLES ############################​ 
 +###################################################################​ 
 +REPSAVE=/​mnt/​sauvegarde 
 +REPSCRIPT=$REPSAVE/​script 
 +SAUVCOMP=0 
 +OPTSCRIPT="​."​ 
 +CIPNAS="​."​ 
 +CREPFNAS="​."​ 
 +USER="​.*"​ 
 +DOSSIER="​.*"​ 
 +FICHIER="​.*"​ 
 +EXTENSION="​.*"​ 
 +DATER="​.*"​ 
 + 
 +###################################################################​ 
 +#############################​ OPTION ##############################​ 
 +###################################################################​ 
 + 
 +#### Fonctions 
 +usage() { 
 +  nom=`basename $0` 
 +  echo "​Usage:​ bash sauvegarde.sh OPTION"​ 
 +  echo "Les options obligatoires :" 
 +  echo " ​        "​ 
 +  echo " ​  "​ 
 +  echo " ​ -C , -i , -m , Configuration du serveur de fichier " 
 +  echo " ​      [-i] XXX.XXX.XXX.XXX ​    IP du serveur de fichiers ​ " 
 +  echo " ​      [-m] /rep                Définit l'​emplacement du répertoire source " 
 +  echo " ​        "​ 
 +  echo " ​  "​ 
 +  echo " ​ -R, [-u],​[-r],​[-f],​[-e],​[-d], ​ Restauration " 
 +  echo " ​      [-u] user                 suivi du nom de l'​utilisateur"​ 
 +  echo " ​      [-r] repertoire ​          suivi du nom du repertoire"​ 
 +  echo " ​      [-f] fichier ​             suivi du nom du fichier"​ 
 +  echo " ​      [-e] .ext                 suivi de l'​extension"​ 
 +  echo " ​      [-d] date                 suivi de la date de récupération souhaité"​ 
 +  echo " ​        "​ 
 +  echo " ​  "​ 
 +  echo " ​ -S, [-c]  Sauvegarde des Répertoire personnels"​ 
 +  echo " ​      ​[-c] ​                     force la sauvegarde complète " 
 +  echo " ​    "​ 
 +  echo " ​      "​ 
 +  echo "​Exemple d'​utilisation :" 
 +  echo " ​ # Configuration du serveur de fichier"​ 
 +  echo " ​   bash sauvegarde.sh -C -i 192.168.1.1 -m /​mnt/​vol0"​ 
 +  echo " ​ # Sauvegarde des répertoires utilisateurs"​ 
 +  echo " ​   bash sauvegarde.sh -S" 
 +  echo " ​   - Pour forcer une sauvegarde complete"​ 
 +  echo " ​   bash sauvegarde.sh -S -c" 
 +  echo " ​ # Restauration :" 
 +  echo " ​   - De tous les fichier de l'​utilisateur '​util1'​ avec l'​extension .doc sauvegardé le 22/​10/​2013"​ 
 +  echo " ​   bash sauvegarde.sh -R -u util1 -f *.doc -d 10-22"​ 
 +  echo " ​   - Du repertoire personnel de util2"​ 
 +  echo " ​   bash sauvegarde.sh -R -u util2"​ 
 +  } 
 + 
 +#### TEST ET LECTURE DES OPTIONS 
 +## Exeption de l'​option -h ou --help 
 +if [ $# -eq 1 -a "​$1"​ = -h ] || [ $# -eq 1 -a "​$1"​ = --help ] ; then usage; exit 2; fi 
 + 
 +## Test et Traitement des options 
 +while getopts ":​SRcCi:​m:​u:​r:​f:​d:​e:"​ option 
 +do 
 + case $option in 
 + c) 
 + if [ $OPTSCRIPT = "​sauvegarde"​ ];then 
 + echo "​Sauvegarde complete forcé"​ 
 + SAUVCOMP=1 
 + else 
 + echo "​l'​option -c ne fonctionne qu'​avec l'​option -S" 
 + echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 + exit 2 
 + fi 
 + ;; 
 + C) 
 + if [ $OPTSCRIPT = "​."​ ];then 
 + echo "​Configuration Nas" 
 + OPTSCRIPT="​configuration"​ 
 + else 
 + echo "​l'​option -C n s'​utilise pas avec les options -S ou -R" 
 + echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 + fi 
 + ;; 
 + d) 
 + if [ $OPTSCRIPT = "​restauration"​ ];then 
 + DATER="​$OPTARG.*"​ 
 + else 
 +                                echo "​l'​option -d ne fonctionne qu'​avec l'​option principale -R" 
 +                                echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 +                        fi 
 +                        ;; 
 +                e) 
 +                        if [ $OPTSCRIPT = "​restauration"​ ];then 
 +                                EXTENSION="​$OPTARG.*"​ 
 +                        else 
 +                                echo "​l'​option -e ne fonctionne qu'​avec l'​option principale -R" 
 +                                echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 +                        fi 
 +                        ;; 
 +                f) 
 +                        if [ $OPTSCRIPT = "​restauration"​ ];then 
 +                                FICHIER="​$OPTARG.*"​ 
 +                        else 
 +                                echo "​l'​option -f ne fonctionne qu'​avec l'​option principale -R" 
 +                                echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 +                        fi 
 +                        ;; 
 + i) 
 + if [ $OPTSCRIPT = "​configuration"​ ];then 
 + echo $OPTARG |grep -Eq '​^((25[0-5]|2[0-4][0-9]|[01]?​[0-9][0-9]?​)\.){3}(25[0-4]|2[0-4][0-9]|[01]?​[0-9][0-9]?​)$'​ 
 + if [ $? = 0 ];then 
 + CIPNAS=$OPTARG 
 + else 
 + echo "-i $OPTARG => IP Non Valide"​ 
 + exit 1 
 + fi 
 + else 
 + echo "​l'​option -i ne fonctionne qu'​avec l'​option -C et -m" 
 + echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 + exit 2 
 + fi 
 + ;; 
 + m) 
 + if [ $OPTSCRIPT = "​configuration"​ ];then 
 + CREPFNAS=$OPTARG 
 + else 
 + echo "​l'​option -m ne fonctionne qu'​avec l'​option -C et -i" 
 + echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 + exit 2 
 + fi 
 + ;; 
 +                R) 
 + if [ $OPTSCRIPT = "​."​ ];then 
 +                        OPTSCRIPT="​restauration"​ 
 + else 
 +                                echo "​l'​option -R n s'​utilise pas avec les options -S ou -C" 
 +                                echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 +                        fi 
 +                        ;; 
 +                r) 
 +                        if [ $OPTSCRIPT = "​restauration"​ ];then 
 +                                DOSSIER="​$OPTARG.*"​ 
 +                        else 
 +                                echo "​l'​option -r ne fonctionne qu'​avec l'​option principale -R" 
 +                                echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 +                        fi 
 +                        ;; 
 + S) 
 +                        if [ $OPTSCRIPT = "​."​ ];then 
 + echo "​Sauvegarde des répertoires utilisateur"​ 
 + OPTSCRIPT="​sauvegarde"​ 
 + else 
 +                                echo "​l'​option -S n s'​utilise pas avec les options -C ou -R" 
 +                                echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 +                        fi 
 + ;; 
 +                u) 
 +                        if [ $OPTSCRIPT = "​restauration"​ ];then 
 +                                USER="​$OPTARG.*"​ 
 +                        else 
 +                                echo "​l'​option -u ne fonctionne qu'​avec l'​option principale -R" 
 +                                echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 +                                exit 2 
 +                        fi 
 +                        ;; 
 + :) 
 + echo "​L'​option $OPTARG requiert un argument"​ 
 + exit 1 
 + ;; 
 + \?) 
 + echo "​$OPTARG : option invalide"​ 
 + echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 + exit 2 
 + ;; 
 + esac 
 +done 
 + 
 + 
 +###################################################################​ 
 +###########################​ DEBUT SCRIPT ##########################​ 
 +###################################################################​ 
 + 
 +## Définit l'​action selon les options passé dans la commande 
 +case $OPTSCRIPT in 
 + sauvegarde) 
 + if [ $SAUVCOMP = 1 ];then 
 + bash $REPSCRIPT/​script_sauvegarde.sh -f 
 + else 
 + bash $REPSCRIPT/​script_sauvegarde.sh 
 + fi 
 + ;; 
 + restauration) 
 + echo "​RESTAURATION"​ 
 + #echo "-u $USER -r $DOSSIER -f $FICHIER -e $EXTENSION -d $DATER"​ 
 + bash $REPSCRIPT/​script_restauration.sh -u "​$USER"​ -r "​$DOSSIER"​ -f "​$FICHIER"​ -e "​$EXTENSION"​ -d "​$DATER"​ 
 + ;; 
 + configuration) 
 + echo "​..."​ 
 + if [ $CIPNAS = "​."​ ] || [ $CREPFNAS = "​."​ ];then 
 + echo "Il faut renseigné l'​option -i suivi de l'ip du Serveur de fichier et l'​option -m suivi du chemin du montage NFS" 
 + echo "​Saisissez « bash script_sauvegarde.sh --help » pour plus d'​informations."​ 
 + exit 2 
 + else 
 + bash $REPSCRIPT/​script_conf.sh $CIPNAS $CREPFNAS 
 + echo "​Effectué!"​ 
 + fi</​code>​ 
 + 
 +==script_conf.sh== 
 + 
 +<​code=bash>#​!/​bin/​sh 
 +##################################################################​ 
 +# PROJET : SCRIPT DE SAUVEGARDE ​                                 # 
 +# FICHIER : script_conf.sh ​                                      # 
 +# EQUIPE : M.BAILEUL R.DOITEAU S.CHEVRIER M.CHANTELOUP ​          # 
 +##################################################################​ 
 + 
 +FICCONF=/​mnt/​sauvegarde/​script/​ConfNas 
 +echo "​$1"​ >​$FICCONF 
 +echo "​$2"​ >>​$FICCONF</​code>​ 
 + 
 +==script_listfichier.sh== 
 + 
 +<​code=bash>#​!/​bin/​sh 
 +##################################################################​ 
 +# PROJET : SCRIPT DE SAUVEGARDE ​                                 # 
 +# FICHIER : script_listfichier.sh ​                               # 
 +# EQUIPE : M.BAILEUL R.DOITEAU S.CHEVRIER M.CHANTELOUP ​          # 
 +##################################################################​ 
 + 
 +###################################################################​ 
 +############################​ VARIABLES ############################​ 
 +###################################################################​ 
 +FICHIER=$1 
 +REPSAUV=$2 
 +NOMSAUV=$3 
 +REPLOG=$4 
 + 
 +###################################################################​ 
 +#########################​ DEBUT PROGRAMME #########################​ 
 +###################################################################​ 
 +#Lecture du fichier 
 +echo "​-------------------------- $NOMSAUV --------------------------"​ > $REPLOG/​tmplistefic_modif.log 
 +for LIGNE in $(cat $FICHIER); do 
 + echo "​$LIGNE:​$REPSAUV:​$NOMSAUV"​ >> $REPLOG/​tmplistefic_modif.log 
 +done</​code>​ 
 + 
 +==script_restauration.sh== 
 + 
 +<​code=bash>​ 
 +#!/bin/sh 
 +##################################################################​ 
 +# PROJET : SCRIPT DE SAUVEGARDE ​                                 # 
 +# FICHIER : script_restauration.sh ​                              # 
 +# EQUIPE : M.BAILEUL R.DOITEAU S.CHEVRIER M.CHANTELOUP ​          # 
 +##################################################################​ 
 + 
 + 
 +###################################################################​ 
 +############################​ VARIABLES ############################​ 
 +###################################################################​ 
 +REPSAVE=/​mnt/​sauvegarde 
 +REPSAUVALL=$REPSAVE/​complete 
 +REPSAUVINC=$REPSAVE/​incrementale 
 +REPLOG=$REPSAVE/​journal 
 +REPSCRIPT=$REPSAVE/​script 
 +IPNAS=`head -1 $REPSCRIPT/​ConfNas` 
 +REPFNAS=`tail -1 $REPSCRIPT/​ConfNas` 
 +REPHOME=/​mnt/​home 
 +SAVELIST=$REPSAUVINC/​.savelist 
 +DATESAUV=`date +%Y_sem-%W_date-%m-%d_%Hh-%Mm` 
 +FICLOG=$REPLOG/​detail_$DATESAUV.log 
 +SEMAINE=`date +%W` 
 + 
 +###################################################################​ 
 +#############################​ OPTION ##############################​ 
 +###################################################################​ 
 +## Test et Traitement des options 
 +while getopts ":​u:​r:​f:​d:​e:"​ option 
 +do 
 +        case $option in 
 + d) 
 + DATER=$OPTARG 
 + ;; 
 + e) 
 + EXTENSION=$OPTARG 
 + ;; 
 + f) 
 + FICHIER=$OPTARG 
 + ;; 
 + r) 
 + DOSSIER=$OPTARG 
 + ;; 
 + u) 
 + USER=$OPTARG 
 + ;; 
 +        esac 
 +done 
 + 
 + 
 + 
 +###################################################################​ 
 +###########################​ DEBUT SCRIPT ##########################​ 
 +###################################################################​ 
 +#echo "USER : $USER"​ 
 +#echo "​DOSSIER : $DOSSIER"​ 
 +#echo "​FICHIER : $FICHIER"​ 
 +#echo "​EXTENSION : $EXTENSION"​ 
 +#echo "DATER : $DATER"​ 
 + 
 +#echo "egrep '​^/​mnt/​home/​$USER$DOSSIER$FICHIER$EXTENSION$DATER'​ $REPLOG/​listfichier_s$SEMAINE.log &> $REPLOG/​tmpRest.log"​ 
 +mount -t nfs $IPNAS:​$REPFNAS $REPHOME 
 +var=/​mnt/​home/​$USER$DOSSIER$FICHIER$EXTENSION$DATER 
 +egrep $var $REPLOG/​listfichier_s$SEMAINE.log &> $REPLOG/​tmpRest.log 
 +while read ligne;do 
 + FIC=`echo "​$ligne"​|cut -d":"​ -f1` 
 + REPS=`echo "​$ligne"​|cut -d":"​ -f2` 
 + NOMS=`echo "​$ligne"​|cut -d":"​ -f3` 
 + #echo 
 + #echo "​fichier : $FIC"​ 
 + #echo "REP : $REPS"​ 
 + #echo "NOM : $NOMS"​ 
 + if [ $REPS = CPT ];then 
 + REPTAR=$REPSAUVALL 
 + else 
 + REPTAR=$REPSAUVINC 
 + fi 
 + #echo "tar xPvf $REPTAR/​$NOMS $FIC"​ 
 + tar xvPfJ $REPTAR/​$NOMS $FIC 
 +done < $REPLOG/​tmpRest.log 
 +rm $REPLOG/​tmpRest.log 
 +umount $REPHOME</​code>​ 
 + 
 +==script_sauvegarde.sh== 
 + 
 +<​code=bash>#​!/​bin/​sh 
 +##################################################################​ 
 +# PROJET : SCRIPT DE SAUVEGARDE ​                                 # 
 +# FICHIER : script_sauvegarde.sh ​                                # 
 +# EQUIPE : M.BAILEUL R.DOITEAU S.CHEVRIER M.CHANTELOUP ​          # 
 +##################################################################​ 
 + 
 + 
 +###################################################################​ 
 +###################​ TEST ET LECTURE DES OPTIONS ###################​ 
 +###################################################################​ 
 +SAUVCOMP=0 
 +# Test et Traitement des options 
 +while getopts "​f"​ option 
 +do 
 + case $option in 
 + f) 
 + #echo "​Sauvegarde Complète forcée"​ 
 + echo "​..."​ 
 + SAUVCOMP=1 
 + ;; 
 + esac 
 +done 
 + 
 + 
 +###################################################################​ 
 +############################​ VARIABLES ############################​ 
 +###################################################################​ 
 +REPSAVE=/​mnt/​sauvegarde 
 +REPSAUVALL=$REPSAVE/​complete 
 +REPSAUVINC=$REPSAVE/​incrementale 
 +REPLOG=$REPSAVE/​journal 
 +REPSCRIPT=$REPSAVE/​script 
 +IPNAS=`head -1 $REPSCRIPT/​ConfNas` 
 +REPFNAS=`tail -1 $REPSCRIPT/​ConfNas` 
 +REPHOME=/​mnt/​home 
 +SAVELIST=$REPSAUVINC/​.savelist 
 +DATESAUV=`date +%Y_sem-%W_date-%m-%d_%Hh-%Mm` 
 +FICLOG=$REPLOG/​detail_$DATESAUV.log 
 +JOURSAUVALL=lundi 
 +JOURJ=`date +%A` 
 +SEMAINE=`date +%W` 
 + 
 +###################################################################​ 
 +###########################​ DEBUT SCRIPT ##########################​ 
 +###################################################################​
  
 +## Sauvegarde des répertoires utilisateurs
 +echo "​subject:​ Sauvegarde du `date`">​$FICLOG
 +echo "​________________________________ Déroulement de la dernière sauvegarde effectué________________________________"​ >>​$FICLOG
 +echo "​******Démontage de /mnt/home, dans la cas ou il serait déja monté(par exemple lors de test sur le serveur BackUp"​ >>​$FICLOG
 +umount /mnt/home &>>​$FICLOG
 +echo "​******Montage nfs du FREENAS vers /​mnt/​home"​ >>​$FICLOG
 +mount -t nfs $IPNAS:​$REPFNAS $REPHOME &>>​$FICLOG
 +if [ $? = 0 ];then
 + echo "​****Le montage c'est effectué corectement,​ On va regardé si il s'agit du jour de sauvegarde complete ou incrementale"​ >>​$FICLOG
 + echo "​----------------------------------------------- DEBUT DE LA SAUVEGARDE -----------------------------------------------"​ >>​$FICLOG
 + if [ $JOURSAUVALL = $JOURJ ] || [ $SAUVCOMP = 1 ];then
 + echo "​......"​
 + echo "​**Sauvegarde COMPLETE"​ >>​$FICLOG
 + rm -fv $SAVELIST &>>​$FICLOG
 + tar -v -J -P --create --file=$REPSAUVALL/​sauv_$DATESAUV.tar.xz --listed-incremental=$SAVELIST $REPHOME &>​$REPLOG/​tmpTar.log
 + cat $REPLOG/​tmpTar.log &>>​$FICLOG
 + grep ^$REPHOME $REPLOG/​tmpTar.log >​$REPLOG/​tmpListFic2.log
 + grep -v '/​$'​ $REPLOG/​tmpListFic2.log >​$REPLOG/​tmpListFic.log
 + bash $REPSCRIPT/​script_listfichier.sh $REPLOG/​tmpListFic.log CPT sauv_$DATESAUV.tar.xz $REPLOG
 + cat $REPLOG/​tmplistefic_modif.log >> $REPLOG/​listfichier_s$SEMAINE.log
 + else
 + echo "​.."​
 + echo "​**Sauvegarde INCEMENTALE"​ >>​$FICLOG
 + tar -v -P -J --create --file=$REPSAUVINC/​sauv_$DATESAUV.tar.xz --listed-incremental=$SAVELIST $REPHOME &>​$REPLOG/​tmpTar.log
 + cat $REPLOG/​tmpTar.log &>>​$FICLOG
 + grep ^$REPHOME $REPLOG/​tmpTar.log >>​$REPLOG/​tmpListFic2.log
 + grep -v '/​$'​ $REPLOG/​tmpListFic2.log >​$REPLOG/​tmpListFic.log
 + bash $REPSCRIPT/​script_listfichier.sh $REPLOG/​tmpListFic.log INC sauv_$DATESAUV.tar.xz $REPLOG
 + cat $REPLOG/​tmplistefic_modif.log >> $REPLOG/​listfichier_s$SEMAINE.log
 + fi
 + rm $REPLOG/​tmp*
 + echo "​."​
 + echo "​----------------------------------------------- FIN DE LA SAUVEGARDE -----------------------------------------------"​ >>​$FICLOG
 + echo "​Effectué!"​
 +else
 + echo "​Erreur montage nfs!!!"​ > $REPLOG/​mail.log
 +fi
 +umount $REPHOME
 +cat "​$FICLOG"​ | msmtp doiteau.romain@gmail.com</​code>​
  
 
sauvegarde.1387794209.txt.gz · Dernière modification: 2019/05/11 14:35 (modification externe)     Haut de page