|
Publicité | |||||||||||||||||||||||
|
|
#1 (permalink) |
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
Bonjour,
Je souhaiterais avoir votre avis sur un script qui doit servir en mode "cron" afin de faire des sauvegardes sur un réseau d'entreprise ayant au plus 10 machines... Les machines clientes sont sous windows, et stockent leurs propres données... certaines sont sauvegardées à chaque horaire de pause sur le serveur, puis seront accessibles en lecture seule par un serveur samba, pour des restaurations rapides. Elles seront également graver sur un dvd+rw tous les soirs. Le but de la manoeuvre est de ne pas avoir à se soucier d'autre chose que de mettre un dvd dans le graveur à temps (en gros, chaque matin... et on fait une rotation) le script fonctionne, mais je préférerais qu'il soit blindé... donc tous les avis constructifs sont bons à prendre Code :
#! /bin/bash
ISO_MOUNTPATH="/mnt/graveur"
ISO_REMOTEPATH=""
USER_LIST="/home/sauvegarde/sauv_users.txt"
if [ -r ${USER_LIST} ]
then
USERS=`cat ${USER_LIST}`
else
echo "Impossible de lire ${USER_LIST}"
exit 1
fi
USERS=`cat ${USER_LIST}`
DIRS=""
DIR_LIST=""
for USERNAME in $USERS
do
ln -s -f "/home/$USERNAME" /home/links/
REMOTE_COMPUTER=`grep /mnt/$USERNAME /etc/fstab | awk -F ' ' '{print $1}' | awk -F '/' '{print $3}'`
IS_ACTIVE=`nmblookup ${REMOTE_COMPUTER} | grep failed | wc -l`
if [ ${IS_ACTIVE} -lt 1 ]
then
mount /mnt/$USERNAME
else
echo "Impossible de se connecter à ${REMOTE_COMPUTER}"
continue
fi
DIR_LIST="/home/sauvegarde/${USERNAME}.dir"
if [ -r ${DIR_LIST} ]
then
DIRS=`cat ${DIR_LIST}`
else
echo "Impossible de lire ${DIR_LIST}"
continue
fi
for DIR in $DIRS
do
if [ -d /mnt/$USERNAME/$DIR ]
then
mkdir -p /home/$USERNAME/$DIR
cd /home/$USERNAME/$DIR
cp -r "/mnt/$USERNAME/$DIR/"* .
else
echo "Impossible de copier /mnt/$USERNAME/$DIR"
continue
fi
done
sync
umount /mnt/$USERNAME
sleep 5
done
LABEL=`date +"%Y_%m_%d"`
ISO_FILENAME="/home/sauvegarde/${LABEL}.iso"
mkisofs -f -R -r -J -V "$LABEL" -o "${ISO_FILENAME}" /home/links
REMOTE_COMPUTER=`grep ${ISO_MOUNTPATH} /etc/fstab | awk -F ' ' '{print $1}' | awk -F '/' '{print $3}'`
IS_ACTIVE=`nmblookup ${REMOTE_COMPUTER} | grep failed | wc -l`
if [ ${IS_ACTIVE} -lt 1 ]
then
mount ${ISO_MOUNTPATH}
else
echo "Impossible de se connecter à ${REMOTE_COMPUTER}"
exit 1
fi
cp "${ISO_FILENAME}" "${ISO_MOUNTPATH}/${ISO_REMOTEPATH}"
sync
touch "${ISO_MOUNTPATH}/${ISO_REMOTEPATH}/gravure_ok.txt"
sync
umount ${ISO_MOUNTPATH}
#rm -f "${ISO_FILENAME}"
rm /home/links/*
__________________
Evitez les MP pour les questions techniques... il y a des forums Mes Tutos | Mon Blog Dernière modification par gorgonite ; 21/07/2006 à 22h37. |
|
|
|
|
#2 (permalink) |
|
Membre chevronné
![]() Date d'inscription: mai 2004
Localisation: Belgique
Messages: 685
|
As-tu envisagé rsync pour tes back-up? Seuls les fichiers changés sont sauvegardés. Tu pourrais facilement l'intégrer dans ton script.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT Jabber: ripat at im.apinc.org |
|
|
|
|
|
#3 (permalink) | |
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
Citation:
rsync marche sous windows ? |
|
|
|
|
|
#4 (permalink) |
|
Membre chevronné
![]() Date d'inscription: mai 2004
Localisation: Belgique
Messages: 685
|
Oui, bien sûr. Dès que tu fais un mnt -t smbfs ce répertoire est vu comme un répertoire Linux. Rsync n'y voit que du feu.
Voici ce que je fais pour mes backup des stations windows: Code :
# si pas de mnt -> mnt
if test ! -d /mnt/smb/toto
then
sudo mount -t smbfs -o username='Toto',password='zzzz' //toto/Data /mnt/smb
fi
# copie et synchronisation des fichiers
# tous les doc xls de windows -> debian
SRC='/mnt/smb/'
DEST='/home/toto/backup'
INCLUDE='/etc/rsync_include_toto'
rsync -av --include-from=$INCLUDE $SRC $DEST
# umount
sudo umount /mnt/smb
Code :
# BACKUP TOTO -> DEBIAN # inclusion de tous les répertoires et sous-répertoires /**/ # inclusion xls et doc *.xls *.doc # exclusion de tout le reste - * Dans ton script, si j'ai bien compris tu vérifies dans fstab le nom du netbios des utilisateurs windows et s'ils existent tu mnt. Que font-ils dans fstab? Il sont déjà mnté au boot? Pourquoi le re-mnter alors?
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT Jabber: ripat at im.apinc.org |
|
|
|
|
|
#5 (permalink) | ||
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
Citation:
Citation:
|
||
|
|
|
|
#6 (permalink) | |
|
Membre chevronné
![]() Date d'inscription: mai 2004
Localisation: Belgique
Messages: 685
|
Citation:
Pour tout copier, fais simplement: Code :
rsync -av $SRC $DEST
Code :
DEST='utilisateur@serveur_distant:/chemin/vers/destination/backup/'
rsync -azv -e ssh $SRC $DEST
Les premiers backups seront un peu longs (selon la vitesse de connexion adsl ou lan) mais ensuite, seuls les fichiers modifiés seront copiés.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT Jabber: ripat at im.apinc.org |
|
|
|
|
|
|
#7 (permalink) |
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
comme cela, ça te semble bien ?
Code :
#! /bin/bash
ISO_MOUNTPATH="/mnt/graveur"
ISO_REMOTEPATH=""
USER_LIST="/home/sauvegarde/sauv_users.txt"
if [ -r ${USER_LIST} ]
then
USERS=`cat ${USER_LIST}`
else
echo "Impossible de lire ${USER_LIST}"
exit 1
fi
USERS=`cat ${USER_LIST}`
DIRS=""
DIR_LIST=""
for USERNAME in $USERS
do
ln -s -f "/home/$USERNAME" /home/links/
REMOTE_COMPUTER=`grep /mnt/$USERNAME /etc/fstab | awk -F ' ' '{print $1}' | awk -F '/' '{print $3}'`
IS_ACTIVE=`nmblookup ${REMOTE_COMPUTER} | grep failed | wc -l`
if [ ${IS_ACTIVE} -lt 1 ]
then
mount /mnt/$USERNAME
else
echo "Impossible de se connecter à ${REMOTE_COMPUTER}"
continue
fi
DIR_LIST="/home/sauvegarde/${USERNAME}.dir"
if [ -r ${DIR_LIST} ]
then
DIRS=`cat ${DIR_LIST}`
else
echo "Impossible de lire ${DIR_LIST}"
continue
fi
for DIR in $DIRS
do
if [ -d /mnt/$USERNAME/$DIR ]
then
if [ -d /home/$USERNAME/$DIR ]
usleep 1
else
mkdir -p /home/$USERNAME/$DIR
fi
#cd /home/$USERNAME/$DIR
#cp -r "/mnt/$USERNAME/$DIR/"* .
rsync -av "/mnt/$USERNAME/$DIR/" "/home/$USERNAME/$DIR"
else
echo "Impossible de copier /mnt/$USERNAME/$DIR"
continue
fi
done
sync
umount /mnt/$USERNAME
sleep 5
done
LABEL=`date +"%Y_%m_%d"`
ISO_FILENAME="/home/sauvegarde/${LABEL}.iso"
mkisofs -f -R -r -J -V "$LABEL" -o "${ISO_FILENAME}" /home/links
REMOTE_COMPUTER=`grep ${ISO_MOUNTPATH} /etc/fstab | awk -F ' ' '{print $1}' | awk -F '/' '{print $3}'`
IS_ACTIVE=`nmblookup ${REMOTE_COMPUTER} | grep failed | wc -l`
if [ ${IS_ACTIVE} -lt 1 ]
then
mount ${ISO_MOUNTPATH}
else
echo "Impossible de se connecter à ${REMOTE_COMPUTER}"
exit 1
fi
cp "${ISO_FILENAME}" "${ISO_MOUNTPATH}/${ISO_REMOTEPATH}"
sync
touch "${ISO_MOUNTPATH}/${ISO_REMOTEPATH}/gravure_ok.txt"
sync
umount ${ISO_MOUNTPATH}
#rm -f "${ISO_FILENAME}"
rm /home/links/*
|
|
|
|
|
#8 (permalink) |
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
en revanche, avec ma méthode, les répertoires avec un espace dans le nom ne passent pas, ie les répertoires nommés dans ${USERNAME}.dir doivent ne pas avoir d'espaces dans leur nom
![]() si quelqu'un a une idée... |
|
|
|
|
#9 (permalink) |
|
Hardware ![]() Nom : Arnaud F.
Date d'inscription: août 2005
Localisation: Huttenheim
Âge: 22
Messages: 4 854
|
Ben je sais pas si c'est ce que tu cherche, mais banalise les espaces qui sont dans le fichier contenu dans ${DIR_LIST} via un tr par exemple ( désolé si c'est une anerie mais je tente ma chance en disant ça
@ +
__________________
Arnaud – Responsable Hardware. Pour rejoindre l'équipe Hardware et contribuer à l'enrichissement de la FAQ, rédactions de tutoriels, me contacter par MP C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère Installation de Code::Blocks sous Debian à partir de Nightly Builds
|
|
|
|
|
#10 (permalink) | |
|
Membre chevronné
![]() Date d'inscription: mai 2004
Localisation: Belgique
Messages: 685
|
Citation:
Par contre, pourquoi parcours-tu les répertoires récursivements? Rsync peut faire ça pour toi il me semble. Il n'aura peut-être pas les problèmes d'espace lui! Je teste et je reviens... Edit: Alors voilà, je confirme, rsync gère parfaitement bien les noms de répertoire et fichiers avec espaces ou caractères accentués qui, eux, seront remplacés par un ?. Je confirme également que l'option -a est une super-option qui comprend, entre-autres, l'option -r pour récursif.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT Jabber: ripat at im.apinc.org Dernière modification par ripat ; 22/07/2006 à 11h02. Motif: Résultat de test. |
|
|
|
|
|
|
#11 (permalink) | |
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
Citation:
c'est que je sélectionne uniquement certains répertoires à sauvegarder le problème survient lorsque le chemin d'un de ses répertoires (définis par l'utilisateur... ou windows comme "C:\Documents and Settings\username\...") contient un espace |
|
|
|
|
|
#12 (permalink) | |
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
Citation:
pas tout compris... tu peux montrer la ligne de commande, car je viens de lire http://man.developpez.com/man1/tr.1.php et je ne vois pas trop en quoi ça va m'aider |
|
|
|
|
|
#13 (permalink) |
![]() Nom : Nicolas Vallée
Date d'inscription: décembre 2005
Âge: 25
Messages: 9 108
|
voici la version actuelle...
Code :
#! /bin/bash
ISO_MOUNTPATH="/mnt/graveur"
ISO_REMOTEPATH=""
USER_LIST="/home/sauvegarde/sauv_users.txt"
if [ -r ${USER_LIST} ]
then
USERS=`cat ${USER_LIST}`
else
echo "Impossible de lire ${USER_LIST}"
exit 1
fi
USERS=`cat ${USER_LIST}`
DIRS=""
DIR_LIST=""
for USERNAME in $USERS
do
ln -s -f "/home/$USERNAME" /home/links/
REMOTE_COMPUTER=`grep /mnt/$USERNAME /etc/fstab | awk -F ' ' '{print $1}' | awk -F '/' '{print $3}'`
IS_ACTIVE=`nmblookup ${REMOTE_COMPUTER} | grep failed | wc -l`
if [ ${IS_ACTIVE} -lt 1 ]
then
mount /mnt/$USERNAME
else
echo "Impossible de se connecter à ${REMOTE_COMPUTER}"
continue
fi
DIR_LIST="/home/sauvegarde/${USERNAME}.dir"
if [ -r ${DIR_LIST} ]
then
DIRS=`cat ${DIR_LIST}`
else
echo "Impossible de lire ${DIR_LIST}"
continue
fi
for DIR in $DIRS
do
if [ -d /mnt/$USERNAME/$DIR ]
then
if [ -d /home/$USERNAME/$DIR ]
then
sleep 0
else
mkdir -p /home/$USERNAME/$DIR
fi
cd /home/$USERNAME/$DIR
#cp -r "/mnt/$USERNAME/$DIR/"* .
rsync -av "/mnt/$USERNAME/$DIR/"* .
else
echo "Impossible de copier /mnt/$USERNAME/$DIR"
continue
fi
done
sync
umount /mnt/$USERNAME
sleep 5
done
LABEL=`date +"%Y_%m_%d"`
ISO_FILENAME="/home/sauvegarde/${LABEL}.iso"
mkisofs -f -R -r -J -V "$LABEL" -o "${ISO_FILENAME}" /home/links
REMOTE_COMPUTER=`grep ${ISO_MOUNTPATH} /etc/fstab | awk -F ' ' '{print $1}' | awk -F '/' '{print $3}'`
IS_ACTIVE=`nmblookup ${REMOTE_COMPUTER} | grep failed | wc -l`
if [ ${IS_ACTIVE} -lt 1 ]
then
mount ${ISO_MOUNTPATH}
else
echo "Impossible de se connecter à ${REMOTE_COMPUTER}"
exit 1
fi
cp "${ISO_FILENAME}" "${ISO_MOUNTPATH}/${ISO_REMOTEPATH}"
sync
touch "${ISO_MOUNTPATH}/${ISO_REMOTEPATH}/gravure_ok.txt"
sync
umount ${ISO_MOUNTPATH}
#rm -f "${ISO_FILENAME}"
rm /home/links/*
|
|
|
|
|
#14 (permalink) |
|
Hardware ![]() Nom : Arnaud F.
Date d'inscription: août 2005
Localisation: Huttenheim
Âge: 22
Messages: 4 854
|
Ben je pensais utiliser cette commande pour remplacer tout les espaces que tu rencontre par des underscore par exemple.
Mais bon, ça se trompe je fais fausse route
__________________
Arnaud – Responsable Hardware. Pour rejoindre l'équipe Hardware et contribuer à l'enrichissement de la FAQ, rédactions de tutoriels, me contacter par MP C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère Installation de Code::Blocks sous Debian à partir de Nightly Builds
|
|
|
|
|
#15 (permalink) |
|
Membre chevronné
![]() Date d'inscription: mai 2004
Localisation: Belgique
Messages: 685
|
Tu as résolu les problèmes d'espaces dans tes noms de chemin?
Sinon, protège ta variable $DIR. Code :
for DIR in "$DIRS"
do
if [ -d /mnt/$USERNAME/"$DIR" ]
then
if [ -d /home/$USERNAME/"$DIR"
...
Il faudra définir un fichier include pour rsync et y mettre les répertoires que tu veux sauvegarder. Exemple, pour un utilisateur windows toto, tu fais un mnt sur un répertoire à sauvegarder. Dans ce répertoire il n'y a qu'un certain nombre de répertoires à sauvegarder récursivement (c-à-d. chacun des répertoires choisis et tous leurs sous-répertoires). Code :
# ici le mnt de la station Windows
mount -t smbfs (... etc ...) /mnt/smb/toto
# resync récursif
SRC='/mnt/smb/toto/'
DEST='/.../.../backup'
INCLUDE='/.../.../.../rsync_include'
rsync -av --include-from=$INCLUDE $SRC $DEST
Celui-ci contiendra: Code :
# inclusion spécifique de répertoires # rép. "éclole élodie" et ses sous répertoires ?cole ?lodie/ ?cole ?lodie/** # rép. CUISINE et ses sous répertoires CUISINE/ CUISINE/** # rep. FESTIVITE et ses sous répertoires FESTIVITES/ FESTIVITES/** # exclusion de tout - /*
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT Jabber: ripat at im.apinc.org |
|
|
|
|
|
![]() |
||
Avis sur un script
|
||
| Outils de la discussion | |
|
|