PDA

View Full Version : backup con linux


jegger
21-10-2010, 11:31
Salve a tutti. Stavo provando a fare un backup automatizzato che permettesse poi di spostare il contenuto del backup in un hard disk di un altro pc della mia lan. Il tutto sempre sotto ubuntu.

Ho pensato di creare il backup con il tar e poi di usare netcat per trasferire il file.

Qualcuno sa consigliarmi un metodo più efficiente e veloce?

jegger
21-10-2010, 19:13
Per ora ho risolto usando rsync + ssh + crontab.

Ho creato uno scriptino semplice semplice backup.sh.
Poi coi privilegi di amministratore ho dato il comando crontab -e ed ho aggiunto una riga per avviare periodicamente lo scriptino:
0 23 1 * * /home/utente/scripts/backup.sh
dove:
- il primo numero rappresenta i minuti in cui si avvia il backup.
- il secondo l'ora.
- il terzo il giorno del mese.
- il quarto il mese dell'anno (con * significa tutti i mesi)
- il quinto il giorno della settimana (con * significa tutti i giorni della settimana)
- la directory contenente lo script da avviare automaticamente.
Quindi nel mio caso lo script si avvierà alle 23 del 1° giorno di ogni mese.

Dentro lo scriptino backup.sh ho scritto 2 righe di codice in croce:
sudo rsync -avz --delete -e ssh /home/utente/ [email protected]:/media/FC7C16247C15D9EA/backup
che permette di salvare la home dentro il pc con indirizzo 192.168.1.101
Le opzioni:
--delete servono a cancellare i file contenuti in backup che non sono più presenti nella posizione originaria
-v = verbose
-a = duplica anche le sottodirectoy in modo ricordsivo
-z = comprime i file durante il trasferimento
Ad ogni modo col comando man rsync è tutto ben spiegato con gli esempi

Infine ho configurato ssh in modo tale che non mi chiedesse la password ogni volta.
In pratica in locale, dove risiede il materiale da salvare ho dato:
ssh-keygen -t rsa
ed ho dato sempre invio senza mai scrivere nulla durante le opzioni

Così nella directory /home/utente/.ssh sono state create le 2 chiavi:
id_rsa -> chiave privata da mantenere in locale
id_rsa.pub -> chiave pubblica da trasferire sul pc remoto

Ho creato nel computer remoto un file authorized_keys interno alla directory /home/utente/.ssh ed infine ho spostato il contenuto della chiave pubblica dentro tale file col comando:

cat /home/utente/.ssh/id_rsa.pub | ssh remoteuser@remotehost 'cat >> .ssh/authorized_keys'

Ho lanciato lo script backup.sh e funziona!
Spero di esser tornato utile a qualcuno :)

Se avete qualche suggerimento per migliorare il mio sistema indicatemelo pure.

Una domanda: ora se dovessi formattare quali sono le directory che dovrei salvare con lo script oltre alla home?

Gimli[2BV!2B]
21-10-2010, 22:24
Ciao, il tuo metodo è funzionale e non troppo complesso.
Però mi fa nascere un dubbio: come la metti la password per sudo quando lo script è invocato da Cron? In particolare, serve sudo?

