backup ΤΩΡΑ !!

luckyb | Τετ, 03/19/2008 - 21:34 | 9' | 10

Rsync & bash script (ή αλλιώς: το υπέρτατο backup tool στα μέτρα του καθενός)

Η αλήθεια είναι ότι ποτέ μα ποτέ δεν κατάφερα να βρω ένα ολοκληρωμένο πρόγραμμα για backup που να ικανοποιεί όλες μου τις απαιτήσεις. Έτσι είπα να αξιοποιήσω το πολύ δυνατό εργαλείο rsync και να το φέρω στα μέτρα μου.

μια ματιά σε μερικές αλήθειες:

- Αχρείαστο να'ναι το backup, αλλά όταν έρθει εκείνη η ώρα πρέπει να είναι εύχρηστο.
- Το backup ΔΕΝ πρέπει να είναι μια επίπονη και πολύωρη διαδικασία που αποτρέπει τη συχνή χρήση της.
- Οι εκφράσεις "στήνω έναν backup server" ή "είσαι σίγουρος ότι τρέχει o daemon?" ή "μόνο με ένα ssh tunel θα σωθείς" είναι σαν να βγαίνουν από το στόμα του αρχιμηχανικού του galactica. Εγώ θέλω απλά μια στο τόσο να δίνω μια εντολή και ως δια μαγείας να δημιουργούνται αντίγραφα ασφαλείας από τα πολύτιμα αρχειάκια μου.

...και σε μερικές απαιτήσεις:

- Τα αντίγραφα ασφαλείας πρέπει να διατηρούν ακριβώς τις ίδιες ιδιότητες με τα αυθεντικά αρχεία (permissions, owner, group, time κτλ).
- Δεν θέλω κάθε φορά που κάνω backup να αντιγράφεται εξ' ολοκλήρου η διακοσίων gigabyte συλλογή με mp3 που έχω, αλλά μόνο οι αλλαγές.
- Αν σβήσω έναν υποκατάλογο ή αρχείο ή το μεταφέρω κάπου αλλού, θέλω να έχει την ίδια επίπτωση και στο αντίγραφο ώστε να μην καταντήσει μπάχαλο
- Αν έχω ξεχάσει να κάνω mount τον usb σκληρό μου ή κατά λάθος δώσω ένα όνομα υποκαταλόγου που δεν υπάρχει, θέλω αυτό να γίνεται αντιληπτό και να προειδοποιούμαι.
- Αν τροποποιήσω ένα αρχείο θέλω να γίνει το ίδιο και στο αντίγραφο του.
- Έχω έναν υποκατάλογο στο σκληρό, αλλά τα αρχεία του τα δουλεύω και με flashάκι σε άλλους υπολογιστές ή με το laptop μου. Πριν το backup θέλω να συγχρονίσω το directory αυτό με το flashάκι ή το laptop και να μείνουν τα πιο καινούργια αρχεία και στα δυο.
- Κάθε υποκατάλογος πρέπει να δημιουργεί ένα αντίγραφο ασφαλείας εκεί ακριβώς που θα του πω εγώ κι όχι όλα χύμα στο '/' ενός σκληρού.
- Να γίνονται όλες οι διαδικασίες με ασφάλεια - προστατεύοντάς τα original αρχεία μου αλλά και τα ήδη ευμεγέθη αντίγραφα που έχω κάνει παλιότερα.
- Στο σπίτι μου είναι δικτυωμένα κι άλλα pc με windows ή όχι. Δεν θα τ'αφήσω παραπονεμένα. Θα τους κάνω backup με το linux box μου.

--------------------------------------------------------------------------------------
Επί το έργον:

Θα χρησιμοποιήσουμε το εργαλείο - εντολή rsync
η οποία ακολουθεί την παρακάτω σύνταξη:

 rsync [options] [source] [destination] 

Για περισσότερες πληροφορίες δείτε τη σελίδα man

 man rsync 

ή σε konqueror που βολεύει:

 man:rsync 

Όπου source είναι ο υποκατάλογος που θέλουμε να κάνουμε backup.
Destination είναι ο υποκατάλογος που θέλουμε να δημιουργηθεί το αντίγραφο ασφαλείας.
Options είναι διάφορες επιλογές που τελικά θα κάνουν τη δουλειά έτσι ακριβώς όπως τη θέλουμε. Συγκεκριμένα θα χρησιμοποιήσουμε τα:

 -h --archive --progress --stats --update --delete-after 


--------------------------------------------------------------------------------------
Τι θα χρειαστούμε:

Φυσικά το rsync στα pc που τρέχουν linux.
Εγκαταστήστε το πακέτο (πχ. σε Debian based διανομή: ένα 'apt-get install rsync' αρκεί)

