sabato 12 giugno 2010

rsync

rsync

Introduzione

A mio giudizio una buona strategia di backup consiste nella copia dei file contenuti nelle directory /etc e /home/${nomeUtente}, in modo che sia preservata la situazione attuale: chiameremo sorgente l'insieme dei file di cui bisogna fare il backup, chiameremo backup la destinazione della sorgente, destinazione che puo' essere un hard disk o un server di backup. L'idea e' la seguente:

  • i file che non esistono piu' alla sorgente devono essere cancellati in backup.

  • i file in backup che devono essere scritti sono quelli nuovi (ossia che sono creati in sorgente in data successiva a quella dell'ultimo backup eseguito) o quelli modificati (ossia che differiscono dai dati presenti in backup per data dell'ultima modifica, lunghezza di byte ecc..).

rsync non copia tutti i byte di tutti i file ogni volta che viene lanciato, ma usa un algoritmo per dererminare solo quello che serve, in modo da risparmiare tempo e banda: in questo modo si puo' fare il mirroring di grandi quantita' di dati e l'esecuzione di backup incrementali che non crescono in maniera indefinita. La prima volta che rsync esegue la copia dei file e' piu' lento del comando cp, ma nelle copie successive si puo' osservare che vengono trasferite solo le informazioni relative alle differenze in byte dei file confrontati.

Utilizzo

Per realizzare il backup che rispetti i punti precedenti si puo' usare rsync nel modo seguente:

$ rsync -avz --delete ${percorsoSorgente} ${percorsoDestinazione}
  • -a: abbreviazione di archivio, e' un insieme di parametri, per la precisione -rlptgoD. -r copia ricorsivamente nelle sottodirectory, -l copia anche i link simbolici, -p mantiene sui file di destinazione i permessi presenti sui file di sorgente al momento della copia, -t mantiene la data di ultima modifica, -g preserva l'attributo di gruppo dei file di sorgente, -o preserva il proprietario dei file di sorgente (opzione attiva solo se rsync e' eseguita come root), -D preserva i devices (solo se rsync e' eseguito da root).

  • -v : verbose, vengono mostrate a video le operazioni che rsync sta facendo.

  • -z : zip, comprime i file in trasmissione, in modo da occupare meno banda di trasferimento, buona cosa se si fa un backup attraverso una LAN.

  • --delete : cancella i file che sono presenti in backup ma che non lo sono piu' in sorgente al momento del lancio di rsync.

Esempi ==

$ rsync -avz --delete /home/${utente} utenteBackup@backupServer:/backup/

Copia la directory ${utente} (con le sue sottodirectory) sul server backupServer nella directory /backup/ accedendo in modalita' ssh come utente utenteBackup.

# rsync -av --delete /etc /mnt/hd

Copia la directory /etc (e le sue sottodirectory) sull'hard disk montato su /mnt/hd.

Strategie di backup

  • Tutte le fasi seguenti devono essere fatte entro lo stesso giorno, in modo che non vengano aggiunti o editati file durante queste fasi.

  • Da chiavetta a portatile (update)

I file in destinazione che hanno lo stesso nome e sono diversi, vengono sostituiti con quelli di origine (e gli vengono assegnati i permessi di root). Viene anche creata una copia di backup di detti file.

# rsync -rbv /mnt/usb/utente/${dir} /home/utente

Si arriva dunque ad una situazione in cui i file nuovi si riconoscono perche' hanno i permessi di root, quelli modificati finiscono per ~ (e vanno editati per poi essere cancellati).

# find /home/utente -iname "*~"
# diff /home/utente/${file} /home/utente/${file~}

Una volta risolto il conflitto, si puo' cancellare il file che termina per ~.

  • Da portatile ad hd-portatile (rilascio)

Copia speculare della directory /home/utente su hd-portatile:

# rsync -av --delete /home/utente /mnt/usb/
# rsync -av --delete /etc /mnt/usb/
# mount /boot
# rsync -av --delete /boot /mnt/usb/
# umount /boot
  • Da hd-portatile a pc domestico (update)

Come da chiavetta a portatile:

# rsync -rvtb /mnt/usb/utente/${dir} /home/utente/

Da pc domestico a hd-backup

Come da portatile ad hd-portatile:

# rsync -av --delete /home/utente /mnt/usb/
# rsync -av --delete  /etc /mnt/usb/
# mount /boot
# rsync -av --delete /boot /mnt/usb/
# umount /boot
  • Da pc domestico a hd-portatile (rilascio)

    # rsync -rvt --delete /home/utente/${dir} /mnt/usb/utente/

  • Da hd-portatile a portatile (rilascio)

Come da pc domestico a hd-backup

# rsync -av --delete /mnt/usb/utente/${dir} /home/utente/
  • Da portatile a chiavetta (rilascio)

Come da pc domestico a hd-backup, --no-o --no-g non preserva gli attributi di gruppo e di owner:

# rsync -av --delete --no-o --no-g utente /mnt/usb/

Nessun commento: