Vai al contenuto

[Tutorialino lunghino] Un backup a zero euro


Ce

Messaggi raccomandati

Assisto sempre più spesso a disastri più o meno annunciati su HD e conseguenti perdite di dati. Sembra che nessuno faccia mai un backup!

Sul mio Mac, ho adottato la strategia del pigrone, ho scritto uno script che fa il backup ogni settimana automagicamente ed un AppleScript che mi ricorda di controllarlo. Vista la recrudescenza di funesti eventi, ho deciso di sottoporli al vostro giudizio sperando di fare cosa utile. Insulti, commenti e critiche sono ben accetti. Lo so che esiste software apposta, ma il mio scopo era partire da un OS X "di fabbrica" e vedere cosa si può ottenere dal sistema senza (in)utility di terze parti.

Ingredienti:

- OS X

- Un minimo di conoscenza di Terminale e di vi (ma un minimo, davvero)

- Un minimo di conoscenza di AppleScript (ma un minimo, davvero)

- Quindici minuti di tempo

Step 1:

Si copi lo script qui sotto, si modifichino le variabili da modificare e lo si salvi dove si vuole.

Io consiglio di creare una cartella Scripts ed una cartella Backups nella home, con una sottocartella Backups/Logs per i log. Esempio: se il vostro user si chiama pippo, create una cartella /Users/pippo/Scripts/ per salvare lo script, una cartella /Users/pippo/Backups/ per salvare i backup, ed una sottocartella Users/pippo/Backups/Logs/ per i log. Il nome dello script determinerà in parte il nome del log, quindi dovrebbe avere un senso, e possibilmente non avere spazi. Un nome tipo docs_backup, ecco.

TextEdit va benissimo, purché si salvi senza estensione. Per questo esempio, effettueremo un backup della cartella Documenti.

#!/bin/bash

#

# Questo script effettua il backup della directory

# $origin_dir e lo sposta nella directory $backups_dir se il

# backup viene effettuato con successo. Lo script scrive un file

# di log nella directory $logs_dir. Lo script rimuove eventuali backup

# effettuati in precedenza - se si vuole conservarli, commentare la

# riga “rm $backups_dir/$name.*.tar.gzâ€

#

# Per evitare backup “ricorsivi", si consiglia di scegliere come

# $backups_dir una directory allo stesso livello o a livello superiore

# rispetto a $origin_dir.

#

# Lo script esce con 0 (successo) o -1 (fallimento).

#

# Autore: Francesco Longu [francesco at longu dot net]

#

# Script rilasciato sotto licenza GPL e testato su Mac OS X - YMMV.

#

# — variabili DA MODIFICARE —

#

# la directory dove salvare il backup:

backups_dir="/Users/ce/Backups/â€

#

# la directory oggetto del backup:

origin_dir="/Users/ce/Documents/â€

#

# la directory dove salvare il file di log:

logs_dir="/Users/ce/Backups/Logs/â€

#

# il nome dello script (che determina il nome del backup):

name="docs_backupâ€

#

# il formato della data (che determina il nome del backup):