...αλλά και στα pc που τρέχουν Windows
Εγκαταστήστε το cygwin.
Κατά την εγκατάστασή του μη ξεχάσετε να τσεκάρετε και τα openssh, rsync (από το ΝΕΤ) και bash (από το SHELLS). Μη σας φαίνονται ακαταλαβίστικα. Τρέξτε τον installer του cygwin κι όλα θα ξεκαθαρίσουν :-)

--------------------------------------------------------------------------------------
Προεργασία - σενάριο:
(Εδώ λίγη εξοικείωση με τα mount και το fstab δεν βλάπτει)
Εννοείται ότι τα κατωτέρω είναι παραδείγματα κι εσείς χρησιμοποιείτε τα δικά σας ονόματα.

Destination (Εκεί που θα δημιουργήσω αντίγραφα ασφαλείας):
Οι τιμές των σκληρών έχουν πέσει σε εξευτελιστικά επίπεδα κι είπα να εκμεταλλευτώ το γεγονός αγοράζοντας έναν 500άρι για να τον χρησιμοποιήσω για backup.
Τον κάνω λοιπόν mount στο

 /media/backups 

Εδώ θα βάλω όλα τα αντίγραφα ασφαλείας.

Source (Τί θέλω να κάνω backup ??):
To username που κάνω login στο linux box είναι luckyb (πρωτότυπο !!) οπότε το home μου είναι:

 /home/luckyb 

Αυτό θέλω να το κάνω backup στο

 /media/backups/linux/homeMAIN 

Επίσης θέλω να κάνω backup το

 /etc 

(και μην αρχίσετε τα γιατί ??)
στο

 /media/backups/ 

Στον ίδιο σκληρό έχω περάσει και μια δεύτερη διανομή της οποίας το '/' έχω κάνει mount στο '/mnt/OS2' και στην οποία κάνω login με username πάλι 'luckyb' . Θα κάνω backup το home της:

 /mnt/OS2/home/luckyb 

στο

 /media/backups/linux/homeOS2 

Επίσης έχω έναν εξωτερικό σκληρό δίσκο που τον κάνω mount στο /media/xorao ta panta/
Από 'κει θα πάρω αντίγραφα ασφαλείας από τους υποκαταλόγους 'mp3' και 'photos'

 /media/xorao ta panta/mp3 

 /media/xorao ta panta/photos 

εδώ

 /media/backups/mp3 

 /media/backups/photos 

Για το τέλος άφησα το pc που τρέχει winXP με hostname 'goodika' κι έχει ως κοινόχρηστα αρχεία στο LAN του σπιτιού τα My Documents του.
Δοκίμασα πολλά αλλά τελικά κατέληξα στην απλή λύση να κάνω mount το 'My Documents' μέσα από το fstab με τη βοήθεια του samba.εδώ:

 /mnt/winXPpc/goodika 

σας δίνω την αντίστοιχη γραμμή του fstab δοκιμασμένη σε Sidux. Με λίγο googling πιστεύω θα τα καταφέρετε να κάνετε κάτι αντίστοιχο στο σύστημά σας.

//goodika/My\040Documents /mnt/winXPpc/goodika cifs defaults,username=luckyb,password=[luckyb'spassword],file_mode=0777,dir_mode=0777 0 0

Τον τελευταίο υποκατάλογο θα κάνω backup εδώ:

 media/backups/winXP/goodika Documents/ 

Sync (Υποκατάλογοι προς συγχρονισμό πριν το backup):
Έχω έναν υποκατάλογο στο home μου (τον 'UCL/TBC') στον οποίο έχω όλα τα αρχεία που αφορούν τη διπλωματική μου (ωραίες εποχές !!). Οπότε:

 /home/luckyb/UCL/TBC 

Το flashάκι μου έχει ως όνομα luckyusb και γίνεται mount στο /media/LUCKYUSB.
Εκεί μέσα έχω έναν υποκατάλογο 'diplomatiki' στον οποίο επίσης έχω όλα ή κάποια από τα αρχεία της διπλωματικής.

 /media/LUCKYUSB/diplomatiki 

Η ουσία εδώ είναι ότι κάποιες φορές δουλεύω τα αρχεία από το pc μου και κάποιες από το flashάκι σε άλλα pc. Πριν το backup θέλω οι δυο αυτοί υποκατάλογοι να περιέχουν τις ποιο καινούργιες εκδόσεις όλων των αρχείων που τροποποιήθηκαν σε οποιοδήποτε pc καθώς επίσης και άλλα αρχεία αν δημιουργήθηκαν.

----------------------------------------------------------------------------------------------------------------

Δώσε αστέρια!
Σχόλια

