Pagina 1 di 1

[Risolto] Migliorare script bash Backup

Inviato: venerdì 18 luglio 2008, 13:53
da Il_Meglio
Allora... visto che mi ero stancato di scrivere lunghi comandi da terminale per fare backup (cosa che faccio molto frequentemente per ovvi motivi di sicurezza  ;D), ho deciso di fare un bel scriptino bash.
L'ho anche commentato molto in modo che sia il più chiaro possibile. Questo però è solo la prima bozza, quindi, se potete, sareste così gentili da aiutarmi a migliorarlo??
Grazie anticipatamente.

Codice: Seleziona tutto

#!/bin/bash
# Questa frase di benvenuto chiede se si vuole creare o recuperare un archivio.
echo -n "Vuoi creare o recuperare un archivio? (c/r) " 
# Alla risposta, c o r, viene assegnata la variabile cr.
read cr
# Se questa variabile, quindi quello che hai risposto, corrisponde a c...
if [ $cr = c ]
then
# Si attiva questa parte dello script.
# Innanzitutto qusta frase avverte che eliminerà un eventuale file backup.tgz
# presente in / in modo da far spazio al futuro backup.
echo "Adesso verrà eliminato un eventuale file backup.tgz che si trova in / per poterlo sostituire con quello del backup"
# Quindi ci spostiamo in /
cd /
# ed eliminamo il presunto file.
sudo rm -rf /backup.tgz
# Quest'altra frase ci dice che il processo sta per iniziare.
echo "Adesso inizierà il processo di backup!"
# Ed ecco il vero comando che eseguirà il backup.
sudo tar cvpzf backup.tgz --exclude=/proc --exclude=t+found --exclude /var/spool --exclude /var/log --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
# Al termine, veniamio avvertiti che il backup è finito e non dobbiamo preoccuparci
# se escono messaggi come tar: uscita per errore ritardata dall'errore precedente.
echo "Il processo di backup è finito, puoi anche evitare di preoccuparti per messaggi di errori come: tar: uscita per errore ritardata dall'errore precedente, considerali semplicemente dei warning."
# Adesso, per comodità, questa frase ci dice che il file contenente
# il backup verrà trasferito sulla Scriviania.
echo "Adesso il file di backup varrà spostato sulla Scrivania"
# Ed ecco che ciò viene fatto.
sudo mv /backup.tgz /home/nicola/Scrivania/
# Adesso veramente è tutto finito, e questa frase lo dimostra.
echo "Tutto è finito, il file contenente il backup si trova sulla Scrivania"
# Ora non resta che chiudere lo script
exit 0
# Se invece di aver scritto all'inizio c, avessimo scritto r...
elif [ $cr = r ]
then
# ... questa frase ci chiede dove si trova il file che contiene il backup,
echo -n "Scrivi qui il percorso del file contenente il backup " 
# e a quello che scriviamo viene assegnata la variabile per (sta per percorso).
read per
# Ora veniamo avvertiti che sta iniziando il recupero,
echo "Adesso inizierà il processo di recupero!"
# ed ecco che inizia.
sudo tar xvpfz $per -C /
# Queste due frasi ci dicono che il recupero è completato e che non 
# dobbiamo preoccuparci se visualizziamo messaggi di errore come, 
# tar: uscita per errore ritardata dall'errore precedente.
echo "Tutto è finito, Ubuntu è tornato come prima!!"
echo "Aspetta, non allarmarti! Se visualizzi messaggi di errore come, tar: uscita per errore ritardata dall'errore precedente, considerali come dei warning, cioè fai finta che non esistono."
# Non resta che chiudere lo script.
exit 0
# Lo script potrebbe finire qui, ma poniamo il caso che invece di c o r, 
# avessimo scritto qualcos'altro, cosa sarebbe successo? Che lo script si
# sarebbe chiuso senza dirci niente, ed ecco che entra in gioco else.
else
# Questa frase ci dice cosa abbiamo scritto e ci avverte che se vogliamo
# ottenere qualche risultato, dobbiamo rispondere con c o r.
echo "Hai risposto con $cr!! Devi rispondere con c o r, a seconda se vuoi creare o recuperare un backup!!"
# Lo script, quindi si chiude.
exit 0
# Ora non ci resta che mettere fi per chiudere if, elif e else.
fi
# E lo script è veramente finito!
exit 0

Re: Migliorare script bash Backup

Inviato: venerdì 18 luglio 2008, 16:09
da steff
Bellino, mi chiedo solo se è necessario usare tar (cioè buttare via e rifare il backup dove avrà cambiato il 3% del contenuto) invece di rsync:

Codice: Seleziona tutto

# Questo script  il sincronizza in contenuto della home con il backup su harddisk usb, montato in /media/backup
#-exclude=cartella da escludere
dpkg --get-selections > ~/Documents/backups/pacchetti_installati.txt &&
rsync -auv --exclude=.local    --exclude=.thumbnails --exclude=video/xguardare --delete --stats /home/NOMELOGIN/ /media/backup/backup_LOGIN
I pacchetti installati si recuperano ad una eventuale reinstallazione con

Codice: Seleziona tutto

sudo bash
dpkg --set-selections < ./pacchetti_installati.txt && apt-get dselect-upgrade
In più ho salvati tre o quattro file modificati in /usr/lib e /etc.

Re: Migliorare script bash Backup

