Le procedure di backup sono sempre una bella gatta da pelare. Personalmente non amo sistemi di backup “proprietari” che utilizzano codifiche esclusive perchè gli archivi generati (indipendentemente dal fatto che si tratti di copie su nastro o su disco) non sono facilmente portabili. A parte sistemi di classe enterprise che consentono procedure di disaster recovery, quello che mi aspetto da un archivio di backup è la semplice possibilità di portarlo, all’occorrenza, su un’altra macchina e di ripristinare i file senza dover installare pesanti software specifici. Insomma … che l’archivio di backup generato sia leggibile facilmente e ovunque con minime installazioni.

Il diminuito costo dello storage rende sempre più frequente l’utilizzo di backup su file (utilizzando SAN, NAS o gli stessi dischi dei server) relegando le copie su tape library ad ambiti sempre più ristretti e specializzati. In questo contesto ho sempre preferito, per il backup dei dati su server Windows, l’utilizzo dell’utilità di backup Microsoft (NTBackup) per i motivi che ho descritto sopra soprattutto la portabilità (leggo lo stesso archivio su un altro server Windows senza dover installare praticamente nulla).

L’utilizzo di NTBackup porta vantaggi ma anche svantaggi:

  • I file di backup sono molto grandi: NTBackup copia e archivia i file senza comprimerli
  • Creare una procedura per il backup automatico è piuttosto semplice ma non è altrettanto facile controllare l’esito: NTBackup non riporta ERRORLEVEL corretti (esce sempre con zero se si backuppa su disco) anche quando vi sono rilevanti errori.

Ho deciso allora di “cimentarmi” nella creazione di un batch di automazione per il backup che rispondesse ai seguenti requisiti:

  • Minime installazioni richieste sul computer e soprattuto che i software necessari siano disponibili gratuitamente
  • Possibilità di selezione di backup “Complete”, “Incrementali”, “Differenziali”
  • Compressione degli archivi salvati
  • Controllo dei codici di ERRORLEVEL
  • Gestione della rotazione dei file
  • Portabilità su sistemi diversi e, perchè no, anche su Linux

Il risultato è 7backup.bat : un singolo script batch (.bat) la cui esecuzione è facilmente schedulabile con minimi ed intuitivi switch da riga di comando.

Clicca qui per il download 7Backup.bat

Attenzione !! Questo script utilizza i junction points come caratteristica del file system NTFS. I Junction points vengono rappresentati da Windows Explorer come normali cartelle. MAI e ripeto MAI cancellare un junction point utlizzando Windows Explorer perchè questo porta alla cancellazione anche dei dati nella cartella di destinazione (ovvero quella oggetto del puntamento junction).

Disclaimer : questo script è stato testato con cura tuttavia può non essere esente da errori. Non utilizzatelo in ambienti ad alta criticità senza prima averlo testato adeguatamente su computer di prova. L’utilizzo del software è a vostra completa discrezione e rischio. Non rispondo di perdite di dati e non fornisco supporto diretto se non per il tramite, secondo tempo e disponibilità, di questo sito web.

I requisiti per il funzionamento sono :

  • Aver installato 7-zip che viene utilizzato per la generazione degli archivi compressi. Download 7-Zip.
  • Disporre di un filesystem NTFS
  • Aver installato l’utilità Junction di Sysinternals per la creazione di link simbolici alle directory

Lo script batch è interamente documentato (in inglese) e tutte le impostazioni rilevanti possono essere codificate come costanti o passate da riga di comando. Solo due valori devono essere impostati a mano. Per fare questo potete editare il file 7backup.bat con un normale editor di testo come notepad (vi consiglio comunque di dotarvi di Notepad++). I valori rilevanti sono :

:: 7-zip executable path.
:: If you have installed 7zip using standard path, then you do not need to
:: change this
SET BK-7ZBIN=%ProgramFiles%\7-zip\7z.exe

In questa variabile dovrete inserire il percorso completo che punta all’applicazione 7-zip. Se avete installato 7-zip con le impostazioni standard non dovreste avere bisogno di modificare nulla.

L’altra variabile rilevante è la seguente:

:: Junction executable path.
:: Find where Junction.exe is and set it here. If Junction.exe is in
:: a directory within the PATH variable you can simply indicate
:: junction.exe
SET BK-JUNCTION=%ProgramFiles%\SysInternalsSuite\Junction.exe

