Avanti Indietro Indice

11. Eseguire copie di sicurezza (backup) di macchine Windows su un server Linux

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


Avanti Indietro Indice