#!/bin/bash
#################################################################
# Backup du repertoire /home
# Prerequis : les repertoires doivent exister
#	/mnt/bu
#	/home/root/save_root
#	/home/root/www
#	/home/root/etc
#
# Subroutines utilisees
#       sec2time	Conversion secondes ecoulees en hh:mm:ss
#       up_for          Obtenir le nombre de jours de uptime
#
# Mis en service Novembre 2012
# - 12/2012 Sauvegarde mensuelle ajout annee au nom du fichier
# - 01/2013 Append archives par tar -uvf au lieu de cp -a
#
#################################################################

# Definition du support de sauvagarde
DEST="/dev/sdb2"

# Definition des repertoires racines
SRCE="/home/"
SYSF="/root/"
SWEB="/var/www/"
SETC="/etc/"

BACK="/mnt/bu"

# Definition des parametres de travail

# Variables utiles
ERR=""
START_TIME=""
STOP_TIME=""

# Localisation site WEB
LWEB="/var/www/"

echo "=> Depart Backup" $(date) $(/root/admin/up_for)
START_TIME=$(date +%s)

# Montage du support de sauvegarde

if [ "$(ls -A $BACK)" ] ; then
  echo "Un device est deja monte : on tente le demontage"
  umount -f $BACK
  if [ $? -eq 1 ] ; then
    echo "Erreur demontage "$(cat /etc/mtab | grep $BACK)" Backup impossible"
    exit
  fi
fi

mount $DEST $BACK
if [ $? -eq 1 ] ; then
  echo "Erreur montage "$DEST
  exit
fi
echo "Etat montage = "$(cat /etc/mtab | grep $DEST)

# recup jour dans la semaine > 0 = Dimanche, 1 = Lundi...
JOUR=$(date +%w)

# Recup du numero de mois sur 2 chiffres (Mars = 03) precede de l'annee
MOIS=$(date +%Y)$(printf "%02d" $(date +%m))

# Recup numero de la semaine dans l'annee
NSEM=$(expr $(date +%W))
NMOD=$(expr $(date +%W) % 5)
echo ""

# Verification de la presence des repertoires sauvegarde quot/hebdo/mensuel sur le support de destination. 
# Creation des repertoires si necessaire (cas du premier lancement)
if [ ! -d $BACK/daily ] ; then
  echo "Creation du repertoire "$BACK/"daily"
  mkdir $BACK/daily
fi

if [ ! -d $BACK/weekly ] ; then
  echo "Creation du repertoire "$BACK/"weekly"
  mkdir $BACK/weekly
fi

if [ ! -d $BACK/monthly ] ; then
  echo "Creation du repertoire "$BACK/"monthly"
  mkdir $BACK/monthly
  echo -n $MOIS > $BACK/monthly/num_mois.log
fi

# Tar dans le repertoire des sauvegardes quotidiennes
echo "- Depart de Backup dans "$JOUR.tar" - "$(date)

cd $BACK/daily
echo -n " - Append /home "
# creation du fichier archive
tar -cvvf $JOUR.tar $SRCE 2>/dev/null  > $JOUR.file_names.log
echo -n " - /root "
# append des repertoires complementaires
tar -uvvf $JOUR.tar $SYSF 2>/dev/null >> $JOUR.file_names.log
echo -n " - /var/www "
tar -uvvf $JOUR.tar $SWEB 2>/dev/null >> $JOUR.file_names.log
echo " - /etc"
tar -uvvf $JOUR.tar $SETC 2>/dev/null >> $JOUR.file_names.log

# Compression du fichier tar
# On laisse la liste des fichiers en clair (x.file_names.log)
echo -n "- Depart gzip "$(date)
gzip -f $JOUR.tar
echo " - Fin gzip " $(date)
echo ""
echo ""

ERR=0
# Copie hebdomadaire si Dimanche
if [ $JOUR -eq 0 ] ; then
  echo -n "Sauvegarde hebdomadaire   "
  cp 0.tar.gz $BACK/weekly/$NMOD.tar.gz
  cp 0.file_names.log $BACK/weekly/$NMOD.file_names.log
  ERR=1
fi

# Copie mensuelle si premier jour du mois
touch $BACK/monthly/num_mois.log

# Mise en conformite du flag mois si fichier vide
# dans ce cas la sauvegarde mensuelle est forcee
if [ $(cat $BACK/monthly/num_mois.log | wc -c) -eq 0 ] ; then
  echo "00" > $BACK/monthly/num_mois.log
fi

if [ $(cat $BACK/monthly/num_mois.log) -ne $MOIS ] ; then
  echo -n "Sauvegarde mensuelle  "
  cp $JOUR.tar.gz $BACK/monthly/$MOIS.tar.gz
  cp $JOUR.file_names.log $BACK/monthly/$MOIS.file_names.log
  echo -n $MOIS > $BACK/monthly/num_mois.log
  ERR=1
fi

# Ajout d'un lf si hebdo ou mensuelle
if [ $ERR -eq 1 ] ; then
  echo ""
fi

# Demontage et fin
cd /root
# Purge des data inutiles
rm -Rf /home/root/etc/*
rm -Rf /home/root/www/*

echo ""
echo "Usage disque"
df
echo ""
echo "Liste des fichiers du Backup"

echo " - Sauvegarde Quotidienne == Rotation sur 7 jours"
ls -l /mnt/bu/daily | grep -v ^drw | grep -v ^total | grep -v "lost+found" | grep -v ^":"
echo ""

echo " - Sauvegarde Hedbomadaire == Rotation sur 5 semaines"
ls -l /mnt/bu/weekly | grep -v ^drw | grep -v ^total | grep -v "lost+found" | grep -v ^":"
echo ""

echo " - Sauvegarde Mensuelle == Archivage sequentiel"
ls -l /mnt/bu/monthly | grep -v ^drw | grep -v ^total | grep -v "lost+found" | grep -v ^":"

umount /mnt/bu

STOP_TIME=$(date +%s)

echo ""
echo ">= Fin de Backup "$(date)" - Duree operation = "$(/root/admin/sec_to_time $START_TIME $STOP_TIME)
echo ""

