====== Projet de sauvegarde ======

===== But =====
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.png |}}

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

-Sauvegarde automatisée à travers le réseau des réperotires utilisateurs du serveur nas sur le servBackup.
-Sauvegarde incrémentale.
-On doit pouvoir restaurer le volume (ou le répertoire /home) dans son intégralité.
-On doit pouvoir restaurer un fichier unique.
-Le programme doit écrire dans un fichier journal (log).
-Envoi d'un mail de notification (états des opérations, fichiers sauvegardé…)
-Le serveur nas est-il accessible ?
-Ce script s’exécute à partir d’une crontab
-Une exécution manuelle permet un affichage d’informations sur la sortie standard. Les sauvegardes doivent pouvoir être lancées manuellement ou automatiquement. L’exécution manuelle est nécessaire lors d’une sauvegarde prévue avant une manipulation d’administration sur le serveur.
-Ce script est principalement conçu pour une exécution en arrière-plan ; donc un nombre limité de messages envoyés vers les sorties standard du système.


===== Etude =====

==== 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]]
Après essai, dump ne gère que le format "ext" et donc ne peut être utilisé ici.

== 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,...

== tar ==

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 :

tar -cvf fichier.tar MonRepertoire1 [MonRepertoire2... ]

Compression et archivage :

tar -czvf archive.tar.gz MonRepertoire
tar -cjvf archive.tar.bz2 MonRepertoire

ou encore :

tar -cv MonRepertoire | gzip > archive.tar.gz
tar -cv MonRepertoire | bzip2 > archive.tar.bz2

Ceci créera une archive compressée dans le répertoire courant (donc un seul fichier) contenant l'ensemble des fichiers du répertoire MonRepertoire et de ses sous-répertoires.
c
opie d'une partie de l'arborescence vers un autre endroit :

tar -c . | ( cd /Repertoire/Destination; tar -xv )

<note tip>[[:commande_linux:tar|Manuel tar]]</note>



**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 compression se fera avec Lzma car c'est le plus performant et le moins couteux en ressources.


===== Déroulement de la sauvegarde et de la restauration =====

== 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.txt · Dernière modification: 2019/05/11 14:35 (modification externe)     Haut de page