PDA

Afficher la version complète : Script : Backup



fennec.
15/07/2008, 09h10
Bonjour a tous,

j'ai écrit un petit script de backup, j'aimerai avoir votre avis, vos conseils... pour ce qui ne marche pas ou tout simplement pour l'amélioré

ce script a besoin de 3 fichiers. toutes les explications sont dans la partie pour le fichier backup.help

- source
- destination
- backup.help

et bien entendu le fichier contenant le script

ATTENTION : le restore ne fonctionne pas (backup -r)

voici le script. le nom du fichier doit être => backup

#!/bin/bash

OWNER=''
GROUP='users'
SOURCE_FILE=''
DESTINATION_FILE=''
HELP=''

CPT=0

# charge les données du fichier 'source' dans le tableau $SOURCE[]
while read src; do
SOURCE[CPT]=$src
(( CPT++ ))
done < $SOURCE_FILE

CPT=0

# charge les données du fichier 'destination' dans le tableau $DESTINATION[]
while read dest; do
DESTINATION[CPT]=$dest
(( CPT++ ))
done < $DESTINATION_FILE

CPT=0

if [ $# -eq 1 -a $1 = '--help' ]; then

cat $HELP | more

elif [ $# -eq 2 ]; then
clear
if [ ! -d $2 ]; then
echo "$2 n'est pas un directory"
echo "backup --help pour plus d'info"
elif [ -d $2 ];then
if [ ! $1 = '-b' -a ! $1 = '-r' ]; then
echo "le premier argument doit être"
echo "-b : backup"
echo "-r : restore"
echo "backup --help pour plus d'info"
elif [ $1 = '-b' ]; then
ec ho "----------"
ec ho "| backup |"
ec ho "----------"
fo r i in ${SOURCE }; do
echo "$i => $2${DESTINATION[${CPT}]}"
if [ -d $2${DESTINATION[${CPT}]} ]; then
cd $2${DESTINATION[${CPT}]}/..
NEWDESTINATION=$( pwd )
elif [ ! -d $2${DESTINATION[${CPT}]} ]; then
NEWDESTINATION=$2${DESTINATI ON[${CPT}]}
fi
cp -ru ${SOURCE[${CPT}]} $NEWDESTINATION
#cp -ru ${SOURCE[${CPT}]} $2
chown -R $OWNER $2
#chgrp -R $GROUP $2
(( CPT++ ))
do ne
elif [ $1 = '-r' ]; then
ec ho "-----------"
ec ho "| restore |"
ec ho "-----------"
fo r i in ${DESTINATION }; do
echo "$2${DESTINATION[${CPT}]} => ${SOURCE[${CPT}]}"
if [ -d ${SOURCE[${CPT}]} ]; then
cd ${SOURCE[${CPT}]}/..
NEWSOURCE=$( pwd )
elif [ ! -d ${SOURCE[${CPT}]} ]; then
echo "le dossier n'éxiste pas"
NEWSOURCE=${SOURCE[${CPT}]}
fi
cp -r $2${DESTINATION[${CPT}]} $NEWSOURCE
chown -R $OWNER $NEWSOURCE
chgrp -R $GROUP $NEWSOURCE
(( CPT++ ))
do ne
fi
fi
elif [ ! $# -eq 2 ]; then
echo "backup a besoin de 2 arguments"
echo "1] -b / -r"
echo "2] dossier de backup"
echo "backup --help pour plus d'info"

fi

le fichier backup.help

backup

NAME

backup - sauvegarde de plusieurs fichiers/dossiers

OPTION

backup [OPTION] [DIRECTORY]

DESCRIPTION

permet de sauvegarder et de restaurer le contenu de plusieurs dossiers
ou fihiers

-b
sauvegarde les dossiers et les fichiers
-r
restaure les dossiers et les fichiers sauvegardés

FONCTIONNEMENT

stockez l'adresse des fichiers et dossiers dans le fichier "source",
dans le fichier "destination" inscrivez le nom des dossiers et fichiers
à sauvegarder (le nom des dossiers backupé doivent avoir le même nom
que les dossiers sources, les fichiers peuvent être renomé). le premier
lancement d'un script fera un backup complet les suivants seront tous
des backups incrémentaux.

INSTALLATION

- créez un dossier Backup
- créez 4 fichiers dans ce dossier (source ,destination, backup.help, backup)
contenu des fichiers
source : adresse des dossiers/fichiers a sauvegarder
destination : nom des dossiers/fichiers qui seront sauvegardés
backup.help : un copier/coller de ce texte
backup : le script
- placez le dossier Backup dans le dossier /root.
- faire un
chgrp root /root/Backup/backup
et
chown root /root/Backup/backup
et
chmod 700 /root/Backup/backup
ces 3 commandes permètent
de donner le fichier au groupe 'root'
de donner le fichier au user 'root'
de donner les droits au user 'root'
- ajouté cette ligne dans le fichier /root/.bashrc
alias=". /root/Backup/backup"
- redémarer le mode commande
- modifier les variables OWNER, SOURCE_FILE, DESTINATION_FILE et HELP
OWNER='le nom de votre user'
SOURCE_FILE='l'endroit ou se trouve le fichier source'
DESTINATION_FILE='l'endroit ou se trouve le fichier destination'
HELP='l'endroit ou se trouve le fichier backup.help'

si vous avez suivis chaque point de l'installation. vous devriez avoir ceci
comme valeur.
SOURCE_FILE='/root/Backup/source'
DESTINATION_FILE='/root/Backup/destination'
HELP='/root/Backup/backup.help'

vous pouvez utilisé la commande 'backup' uniquement avec le user 'root'

EXEMPLE

fichier : source
ligne 1 : /home/user/Documents
ligne 2 : /etc/samba/smb.conf
ligne 3 :
fichier : destination
ligne 1 : Documents
ligne 2 : samba.configuration
ligne 3 :

le fichier doit se terminer par une ligne blanche.
seul les fichiers peuvent être renomé
il ne doit y avoir aucun espace devant les noms de dossier/fichier

lancer la commande :

backup -b /mnt/nfs/backup/

le nom du dossier doit se terminer par un slash

merci d'avance pour votre aide

ps: désolé pour les fôte d'ortaugraphe (j'suis pas doué :( ).

Burn2
17/08/2008, 23h50
Bonjour, il me semble bien compliqué quand même pour une sauvegarde non?

Il y a si je me permet des manières bien plus faciles de faire des sauvegardes incrémentielles avec RSync qui me semble bien plus judicieuses pour en avoir fait un script. ;)

de cette manière par exemple:

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
#!bin/sh

#Script qui permet de sauvegarder en local

#Dossier de sauvegarde
doss_save="/home/coopalibre/backup"

#Nombre de sauvegardes à garder
nb=7

#Nombre de sauvegardes déjà effectuées
nb_eff=`ls $doss_save|wc -l`

#Liste qui contient les chemins dossiers à sauvegarder
save_fic="/etc /home/coopalibre/sq-etherweb"

#date du jour
date=`date +%F`



#Suppression des anciennes sauvegardes
if [ $nb_eff -eq $nb ]
then
old=`ls $doss_save|head -1`
rm -r $doss_save/$old
fi



#Création du dossier du jour de sauvegarde
mkdir $doss_save/$date
#Dossier courant de sauvegarde
current=$doss_save/$date/

#Boucle de sauvegarde des fichiers
for save in $save_fic
do
rsync -av --delete --backup --backup-dir=$current $save $doss_save
done


#Explication
#Dans chaque dossier $save/$date ($current) se trouvera l'historique du fichier avant sa suppression ou sa modification,
#et uniquement les fichiers modifiés ou supprimés
#Dans $doss_save se trouvera la dernière version des dossiers et fichiers modifiés
</div>

et la restauration:

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
#!bin/sh

#Dossier de sauvegarde
doss_save="/home/coopalibre/backup"

echo "Saisissez la date du dossier que vous voulez sauvegarder :"
read -r date

#Dossier sauvegarde
current=$doss_save/$date/

#Dossier de restauration -> ce dossier peut etre n'importe quoi (doit etre changé selon les besoins)
doss_restore="/home/coopalibre/restore"

#mkdir $doss_restore/$date

#doss_date=$doss_restore/$date

ficDate=`ls $current`

#Boucle de restauration des fichiers
for save in $ficDate
do
rsync -av $current$save $doss_restore
done
</div>