date=$(date “+%d%m%Y")

#

# — variabili DA NON MODIFICARE —

#

host=`hostname`

#

# — cominciamo lo script —

#

# prepariamo la parte comune del log:

echo “Documents backup on $host†>> $logs_dir/$name.log

date “+DATE: %d/%m/%y%nTIME: %H:%M:%S†>> $logs_dir/$name.log

#

# ci spostiamo nella directory oggetto del backup:

cd $origin_dir

#

# diamo il comando tar, se tutto va per il verso giusto

# spostiamo il backup nella directory di destinazione:

if tar -c -z -p -v -f $name.$date.tar.gz $origin_dir

then

#

# commentare la linea seguente se se vuole

# conservare copia dei backup precedenti:

rm $backups_dir/$name.*.tar.gz

#

mv $name.$date.tar.gz $backups_dir

#

# e scriviamo il nostro successo nel log 

echo “Backup OK!†>> $logs_dir/$name.log

echo “***************†>> $logs_dir/$name.log

exit

#

# altrimenti, scriviamo il nostro fallimento nel log 

fi

echo “Backup FAILED!†>> $logs_dir/$name.log

echo “***************†>> $logs_dir/$name.log

exit -1

Questo script fa un backup in formato tar compresso della directory indicata come $backups_dir nella directory indicata come $origin_dir, e lo salva con la data del backup. Non contento, scrive un log nella sottodirectory Logs (che fantasia, eh?).

Lo script é frutto della mia mente malata, e di sicuro si puo’ fare di meglio… ma funziona, ed io mi accontento.

Step 2:

Si apra una shell (Terminal nel nostro caso) e si cambino i permessi sullo script per renderlo eseguibile. Prima di tutto, ci si sposti nella directory dove si é salvato lo script. Nel nostro caso:

aibuc:~ ce$ cd /Users/pippo/Scripts/

Se non siete sicuri del percorso, fate cosi: scrivete solo cd e poi trascinate l’icona della directory in questione (dal Finder) sulla finestra di Terminal, che lavorerà per voi scrivendo il percorso giusto. Andiamo avanti… nel nostro caso

aibuc:~ ce$ chmod 755 docs_backup

Non chiudete la shell, ci serve ancora!

Step 3:

Testiamo lo script. Non avete chiuso la shell, vero?

aibuc:~ ce$ ./docs_backup

Sentirete il processore girare ed un elenco infinito di file apparirà sul vostro schermo, é normale, non preoccupatevi! Alla fine, un bel file di backup dovrebbe trovarsi nella directory scelta, ed il log dovrebbe dirvi:

Documents backup on tuomac.local

DATE: 30/08/04

TIME: 17:02:20

Backup OK!

***************

Non funziona? Controllate i permessi e le directory please!!!

Funziona? E allora, qui viene il bello. Possiamo lanciare lo script automaticamente ad intervalli regolari, diciamo ogni settimana, grazie a crontab.

Step 4:

Crontab permette di eseguire comandi ad intervalli regolari.

La sintassi é semplice:

minute hour day month weekday command

Per maggior informazioni, lanciate

aibuc:~/ ce$ man crontab

per leggere il manuale di crontab, e

:q

per uscire quando avete finito di leggere.

Da shell digitiamo

aibuc:~ ce$ crontab -e

Per editare crontab. Questo aprirà un editor di testo, di solito VI o VIM.

Se vogliamo che lo script parta ogni lunedi alle 5 del pomeriggio, aggiungeremo la riga:

00 17 * * 1 /Users/ce/Scripts/docs_backup

Ossia, in italiano, “lancia lo script /Users/ce/Scripts/docs_backup alle 17:00, il primo giorno della settimana, ogni settimana ed ogni mese".

Salviamo con

:wq

Ed usciamo. Voilà, il nostro crontab si occuperà del resto, ed ogni settimana avremo un nuovo backup. Ci sono solo due cose da aggiungere:

1. Ovviamente, il computer deve essere accesso all’ora stabilita nel crontab, ça va sans dire.

2. Un backup non é un backup se rimane nello stesso computer. Spostatelo su un CD, una chiave USB, un disco esterno, un altro PC in rete, dove volete, ma vi prego, spostatelo.

Issue: come controllo i backup?

Qui ci viene incontro AppleScript. Si apra Applications:AppleScript:Script Editor, e si incollino le seguenti righe:

-- variabile da modificare: la cartella da aprire

set the_folder to "Users:ce:Backups"

-- variabile da modificare: il messaggio che appare sulla finestra di dialogo

display dialog "Check the results of the weekly backup!"

tell application "Finder"

    activate

    open the_folder

end tell

-- variabile da modificare: il percorso verso il file di log (NON modificare dopo il pipe | pbcopy)

do shell script "cat /Users/ce/Backups/Logs/docs_backup.log | pbcopy"

-- copio e incollo il log in un nuovo Sticky sul desktop 

tell application "Stickies"

    activate

    tell application "System Events"

 tell process "Stickies"

     keystroke "n" using {command down}

     keystroke "v" using {command down}

 end tell

    end tell

end tell

Si salvi lo script come applicazione (ad esempio, backup_reminder.app) e si aggiunga questa riga in fondo al crontab, tipo dieci minuti dopo il backup (vedi step 4):

00 13 * * 1 open /path/verso/backup_reminder.app

Questo script aprirà la cartella dove dovrebbe trovarsi il backup. Non contento, copierà il log del backup in un nuovo Sticky sul desktop, così non potete dire che vi siete scordati di controllare il backup.

Link al commento
Condividi su altri siti

  • 1 mese dopo...

Questo script è molto simile a quello che uso sul mio serverino :)

Vorrei far notare la potenza data alla variabile "origin_dir" che può contenere più di una directory come ad esempio

origin_dir="/Users/Mario/ /Users/Gianniâ€

e anche directory da non includere nel backup risultando così

origin_dir="/Users/Mario/ /Users/Gianni --exclude=/Users/Gianni/Moviesâ€

Errore di winzozz ...

"Tastiera non trovata: premere INVIO per continuare"

Link al commento
Condividi su altri siti

Originally posted by Zuk

Questo script è molto simile a quello che uso sul mio serverino :)

Vorrei far notare la potenza data alla variabile \"origin_dir\" che può contenere più di una directory come ad esempio

origin_dir=\"/Users/Mario/ /Users/Gianniâ€

e anche directory da non includere nel backup risultando così

origin_dir=\"/Users/Mario/ /Users/Gianni --exclude=/Users/Gianni/Moviesâ€

Grande!!! Questa proprio non la sapevo... il che significa che la directory Backups può essere messa ovunque, e poi opportunamente esclusa dai backup successivi modificando $origin_dir. Sono soddisfazioni :shock:

:)

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...