Ας τα βάλουμε όλα σ'ενα scriptάκι : (κατεβάστε το αρχείο luckyBackup.tar.gz και αποσυμπιέστε το) 1. Εισαγωγή χρήστη Το μόνο σημείο που χρειάζεται να τροποποιήσουμε (λέμε τώρα, πειραματιστείτε κατά βούληση !!) στο script είναι στην αρχή του που θα δηλώσουμε όλους τους υποκαταλόγους που θα κάνουμε συγχρονισμό και backup. Ανοίγουμε λοιπόν το "luckyBuckup.sh" μ'έναν editor και τροποποιούμε τις πρώτες γραμμές ως εξής:

# Sync --------------------------------------------------------------------------------------------------------- # Please define directories/files to be synced first : syncdirA[0]="/media/LUCKYUSB/diplomatiki/" syncdirB[0]="/home/luckyb/UCL/TBC/" #syncdirA[1]="path/to/2nd/syncdirA/" #syncdirB[1]="path/to/2nd/syncdirB/" # Backup ------------------------------------------------------------------------------------------------------- # please define directories to be backed up as well as the destination of the backups : sourcedir[0]="/home/luckyb/" destdir[0]="/media/backups/linux/homeMAIN/" sourcedir[1]="/etc/" destdir[1]="/media/backups/linux/etc/" sourcedir[2]="/mnt/OS2/home/luckyb/" destdir[2]="/media/backups/linux/homeOS2/" sourcedir[3]="/media/xorao ta panta/mp3/" destdir[3]="/media/backups/mp3/" sourcedir[4]="/media/xorao ta panta/photos/" destdir[4]="/media/backups/Photos/" sourcedir[5]="/mnt/winXPpc/goodika/" destdir[5]="/media/backups/winXP/goodika Documents/" #sourcedir[6]="/path/2/other/source directory/" #destdir[6]="/path/2/other/destination directory/"

Σημείωση: Οι γραμμές που ξεκινούν με το καγκελάκι '#' είναι απλά σχόλια κι όχι εντολές. Πιστεύω φαίνονται ξεκάθαρα τα ζευγάρια source και destination καθώς επίσης και τα ζευγάρια υποκαταλόγων που θα συγχρονιστούν. Σημαντικό: Οι αριθμοί μέσα στα "[ ]" ακολουθούν αύξουσα σειρά ξεκινώντας από το μηδέν "0" και μπορούν να επεκταθούν για όσα ζευγάρια θέλουμε. Επίσης: Προσοχή στην κάθετη γραμμή "/" στο τέλος κάθε υποκαταλόγου. Περισσότερα γι'αυτό θα βρείτε στα σχόλια του αρχείου. Κάνουμε save και κλείνουμε τον editor Είμαστε έτοιμοι !! Πάμε εκεί που σώσαμε το αρχείο και δίνουμε:

./luckyBackup.sh

ΣΗΜΕΙΩΣΗ: Μπορούμε να μεταφέρουμε το αρχείο στο ~/bin (αν δεν υπάρχει το δημιουργούμε) ή στο /usr/local/bin ώστε να τρέχει απ' όπου κι αν βρισκόμαστε 2. Έλεγχος του χρήστη που τρέχει το script.

check_user()

Αρχικά θα ελεγχθεί εάν τρέχετε το script ως απλός user ή ως root. Συνίσταται να το τρέχετε ως root ώστε να μην δημιουργούνται σφάλματα στη μεταφορά αρχείων για τα οποία δεν έχει καμία αρμοδιότητα ο ταπεινός user 3. Έλεγχος των υποκαταλόγων που έχουν δηλωθεί στο στάδιο (1)

check_dirs()

Μετά το script θα ελέγξει εάν οι υποκατάλογοι που έχουν δηλωθεί ως ανωτέρω υπάρχουν ή είναι κενοί. Τι σημαίνει αυτό ?? : - Αν ένας υποκατάλογος δεν υπάρχει τότε : α. Έχουμε κάνει τυπογραφικό λάθος στο στάδιο (1) β. Δεν έχει γίνει mount κάτι που θα έπρεπε γ. Δεν έχει δημιουργηθεί ακόμα εάν αναφέρεται σε destination υποκατάλογο επειδή το script τρέχει για πρώτη φορά. - Αν ένας υποκατάλογος είναι κενός τότε μάλλον κάτι δεν κάναμε mount. Επίσης θα μας δοθεί η ευκαιρία να συνεχίσουμε την εκτέλεση του script ή να τα παρατήσουμε για να φτιάξουμε τα προβλήματα. Σημαντικό: Ακόμα κι αν συνεχίσουμε με προβλήματα που αναφέρθηκαν το script θα προστατέψει τόσο τα αυθεντικά δεδομένα όσο και παλιότερα backup εάν υπάρχουν. 4. Συγχρονισμός υποκαταλόγων

