Vai al contenuto


Archived

Questa discussione è archiviata e chiusa a future risposte.

Ce

[Tutorialino lunghino] Un backup a zero euro

Recommended Posts

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.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti


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â€

Condividi questo messaggio


Link di questo messaggio
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:

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

  • Statistiche forum

    529146
    Discussioni Totali
    6333530
    Risposte Totali
  • Statistiche Utenti

    122132
    Utenti totali
    14120
    Record utenti online
    LucreziaG
    Nuovo iscritto
    LucreziaG
    Iscritto
  • Statistiche annunci

    119
    Annunci attivi
    18
    Domande
    0
    Recensioni
    0
    Offerte
    Ultimi Annunci
    By Boston18
    29 giorni e 6 ore
×