Riguardo al backup del sistema qui puoi trovare lo script che sto utilizzando da circa tre anni (http://www.hwupgrade.it/forum/showthread.php?t=1812123#4BP).
Le informazioni che archivio sono:
l'elenco dei pacchetti installati
la lista delle partizioni
la cartella /etc
il file config del kernel in uso
/boot/grub/menu.lst
il crontab
(non presenti nello script) lo script stesso, i suoi fratelli e pochissimi altri file

Oltre a questi dati, che considero il minimo indispensabile, potresti avere file importanti in /var (a seconda dei demoni che usi, la prima cosa che mi viene in mente sono i database di mysql in /var/lib/mysql) ed in /root.

Ah, /boot/grub/menu.lst è obsoleto per sistemi Ubuntu recenti, che installano GRUB 2 (https://wiki.ubuntu.com/Grub2); si può optare di salvare /boot/grub/grub.cfg. Personalmente considero quel file piuttosto inutile, visto che le informazioni necessarie per generarlo sono in /etc/default/grub (mentre il menu.lst conteneva al suo interno le impostazioni utilizzate durante il suo aggiornamento).

P.S. nello script hai specificato lo shabang (http://it.wikipedia.org/wiki/Shabang), vero?

eclissi83
22-10-2010, 00:50
;33428456']Ciao, il tuo metodo è funzionale e non troppo complesso.
Però mi fa nascere un dubbio: come la metti la password per sudo quando lo script è invocato da Cron? In particolare, serve sudo?

nell'esempio di jegger non servono privilegi elevati; chiaramente la cosa e' legata a cio' che va' rsyncato. nel caso ti servano privilegi di amministratore, puoi configurare sudo affinche' il comando rsync non necessiti di immissione della password e poi lanciare rsync con sudo direttamente nello script.

<omissis>
Oltre a questi dati, che considero il minimo indispensabile, potresti avere file importanti in /var (a seconda dei demoni che usi, la prima cosa che mi viene in mente sono i database di mysql in /var/lib/mysql) ed in /root.

i db di mysql e' conveniente salvarli attraverso mysqldump ricordandosi di effettuare il lock sulle tabelle prima. l'rsync dei file di mysql genera un backup corrotto, credo perche' i file sono lockati dal demone.

ciao

jegger
24-10-2010, 13:27
Vi ringrazio per le risposte che mi son tornate utili per creare il mio script.
Il codice a cui sono arrivato è il seguente:

#!/bin/sh

#Author: Carlo
#Description: Script per la creazione di backup automatico e rimozione vecchi backup.

HOSTNAME="192.168.1.101"
TEMP_PATH="/tmp"
LOG="/home/user/backup.log"
HOME="/home"
ETC="/etc"

#verifico se l'host remoto è raggiungibile
if ! ping -w 5 -c 4 $HOSTNAME > /dev/null ; then
echo "Host non raggiungibile: backup annullato." | cat >> $LOG
exit 1
fi

#creo la cartella temporanea in locale
DIR_NAME="backup--`date +%Y-%m-%d_%H.%M.%S`"
if ! mkdir -p $TEMP_PATH/$DIR_NAME ; then
echo "Creazione cartella temporanea fallita." | cat >> $LOG
exit 1
fi

FILE="$TEMP_PATH/$HOSTNAME-`date +%Y-%m-%d_%H.%M.%S`.tgz"

#creo l'archivio
sudo tar -cvf $FILE $ETC $HOME | cat > $LOG > /dev/null

#sudo mount -t ntfs-3g /dev/sdb1 /media/hd2

rsync -avz --delete -e ssh $FILE [email protected]:/media/hd2/backup

Ho modificato il file etc/sudoers in modo che mi permettesse di usare rsync e tar senza sudo. Ora però ho un paio di problemini:

- in remoto devo montare l'hd prima di salvare il backup. La riga per effettuare il montaggio è quella in marroncino. Ma come faccio a farlo? Sempre con ssh?

- ssh mi domanda la password prima di accedere all'host remoto. Come faccio ad evitare questa richiesta?

Grazie. :D

Gimli[2BV!2B]
24-10-2010, 14:06
Per eseguire il login con ssh senza password basta utilizzare la chiave per l'autenticazione, coma hai già impostato. Però devi farlo per l'utente root.

Per eseguire solamente il comando ti basta specificarlo in coda al comando di connessione. Esempio:gimli@kwankey ~$ ssh phoenix -p14789 -lgimli ls -la
total 15588
drwxr-xr-x 22 gimli gimli 4096 Aug 17 11:33 .
drwxr-xr-x 6 root root 4096 Oct 13 21:24 ..
-rw------- 1 gimli gimli 1329 Mar 18 2007 .ICEauthority
-rw------- 1 gimli gimli 259 Mar 18 2007 .Xauthority
drwx------ 2 gimli gimli 4096 Sep 14 2008 .aptitude
[...]
gimli@kwankey ~$

eclissi83
24-10-2010, 14:10
- in remoto devo montare l'hd prima di salvare il backup. La riga per effettuare il montaggio è quella in marroncino. Ma come faccio a farlo? Sempre con ssh?

ssh user@host mount -t ntfs-3g /dev/sdb1 /media/hd2

domanda banale: perche' non hai sempre mountata questa partizione? se e' un disco esterno devi tenerlo sempre acceso, tanto vale avere sempre mountata la partizione.


- ssh mi domanda la password prima di accedere all'host remoto. Come faccio ad evitare questa richiesta?

crea delle chiavi ssh, cerca come fare, e' semplice :)

Grazie. :D
prego :)

jegger
24-10-2010, 19:23
domanda banale: perche' non hai sempre mountata questa partizione? se e' un disco esterno devi tenerlo sempre acceso, tanto vale avere sempre mountata la partizione.


Perchè non mi ero mai posto il problema e montavo a manina ogni volta che mi serviva l'HD. Ora ho installato ntfs-config e posso bypassare questo problema. :)

Per eseguire il login con ssh senza password basta utilizzare la chiave per l'autenticazione, coma hai già impostato. Però devi farlo per l'utente root.

Quindi devo fare un ssh-keygen anche per root.

Ora provo e vi faccio sapere.

Grazie per la disponibilità.

andreaM
24-10-2010, 19:37
Ciao,

se cerchi la semplicita' ti consiglio "backintime"

http://backintime.le-web.org/

o

"sbackup" (Simple Backup Suite for desktop use)

http://sourceforge.net/projects/sbackup/

entrambi offrono backup incrementali . Sono disponibili sui repository uffciali tramite synaptic.

Ciao.

jegger
25-10-2010, 14:50
@andreaM: è che facendolo da solo imparo qualcosa ed ho anche qualche soddisfazione se funziona.

Ad ogni modo questo è lo script finito. Se avete suggerimenti per migliorarlo, proponete pure.

#!/bin/sh

#Author: Carlo
#Description: Script per la creazione di backup automatico e rimozione vecchi backup.

BACKUP_RECIEVER="192.168.1.101"
BACKUP_SENDER="192.168.1.100"
TEMP_PATH="/tmp"
LOG="/home/user/backup.log"
HOME="/home/"
ETC="/etc/"

#rimuovo il vecchio log
if [ -e $LOG ]; then
rm $LOG
fi

#verifico se l'host remoto è raggiungibile
if ! ping -w 5 -c 4 $BACKUP_RECIEVER > /dev/null ; then
echo "Host non raggiungibile. Backup annullato." | cat >> $LOG
exit 1
fi

FILE="$TEMP_PATH/$BACKUP_SENDER.tgz"

#creo l'archivio
if ! sudo tar -cf $FILE $ETC $HOME; then
echo "Creazione del file compresso fallita. Backup annullato." | cat >> $LOG
exit 1
fi

rsync -avz --delete -e ssh $FILE user@$BACKUP_RECIEVER:/media/HD1/backup
echo "Backup effettuato con successo il `date +%Y-%m-%d_%H.%M.%S`" | cat >> $LOG

sudo rm $FILE
echo "Backup completato con successo"

jegger
27-10-2010, 19:58
Scusate per il reply.
Alla fine ho sostituito rsync con scp perchè rsync con file di grandi dimensioni mi dà problemi.