<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>SMB HOWTO: Eseguire copie di sicurezza (backup) di macchine Windows su un server Linux</TITLE> <LINK HREF="SMB-HOWTO-12.html" REL=next> <LINK HREF="SMB-HOWTO-10.html" REL=previous> <LINK HREF="SMB-HOWTO.html#toc11" REL=contents> </HEAD> <BODY> <A HREF="SMB-HOWTO-12.html">Avanti</A> <A HREF="SMB-HOWTO-10.html">Indietro</A> <A HREF="SMB-HOWTO.html#toc11">Indice</A> <HR> <H2><A NAME="s11">11. Eseguire copie di sicurezza (backup) di macchine Windows su un server Linux</A></H2> <P>Adam Neat ( <A HREF="mailto:adamneat@ipax.com.au">adamneat@ipax.com.au</A>) ha gentilmente contribuito a fornire lo script che segue per fare backup di macchine Windows usando server Linux come supporto, tramite l'utility smbclient. Adam è solito fare backup di macchine Windows 3.x ed NT su un sistema Linux che dispone di un drive SCSI DAT. <P>Adam non è soddisfatto dello stile di codifica utilizzato, tuttavia funziona. Come l'autore ama commentare. "Se funziona ed è stupido, allora non è stupido". <P>Un altro script di backup per Windows, è stato fornito da Dan Tager ( <A HREF="mailto:dtager@marsala.com">dtager@marsala.com</A>). Lo script di Dan è in grado di fare backup di macchine Unix via rsh e può essere facilmente modificato per usare ssh. <P>In questo script, la stringa 'agnea1' è il nome dell'utente sulla macchina Linux che fa il backup. <P> <BLOCKQUOTE><CODE> <HR> <PRE> #!/bin/bash clear echo Inizializzazione ... checkdate=`date | awk '{print $1}'` if [ -f "~agnea1/backup-dir/backup-data" ]; then echo "ERRORE: non esiste il file di configurazione per oggi!" echo "FATALE!" exit 1 fi if [ -d "~agnea1/backup-dir/temp" ]; then echo "ERRORE: Manca la directory temporanea!" echo echo "Tentativo di creazione" cd ~agnea1 cd backup-dir mkdir temp echo "Creata directory - temp" fi if [ "$1" = "" ]; then echo "ERRORE: manca il nome della macchina (es: cdwriter)" exit 1 fi if [ "$2" = "" ]; then echo "ERRORE: Manca la risorsa SMB (Lan Manager) (es: work)" exit 1 fi if [ "$3" = "" ]; then echo "ERRORE: Manca indirizzo IP di $1 (es: 130.xxx.xxx.52)" exit 1 fi ############################################################################# # Main Section # ############################################################################# cd ~agnea1/backup-dir/temp rm -r ~agnea1/backup-dir/temp/* cd ~agnea1/backup-dir/ case "$checkdate" in Mon) echo "Backup di Lunedì" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completato" if [ -d "~agnea1/backup-dir/Monday" ]; then echo "Directory Monday non trovata ... creazione" mkdir ~agnea1/backup-dir/Monday fi echo "Archiviazione ..." cd ~agnea1/backup-dir/temp tar -cf monday.tar * echo "fatto ..." rm ~agnea1/backup-dir/Monday/monday.tar mv monday.tar ~agnea1/backup-dir/Monday ;; Tue) echo "Backup di Martedì" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completato" if [ -d "~agnea1/backup-dir/Tuesday" ]; then echo "Directory Tuesday non trovata ... creazione" mkdir ~agnea1/backup-dir/Tuesday fi echo "Archiviazione ..." cd ~agnea1/backup-dir/temp tar -cf tuesday.tar * echo "fatto ..." rm ~agnea1/backup-dir/Tuesday/tuesday.tar mv tuesday.tar ~agnea1/backup-dir/Tuesday ;; Wed) echo "Backup di Mercoledì" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completato" if [ -d "~agnea1/backup-dir/Wednesday" ]; then echo "Directory Wednesday non trovata ... creazione" mkdir ~agnea1/backup-dir/Wednesday fi echo "Archiviazione ..." cd ~agnea1/backup-dir/temp tar -cf wednesday.tar * echo "fatto ..." rm ~agnea1/backup-dir/Wednesday/wednesday.tar mv wednesday.tar ~agnea1/backup-dir/Wednesday ;; Thu) echo "Backup di Giovedì" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completato" if [ -d "~agnea1/backup-dir/Thursday" ]; then echo "Directory Thrusday non trovata ... creazione" mkdir ~agnea1/backup-dir/Thursday fi echo "Archiviazione..." cd ~agnea1/backup-dir/temp tar -cf thursday.tar * echo "fatto ..." rm ~agnea1/backup-dir/Thursday/thursday.tar mv thursday.tar ~agnea1/backup-dir/Thursday ;; Fri) echo "Backup di Venerdì" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completato" if [ -d "~agnea1/backup-dir/Friday" ]; then echo "Directory Friday non trovata ... creazione" mkdir ~agnea1/backup-dir/Friday fi echo "Archiviazione ..." cd ~agnea1/backup-dir/temp tar -cf friday.tar * echo "fatto ..." rm ~agnea1/backup-dir/Friday/friday.tar mv friday.tar ~agnea1/backup-dir/Friday ;; *) echo "ERRORE FATALE: giorno non corretto" exit 1 ;; esac ########### </PRE> <HR> </CODE></BLOCKQUOTE> <P>Lo script di Dan per eseguire il backup <P> <BLOCKQUOTE><CODE> <HR> <PRE> #!/bin/bash BACKDIR=3D/backup WINCMD=3D/usr/bin/smbclient function CopyWinHost(){ # usa tar e gzip per archiviare "condivisioni windows" in una # directory locale usando l'utility smbclient della suite samba. # argomento 1 è il nome del computer windows remoto # argomento 2 è il nome della condivisione di cui fare backup echo $1,$2,$3 REMOTE=3D$1 SHARE=3D$2 DEST=3D$3 # crea un file tar gzip usando samba per copiare direttamente # dal pc con windows # 12345 è la password. È necessaria anche non e' definita alcuna # sulla macchina remota $WINCMD \\\\$REMOTE\\$SHARE 12345 -Tc -|gzip > $DEST echo `date`": Completato backup da "$REMOTE" a "$DEST echo } function CopyUnixHost(){ # tar e gzip una directory usando rsh # argomento 1 è il nome del computer remoto # argomento 2 è il percorso completo della directory sorgente # remota # argomento 3 è il nome del file tar-gzip locale. Il nome # del giorno più .tgz sono aggiunti in coda # all'argomento 3 REMOTE=3D$1 SRC=3D$2 DEST=3D$3 if rsh $REMOTE tar -cf - $SRC |gzip > $DEST; then echo `date`": Completato backup da "$REMOTE":"$SRC" a "$DEST else echo `date`": Errore durante il backup da "$REMOTE":"$SRC" a "$DEST fi } # $1: win=backup macchina windows, unix=backup macchina unix case $1 in win) # $2= nome della macchina remota windows, # $3= nome della condivisione remota, # $4= nome della directory locale CopyWinHost $2 $3 $4;; unix) # $2= host remoto, # $3= directory remota, # $4= nomde della directory locale CopyUnixHost $2 $3 $4;; esac </PRE> <HR> </CODE></BLOCKQUOTE> <P> <P> <HR> <A HREF="SMB-HOWTO-12.html">Avanti</A> <A HREF="SMB-HOWTO-10.html">Indietro</A> <A HREF="SMB-HOWTO.html#toc11">Indice</A> </BODY> </HTML>