Backup Su Linux

Soluzioni di backup da analizzare

http://www.amanda.org/

http://www.bacula.org

https://labs.riseup.net/code/projects/backupninja

Simple script

  • clean the temporarily directory
  • create a backup in a directory
  • create a file compress with this format application.2013-12-28.Saturday.tbz
  • copy the directory (only modify or absent files) in amazon
  • delete files more older than 60 days, in amazon they remains
rm -rf /root/temp-backup/*
some-backup-script-write-in-root-temp-backup.sh
DATUM=`date +%F.%A`
tar jcvf /var/s3/backup/applicazione.$DATUM.tbz /root/temp-backup/*
HOSTNAME=`/bin/hostname`
/usr/bin/s3cmd sync /var/s3backups/ s3://bucket-name/directory/$HOSTNAME/backups/ 
find /var/s3/backup/* -mtime +60 -exec rm {} \;

il vecchio e caro rsync

rsync -aHK --stats --delete --exclude=*.pid /sorgente/ /destinazione/magari/montata/in/nfs

guida scritta bene http://www.thegeekstuff.com/2010/09/rsync-command-examples/

A livello di cartella

rsync -avz root@192.168.99.9:/etc/apache2 /etc/

se aggiungo un ultimo / lo effettua a livello di file all'interno della cartella
rsync -avz root@192.168.99.9:/etc/apache2/ /etc/apache2

aggiorna solo i file modificati -update options

 rsync --update -r /directory/partenza  utentedestinazione@macchinadestinazione:/directory/destinazione

preserva gli stessi permessi nella destinazione opzione -p

copiare su porte non standard

rsync --update  -r /home/giuseppe/ -e "ssh -p 1234" root@192.168.21.150:/home/giuseppe

Lavoriamo di script per backupare manualmente e solo quello che ci serve.

File crontab

01 0    * * * root      /root/bin/avvio/miosito.it giornaliero
04 0    * 1 * root      /root/bin/avvio/miosito.it mensile

/root/bin/avvio# cat miosito.it

#!/bin/sh
#
# decidiamo se lanciare lo script per il mese o l'anno
#
if test $1 = "giornaliero"
then
        echo "backup giornaliero"
        /root/bin/db/liferay-settimanale
        /root/bin/files/liferay-settimanale
fi

if test $1 = "mensile"
then
        echo "backup mensile"
        /root/bin/db/liferay-mensile
        /root/bin/files/liferay-mensile
fi

cat liferay-mensile

#!/bin/sh
#questo è un backup mensile che dura un anno va eliminato quello dello stesso mese dell'anno precedente 

rm /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $2}'`.gz 
pg_dump -h 79.143.180.22 -U liferay lportal | gzip -c > /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $2}'`.gz

cat liferay-settimanale

#!/bin/sh
#questo è un backup giornaliero che dura una settimana va eliminato quello dello stesso giorno della settimana precedente 
#dura circa 4 minuti

rm /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $1}'`.gz 
pg_dump -h 79.143.180.22 -U liferay lportal | gzip -c > /mnt/bucket/miosito.it/liferay/db-`date | awk '{print $1}'`.gz

cat liferay-mensile

#!/bin/sh
#questo è un backup mensile che dura un anno va eliminato quello dello stesso giorno della settimana precedente 
#ho testato e la durata è circa di 45 minuti il 3 luglio 2011

rm /mnt/bucket/miosito.it/liferay/cartella-`date | awk '{print $2}'`-.tar.gz 
tar czf /mnt/bucket/miosito.it/liferay/cartella-`date | awk '{print $2}'`-.tar.gz /mnt/museo/liferay-portal-6.0.6/

Per funzionare ci deve essere questo file
cat .pgpass

#file per non chiedere le password al dumo
#host:porta:nomedb:miousername:miapassword
ip:5432:miodb:miousername:miapass

rsnapshot

È una sovrastruttura che si basa su rsync in modo da semplificarne le operazioni.
Crea le directory appoggiandosi agli hard link usando i numeri progressivi.

Installarlo

apt-get install rsnapshot

Azioni fondamentali

  1. usare sempre i tab e mai gli spazi dentro il file rsnapshot.conf
  2. commentare le righe di esempio dei "backup" di default e degli "interval" di default
  3. impostare la snapshot root , è spiegato sotto come fare
  4. impostare i propri "backup" e i propri "interval"

Modificare in /etc/rsnapshot.conf la snapshot root

snapshot_root   /mnt/backup-rsnapshot/

Creare un backup mettendo in coda al file una riga di configurazione. Su ubuntu c'erano i parametri retain che non facevano funzionare le configurazioni li ho commentati

backup  /mnt/svn/repos  svn/
backup  /mnt/link-per-backup-alfresco/alfresco_data     alfresco/
interval        giornaliero     7

Ci sono tre campi per ogni riga che vanno separati da tabulazioni e non spazi altrimenti da errore. Il primo è l'azione nel caso di backup c'è successivamente il path sorgente e poi il nome che serve per l'archiviazione.
L'azione interval indica quante copie bisogna tenere dei backup. Ho scelto 7 in modo da avere il backup degli ultimi 7 giorni. La parola giornaliero è solo un significato memonico poteva essere qualunque nome.
Per farlo funzionare si può lanciare a linea di comando
rsnapshot -v giornaliero

usando la V grande invece di quella piccola si ottengono più dettagli.
Lui creerà una struttura dentro la snapshot root
/mnt/backup-rsnapshot# ls
giornaliero.0  giornaliero.1  giornaliero.2  giornaliero.3  giornaliero.4  giornaliero.5  giornaliero.6
/mnt/backup-rsnapshot#  ls giornaliero.0/
alfresco  svn

Macchina remota

Per fare il backup su macchina remota bisogna prima decommentare dal file di conf

cmd_ssh /usr/bin/ssh

Poi aggiungere una riga del genere

backup  utenteremoto@ipremoto:/path/remoto/da/backupare        pathlocale/

L'utente root con cui viene eseguito rsnapshot deve poter effettuare il login ssh con l'uso di chiavi senza password, per far questo vedere la pagina ssh

Automatizzazione

Per rendere automatico il backup bisogna eseguire il comando sopra ad intervalli regolari nel nostro caso una volta al giorno.
Per far questo rsnapshot mette a disposizione in fase di installazione il file

nano /etc/cron.d/rsnapshot
30 3    * * *           root    /usr/bin/rsnapshot giornaliero

Qui ho eseguito il comando alle 3:30 di notte tutti i giorni ci sono dentro il file degli esempi che vanno personalizzati.

Script

Script vogliamo lanciare uno script di backup di un db tramite rsnapshot e conservare il contenuto nella stessa maniera che abbiamo visto sopra, fonte di questa sottoparte http://wiki.ubuntu-it.org/AmministrazioneSistema/BackupDelSistema/Rsnapshot

Prima di tutto scrivo lo script

mysqldump nomedatabase --user=root --password=passworddiroot > dump.sql

Poi facciamo in modo che rsnapshot lo esegui e stori il contenuto nella cartella giusta.
backup_script  /root/script-backup/mysql-alfresco.sh   alfresco/
Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License