Inviato: venerdì 18 luglio 2008, 16:19
da Il_Meglio
bhè... penso che farò come dici tu, perchè il file finale con tar è di 2 giga....
Però se io non ho montato in media un gingillo di nome backup, cosa devo cambiare?
e poi si recuperano anche i pacchetti installati con apt-get e con synaptic??

Re: Migliorare script bash Backup

Inviato: venerdì 18 luglio 2008, 16:33
da steff
Devi adattare il nome del percorso nello script. I pacchetti gli reinstalli con la riga di comando che ho segnalato in una botta tutti.

Re: Migliorare script bash Backup

Inviato: venerdì 18 luglio 2008, 17:02
da Il_Meglio
Quindi qualcosa come questo dovrebbe funzionare, giusto?

Codice: Seleziona tutto

#!/bin/bash
dpkg --get-selections > ~/Scrivania/pacchetti_installati.txt &&
sudo rsync -auv --exclude=.local --exclude=.thumbnails --exclude=video/xguardare --delete --stats /home/nicola/ /home/nicola/Scrivania/backup`date +%d`.`date +%m`.`date +%y`

Re: Migliorare script bash Backup

Inviato: venerdì 18 luglio 2008, 17:59
da steff
No perché scrivi il backup sulla scrivania che stai anche backuppando...è un loop!
.local è il cestino, togli anche xguardare che non l'hai, penso. Un backup che ha senso deve essere almeno su un altra partizione, meglio su un altro disco. O salva in /mnt/backup per ora, ma devi poter scrivere nella cartella.

Re: Migliorare script bash Backup

Inviato: venerdì 18 luglio 2008, 20:52
da steff
PS: Se cambia il nome ogni backup (date) perdi il vantaggio di rsync: la prossima volta copia solo i file modificati e cancella sul backup i file che non esistono più in /home, quindi è molto veloce. Per questo la cartella del backup deve avere sempre lo stesso nome. Ovviamente il backup è delle stesse dimensione di /home meno il cestino e le cartelle escluse

Re: Migliorare script bash Backup

Inviato: sabato 19 luglio 2008, 10:30
da Il_Meglio
Credo di aver capito... quindi, visto che sullo stesso hd ho sia windows che ubuntu, potrei salvare il backup di rsync nella partizione di windows, e quindi verrebbe una casa del genere, giusto?

Codice: Seleziona tutto

#!/bin/bash
dpkg --get-selections > /media/ACER/backup_ubuntu/pacchetti_installati.txt &&
sudo rsync -auv --exclude=.local --exclude=.thumbnails --delete --stats /home/nicola/ /media/ACER/backup_ubuntu/backup
P.S.: a cosa servono i && ?

Re: Migliorare script bash Backup

Inviato: sabato 19 luglio 2008, 11:06
da steff
&& = prima esegue il comando che fa la lista attuale dei pacchetti installati poi esegue la sincronizzazione. Io avevo problemi a salvare su FAT, ma su ntfs ho mai provato, magari fai una piccola prova con una cartella sola prima, non so se conserva bene i permessi dei file, ne dubito. Io uso un disco USB da 160 formattato in ext3.

Re: Migliorare script bash Backup

Inviato: sabato 19 luglio 2008, 11:27
da Il_Meglio
Uhmmm... io il disco usb più grande che ho è di 1 giga (rotfl) (rotfl) (rotfl). Comunque ho provato con una sola cartella presente sulla scrivania, e mi sembra che non mi abbia dato problemi...
Però, per ogni file mi dice:

Codice: Seleziona tutto

rsync error: nomefile failed: Operation not permitted (1)
Magari posso provare a salvarlo in /mnt/backup ??

Re: Migliorare script bash Backup

Inviato: sabato 19 luglio 2008, 12:29
da steff
Non si dovrebbero vedere errori. Da

Codice: Seleziona tutto

man rsync

EXIT VALUES
       0      Success

       1      Syntax or usage error
quindi la sintassi non va bene. Sudo non ci vuole se lavori in /home

Re: Migliorare script bash Backup

Inviato: lunedì 21 luglio 2008, 9:53
da Il_Meglio
Scusa per la mia assenza...
Comunque è vero, non dovevo mettere sudo !!
Però per poter scrivere in mnt devo avere i permessi, quindi ho pensato che un

Codice: Seleziona tutto

sudo chmod 777 /mnt/backup/*
dovrebbe bastare, giusto?

Re: Migliorare script bash Backup

Inviato: lunedì 21 luglio 2008, 12:54
da steff
meglio

Codice: Seleziona tutto

chown nomelogin
(cambia proprietario, permessi 755). Intanto prova.

Re: Migliorare script bash Backup

Inviato: lunedì 21 luglio 2008, 13:04
da Il_Meglio
devo fare

Codice: Seleziona tutto

chown nomelogin /mnt/backup/*
??

Re: Migliorare script bash Backup

Inviato: lunedì 21 luglio 2008, 13:48
da steff

Codice: Seleziona tutto

sudo chown nomelogin /mnt/backup
Ma ripeto: un backup sullo stesso disco non è un backup perfetto  8)

Re: Migliorare script bash Backup

Inviato: lunedì 21 luglio 2008, 14:02
da Il_Meglio
Comunque funziona, grazie di tutto.
Purtroppo non ho a disposizione dischi esterni e mi devo adattare :).