Adam Neat ( adamneat@ipax.com.au) 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.
Adam non è soddisfatto dello stile di codifica utilizzato, tuttavia funziona. Come l'autore ama commentare. "Se funziona ed è stupido, allora non è stupido".
Un altro script di backup per Windows, è stato fornito da Dan Tager ( dtager@marsala.com). Lo script di Dan è in grado di fare backup di macchine Unix via rsh e può essere facilmente modificato per usare ssh.
In questo script, la stringa 'agnea1' è il nome dell'utente sulla macchina Linux che fa il backup.
#!/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
###########
Lo script di Dan per eseguire il backup
#!/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