sync_stuff()

Συνχίζοντας την εκτέλεση του κώδικα συγχρονίζονται οι υποκατάλογοι που έχουμε ορίσει 5. Δημιουργία αντιγράφων ασφαλείας υποκαταλόγων

backup_stuff()

και τέλος αντίστοιχα γίνεται το backup :-) ΣΥΜΒΟΥΛΗ: Τσεκάρετε πρώτα τη λειτουργία του script σε δοκιμαστικούς μικρούς υποκαταλόγους. Κάντε αλλαγές και ξανατρέξτε το για να βεβαιωθείτε ότι όλα βαίνουν καλώς Περισσότερες επεξηγήσεις για την εκτέλεση των εντολών θα βρείτε στα σχόλια του αρχείου. Άντε, σύντομα και με gui :-) Καλά backup.

Αν δοκίμασε κανείς το scriptάκι που με τόσο κόπο έφτιαξα :? θα εκτιμούσα ιδιαίτερα οποιοδήποτε σχόλιο
(ακόμα και το αν τρέχει μια χαρά στη διανομή τους ή τι βλακεία είναι αυτή, εγώ χρησιμοποιώ το killerbackup που έχει και gui ή ότι άλλο θέλει)

"τυχερε B" τουτο το scriptaki δουλευει σε ολες τις διανομες?
εχει το puppy ενα προγραμματακι που λεγετε pback.αμα ειναι μπορουμε να το πεταξουμε και να βαλουμε αυτο (και στο happy).
γραφικο περιβαλλον δεν παιζει ε?

Λογικά δουλεύει παντού, αρκεί να εγκαταστήσεις το rsync
Σίγουρα υπάρχουν πολλά έτοιμα όμορφα backup προγραμματάκια.
Όμως το rsync για μένα είναι το κορυφαίο εργαλείο για τη δουλειά (βλέπε "αλήθειες" και "απαιτήσεις" ανωτέρω post).
Απλά δεν έχω δει μέχρι τώρα κανένα gui για το συγκεκριμένο που να με καλύπτει γι'αυτό έγραψα το script.
Καλό το grsync αλλά του λείπει το κουμπί "κάνε μου όλες τις δουλειές που θέλω τώρα ".
Επίσης δεν ελέγχει αν δεν έχεις κάνει mount κάποιον σκληρό ή δικτυακό υποκατάλογο με αποτέλεσμα αν το ξεχάσεις να καταλήξεις να σβήσεις τα 200GB backup που είχες κάνει παλιότερα ...και πάλι απ'την αρχή.
Γραφικό περιβάλλον δεν παίζει ακόμα γιατί είναι παραπάνω χρόνος και κάνω τη δουλειά μου μια χαρά σε κονσόλα (αυτό χρησιμοποιώ για τα backup μου - με καταβόλεψε :-) ).
Άσε που το scriptάκι με μια μικρή μετατροπή (να κόψω τις ερωτήσεις ) μπορεί να μπει σε cron και να εκτελείται αυτόματα πχ μια φορά το μήνα.
Αν δω πάντως ότι ο κόσμος έχει ανάγκη από γραφικό gui κάτι θα κάνω ;-)

Ας κάνω όλα τ' άλλα και μετά θα βάλω ότι γλώσσες θέλεις :-p

Ξεκινάει το luckyb-Summer-Of-Code
:-)

Λοιπόν, το luckyb-summer-of-code πήγε πολύ καλά :-p

Καταρχήν στα πλαίσια ενός tutorial για bash scripting που έφτιαξα και μετά την παρότρυνση του GRIGRIS ("τι θα γίνει μ' εκείνο το tutorial που μου υποσχέθηκες??", "ακόμα να ξεκινήσεις ??" κι άλλα τέτοια :-p), συμμαζεύτηκε αρκετά το luckybackup script και βγήκε η έκδοση 0.2 :-)

Thank u GRIGRIS :-)

μερικά screenshots:
Free Image Hosting

Free Image Hosting

Φυσικά οποιον τον ενδιαφέρει να ξεκινήσει με bash scripting μπορεί να διαβάσει ολάκερο το tutorial το οποίο θα βρει εδώ:

http://sidux-gr.forumc.biz/forum-f12/

Ο κώδικας από το script βρίσκεται στην 7η ενότητα !!

Επιπλέον βρίσκεται στα τελειώματα το gui:

Free Image Hosting

Free Image Hosting

Free Image Hosting

GRIGRIS, ετοιμάσου για μετάφραση στα Ελληνικά :-p

Αν κανείς έχει καμιά ιδέα για τίποτα έξτρα options ας εκφράσει ελεύθερα τη γνώμη του :-)