Le applicazioni di SysInternals non prevedono una procedura di setup e quindi possono essere inserite in qualsiasi percorso. Prendetevi un momento per individuare Junction.exe all’interno del computer ed indicate quindi il percorso in cui si trova. Se il percorso prevede directory con spazi NON mettete le virgolette. Verranno aggiunte automaticamente dallo script quando serviranno.

A questo punto potete provare ad eseguire il batch senza nessun parametro. Viene emessa la schermata di aiuto come segue:

7Backup-ScreenShot 

Tutti gli switch di comando sono spiegati e documentati.

Non resta altro che creare una “lista” di directory che vorrete backuppare. Con un normale editor scrivete l’elenco delle directory da backuppare, una per riga, indicandone il percorso completo inclusa la lettera di unità. Ad esempio:

C:\Dir1\Dati
C:\Dir3
D:\Archivi

Salvate il file in formato testo e annotatevi la posizione.
Attenzione. Non è ammessa l’indicazione di una Directory e di una sua Sottodirectory. Per esempio non è possibile indicare:
C:\Dir1\Dati
C:\Dir1\Dati\Commerciale
Questo perchè la procedura crea, per ogni directory elencata, un junction point nell’area di lavoro, includendo automaticamente tutte le sottodirectory. Il mancato rispetto di questa regola può portare a risultati imprevedibili e loop infiniti.

Potete ora lanciare il backup come ad esempio seguente:

7backup.bat --dirlist "C:\Mie Selezioni\Lista.txt" --type full --destdir "F:\MieiBackup" --rotation 3

Questo produrrà la generazione di un archivio di backup completo (ovvero di tutti i file contenuti nelle directory indicate nel file c:\Mie Selezioni\Lista.txt). Il file archivio verrà depositato nella directory F:\MieiBackup dove verranno mantenuti solo i 3 più recenti backup dello stesso tipo.

Alcune cose da considerare:

  • Lo script utilizza come directory di lavoro predefinita il percorso indicato nella variabile %temp% del sistema operativo. Questa impostazione può essere di disturbo nel momento in cui si desidera effettuare il backup di directory che stanno al di sopra della directory %temp%. Per ovviare al problema è sufficiente indicare una directory di lavoro (tramite lo switch –workdir) che sia al di fuori dei percorsi da backuppare.
  • La directory di destinazione degli archivi di backup deve essere in un’area di storage sufficientemente capiente
  • E’ possibile indicare nell’elenco delle directory da salvare un intero disco (Es. C:\). In questo caso non dovranno essere presenti, nell’elenco di selezione, altre directory appartenenti allo stesso disco e la directory di destinazione e di lavoro dovranno essere al di fuori del disco da backuppare
  • Le impostazioni di default codificate all’interno dello script abilitano il multithreading per 7-zip: questa impostazione riduce i tempi di archiviazione/compressione ma come effetto secondario occupa la/le cpu al massimo delle prestazioni per periodi di tempo anche prolungati. In caso di utilizzo su macchine virtuali con monitoraggio delle risorse attive, o nel caso in cui si debba prevedere l’esecuzione di altre procedure batch (per esempio in notturna) questa impostazione può generare warning o errori. Modificate nello script la sezione dedicata agli switch di 7-zip secondo le necessità più consone all’ambiente in cui eseguirete lo script.
  • La presenza di antivirus la cui protezione residente sia attiva può essere motivo di sensibili rallentamenti durante il processo di archiviazione/compressione. Se possibile inserite tra le esclusioni della protezione permanente dell’antivirus almeno il percorso di destinazione dell’archivio di backup.
  • All’interno del file di selezione non è attualmente possibile indicare cartelle con percorso UNC (es. \\nomeserver\nomecartella). Questa possibilità verrà inserita in una prossima release.
  • Durante la fase di selezione dei file da archiviare è noto un problema che impedisce la corretta selezione nel caso in cui nel nome del file (o della directory che lo contiene) è presente il carattere “&”. Al momento e finchè l’intera procedura viene eseguita in un solo file batch (senza l’aiuto di componenti di scripting esterni) non sono riuscito a trovare una valida soluzione al problema.
  • Il file archivio generato alla fine della procedura di backup contiene, oltre ai dati archiviati, copia del file di selezione delle directory ed il log completo delle operazioni effettuate (anche leggendo l’archivio da un’altra postazione potrete sapere come e quando è stato creato).

Ogni commento o integrazione è bene accetto.