BackUp με νοημοσύνη....

nicholasp | Πέμ, 06/26/2008 - 17:02 | 2' | 22

Δοκίμασα διάφορους τρόπους backup που μπόρεσα να βρώ για linux. Όλα μου προσφέρουν αντιγραφή
των αρχείων μου στον εξωτερικό δίσκο (αυτό ζητάω...) κι επίσης προγραμματισμένα backups.

Δεν υπάρχει όμως λόγος κάθε φορά να περιμένω να γίνει backup σε τόσα αρχεία, διότι τα περισσότερα δεν έχουν
μεταβληθεί από την προηγούμενη φορά. Χρειάζομαι λοιπόν ένα πρόγραμμα που να αντιγράφει μόνο νέα αρχεία
και αρχεία που έχουν τροποποιηθεί. Αυτό θα κρατά πολύ λιγότερα λεπτά...

Το τελευταίο πρόγραμμα που δοκίμασα είναι το grsync το οποίο είναι ένα γραφικό περιβάλον για το rsync.
Δίνει πολλές επιλογές που προφανώς δεν γνωρίζω. Μπορώ με κάποια από αυτές να κάνω ακριβώς αυτό που
αναφέρω πιο πάνω; Αν όχι υπάρχει κάποιο πρόγραμμα που το κάνει; (κατά προτίμηση με γραφικό περιβάλον)

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

Γιατί δεν κάνεις ένα σκριπτάκι με το rsync; το βάζεις και στο crontab και ησυχάζεις.

αν απλά χρειάζεσαι backup τότε δεν χρειάζεσαι να προσθέσεις παραμέτρους στο rsync. τι ακριβώς θες να κάνει;

Έχω αντιγράψει συγκεκριμένους φακέλους απο το home στον εξωτερικό σκληρό usb και θέλω να τρέχω κάπου κάπου ένα πρόγραμμα το οποίο θα βλέπει αν υπάρχουν αρχεία που μεταβλήθηκαν και καινούργια αρχεία και θα αντιγράφει μόνο αυτά (αν τα αρχεία υπάρχουν ήδη αλλά τροποποιήθηκαν θα τα αντικαταστεί... Aυτό το ειδος backup χρειάζομαι....

Νικόλαος

Αν πχ θες να αντιγραφεις το home σου στο /media/extdisk/backup, η εντολή που χρειάζεσαι είναι η

rsync --recursive --times --perms --delete --exclude=somedir/ --exclude=`unwanted*` /home/user/* /media/extdisk/backup

Λοιπόν, με το --recursive αντιγράφει και υποκαταλόγους, τα --times --perms είναι για να διατηρεί permissions και timestamps και το --delete είναι για να διαγράφει αρχεία που έχουν διαγραφεί από τον αρχικό κατάλογο. Με τα --exclude ορίζεις καταλόγους ή αρχεια που δεν θες να αντιγράφει.

Την εντολή μπορείς να τη βάλεις στο crontab σου και να τρέχει κάθε μία ώρα ή 2 φορες τη μέρα κτλ. Αν την τρέχεις σαν root μπορείς να προσθέσεις στο τέλος &>/var/log/backup.log ώστε να βλέπεις αν υπήρξαν προβλήματα.

TPOMOΚΡΑΤΗΘΗΚΑ!
Ευχαριστώ για τη μέθοδο αλλά θα ήθελα να την "κουμαντάρω" από γραφικό περιβάλον και να πατάω ένα κουμπάκι συγχρονισμού των φακέλων μου κάπου-κάπου. Εγκατέστησα το grsync που είναι το γραφικό κέλυφος του rsync. Μπορώ να το ρυθμίσω να συμπεριφέρεται κατάλληλα? Έχει πολλές επιλογές και δεν τις γνωρίζω...
Ευχαριστώ για τη βοήθεια.

Νικόλαος

Το μόνο που δεν πρέπει να κάνεις είναι να τρομοκρατηθείς, άλλωστε κανείς δεν γεννήθηκε με γνώσεις, όλα μαθαίνονται.

Νομίζω πάντως ότι η εντολή είναι λίγο πολύ ξεκάθαρη στο τι κάνει. Δεν ξέρω τι παίζει με το grsync αλλά πραγματικά δεν βρίσκω λόγο να το προτιμήσεις αφου μπορείς να το βάλεις έτσι και να το κάνει αυτόματα. Πάντως πες μου που κόλλησες και τι σε τρόμαξε για να το κάνω πιο απλό αν θες.

Αρχικά ευχαριστώ για την πολύ θετική σου διάθεση.
Με προβληματίζει ότι θέλω να συγχρονίζω επιλεκτικά φακέλους απο το /home. Η κονσόλα δε με τρομοκρατεί (γνώριζα λίγο DOS παλιά). Μπορώ να απλοποιήσω τη διαδικασία για να είναι fixed η εντολή, βάζοντας όλους τους φακέλους που θέλω να συγχρονίσω σε ένα φάκελο με το όνομα "sync".
Ας λοιπόν υποθέσουμε ότι θέλω να κρατώ πάντα ενήμερο με όλες τις αλλαγές (προσθήκη ή μεταβολή αρχείων - ακόμα και διαγραφή) τον εξωτερικό usb hard drive που στο σύστημα μου εμφανίζεται ως "WD Passport" και το Mount Point είναι: "/media/WD Passport" και για το backup έχω σ'αυτόν ένα φάκελο με το προφανές όνομα "backup" --->> με τα αρχεία του φακέλου "sync" που βρίσκεται στο /home.
Αν τηρήσω ακριβώς τα παραπάνω στοιχεία, πως διαμορφώνεται η εντολή;
Πως μπορώ να την βάλω σε ένα script για να το τρέχω αυτόματα με διπλό κλικ; (δεν θέλω cron, θέλω κατά βούληση)

Την πρώτη φορά που θα τρέξει αν βρει τον κατάλογο backup άδειο, θα μεταφέρει όλα τα αρχεία του sync εκεί; Μετά κάθε φορά που το τρέχω θα ενημερώνει τον "backup" για τις αλλαγές στον "sync";

Είναι σημαντικό για μένα, γιατί δουλεύω σε αυτόν τον υπολογιστή κι έχω σημαντικά αρχεία. Δουλεύω αποκλειστικά linux και κάνω ταχτικά αναβαθμίσεις (και αλλαγές διανομής...)

Η διανομή μου αυτή τη στιγμή είναι το LinuxMint (Daryna) , ουσιαστικά Ubuntu 7.10.
Λεπτομέρειες συστήματος: GNOME 2.20.1 (Ubuntu 2007-10-19) -- Linux 2.6.22-14-generic --- AMD Athlon(tm) 64 Processor 3000+ --- memory 1011 MB ---

Αν λειτουργεί αυτό σωστά, θα μπορώ με θάρρος να πειραματίζομαι....

Σ'ευχαριστώ.

Νικόλαος

παιζει και το gtkrsync αν δε θες να μπλεκεις με command line. Εγω με αυτο κανω backup απο ενα pc στο αλλο μεσω samba και στην ουσια μεσω fusesmb. Δυστυχως στο καινουργιο mint δεν έχουν fusesmb απο default . Στο Daryna υπαρχει.

Για αυτο που ειπες η find μπορει να σε βοηθησει.

πχ.
find ~ -cmin 2 #βρες ολα τα αρχεια που το status αλλαξε πριν απο n λεπτα.

οποτε με το που διμιουργεις ενα αρχειο test το cmin θα το βρει.

επισεις δες cnewer, ctime, amin,anewer,atime και την man page της find.

[[email protected]]$uname -r|awk '{print $1}'

Αγαπητέ Νίκο,
σου προτείνω και εγώ να χρησιμοποιήσεις κατευθείαν το rsync με σκοπό να έρθεις ένα βηματάκι πιο κοντά στην κατανόηση του λειτουργικού σου. Το παρακάτω είναι απλά μια πιο αναλυτική παρουσίαση τις ιδέας του deerant. Στο παρακάτω παράδειγμα υποθέτω ότι θέλεις να συγχρονίσεις τα αρχεία σου που έχεις στο:
α) /home/nikolaos/sync
b) /home/nikolaos/data
προς τον εξωτερικό σου σκληρό, δηλαδή προς τα:
α) /media/WD Passport/sync
b) /media/WD Passport/data
Για ευκολία, είναι καλύτερα να τα συγχρονίσεις σε φακέλους με το ίδιο όνομα στο WD Passport σου. Κάνε λοιπόν μέσα στον WD Passport δύο φακέλους (sync και data).
Τώρα φτιάξε ένα αρχείο στο home σου και ονόμασε το ότι θέλεις (εδώ θα το πούμε daily_backup.sh)
[email protected]:~$ touch daily_backup.sh
Για να το δεις ότι πράγματι δημιουργήθηκε:
[email protected]:~$ ls -l daily*
-rw-r--r-- 1 nikolaos nikolaos 0 2008-07-04 11:18 daily_backup.sh
Πρόσεξε ότι δεν είναι εκτελέσιμο ακόμα διότι λείπει το x από την πρώτη ομάδα γραμμάτων (υποθέτω ότι γνωρίζεις περί δικαιωμάτων χρήσης αρχείων). Το κάνουμε εκτελέσιμο λοιπόν και τσεκάρουμε ότι πράγματι έγινε εκτελέσιμο:
[email protected]:~$ chmod 744 daily_backup.sh
[email protected]:~$ ls -l daily*
-rwxr--r-- 1 nikolaos nikolaos 0 2008-07-04 11:18 daily_backup.sh
Βλέπεις ότι τώρα έχει ένα x στην πρώτη τριάδα γραμμάτων (-rwx)?
Ωραίαααα!, τώρα το ανοίγουμε με έναν κειμενογράφο και γράφουμε μέσα τα εξής:
#!/bin/sh
rsync -avz --stats --delete /home/nikolaos/rsync/ /media/WD\ Passport/sync/
rsync -avz --stats --delete /home/nikolaos/data/ /media/WD\ Passport/data/
Σώζουμε και είσαι έτοιμος.
Ανοίγεις μια κονσόλα και το τρέχεις με:
[email protected]:~$ ./daily_backup.sh
Αφού το τρέξεις θα δεις ορισμένες πληροφορίες καθώς και τον αριθμό των αρχείων που μεταφέρθηκαν.
ΠΡΟΣΟΧΗ!
α) Διάβασε προσεχτικά την man σελίδα του rsync σχετικά με το (--delete) που βάλαμε στην εντολή. Με αυτή την εντολή, αν έχεις σβήσει ένα αρχείο από το /home σου και υπάρχει ακόμα στον WD θα σβηστεί και από εκεί. Έτσι θα έχεις όμως πλήρως συγχρονισμένα όλα τα αρχεία.
β) Διάβασε τι διαφορά κάνει το slash στο τέλος των δρόμων προς τους φακέλους (σε τι διαφέρει δηλαδή το: /home/nikolaos/rsync/ από το /home/nikolaos/rsync).
γ) Ενδέχεται να αντιμετωπίσεις πρόβλημα με τα δικαιώματα των αρχείων στον WD, κάτι το οποίο εξαρτάται από τον τρόπο με τον οποίο προσαρτάται ο δίσκος. Γενικά καλό θα ήταν να προσαρτάται με τα ίδια δικαιώματα που έχει και το /home σου καθώς και επίσης να έχει το ίδιο σύστημα αρχείων με το /home (π.χ. Αν από το /home που υποθέτω είναι ext3 κάνεις backup σε fat32 μπορεί να μην μεταφέρονται πλήρως τα δικαιώματα χρήσης των αρχείων μια και το fat32 δεν καταλαβαίνει από τέτοια).
Εννοείται ότι την πρώτη φορά θα κάνει κάποια ώρα, αλλά μετά θα είναι απίστευτα γρήγορο καθώς θα μεταφέρει μόνο τις αλλαγές. Αν θέλεις να συγχρονίσεις πίσω τα αρχεία πίσω στο /home απλά κάνε ένα άλλο αρχείο όπου θα βάλεις ανάποδα τους φακέλους.
Κάνε μια μικρή δοκιμή με μικρό όγκο αρχείων στην αρχή και πες μας αν προκύψει κάποιο πρόβλημα.

Ελπίζω να μην απογοητεύτηκες τελικά nicholasp από τα scriptάκια

Κατάφερες να δημιουργήσεις κάτι μόνος σου (πολύ καλές οι οδηγίες του bodiless) ή να χρησιμοποιήσεις το έτοιμο ??

Δεν πιστεύω να επιμένεις ακόμα στα παλιο-gui και να σε τρομάζουν λίγες γραμμές κώδικα :-p

Δεν μπόρεσα ακόμα να δοκιμάσω κανένα τρόπο γιατί κόλλησα στο εξής:
Ο εξωτερικός μου usb δίσκος western digital 250Gb, πρέπει να διαχωριστεί. Για να φτιάξω ένα partission με resizing δοκίμασα να ανοίξω το Gparted, αλλά δεν μου αφήνει επιλογή για resizing χωρίς να καταστρέψω πρώτα το περιεχόμενο.... (ίσως και το δίσκο)
Οκ. να κάνω εντελώς format δεν πειράζει αλλά όσες φορές προσπάθησα με το συγκεκριμένο εργαλείο διαπίστωσα ότι δεν τα πάει καθόλου καλά με τα εξωτερικά usb...
Τη τελευταία φορά μου χάλασε με απανωτές αποτυχίες ένα usb stick, ώσπου τελικά είδα το log με το σφάλμα και περιείχε μια πολύ απλή εντολή απο την κονσόλα, η οποία έκανε άψογα με την πρώτη το format... (mkfs.ext3 /dev/sda1)
Πως είναι δυνατόν το καλύτερο πρόγραμμα του είδους για linux να μη μπορεί αν χρησιμοποιήσει το ίδιο μια τόσο απλή εντολή, από τη στιγμή κιόλας που την γνωρίζει... (το πρόγραμμα μου έβγαλε το μήνυμα για το τι να κάνω...) Απογοήτευση..
Τέλος πάντως. Πρέπει να μοιράσω το δίσκο μου, ώστε να μπορώ στο ένα τμήμα να βάζω και αρχεία που να διαβάζει και το άλλο παλιολειτουργικό.... παράθυρο.. δηλ fat...(για συμβατότητα με φίλους), και ένα τμήμα πχ 100Gb να γίνει ext3 ώστε να αποθηκεύει και τα δικαιώματα των αρχείων κατά το backup...
Αν μπορείτε να βοηθήσετε να το καταφέρω, ώστε να προχωρήσω στα άλλα scripts...

ευχαριστώ παιδιά!

Νικόλαος

Και μια ακόμα ερώτηση:
Αν στους 2 φακέλους που μου προτίνει ως παράδειγμα ο bodiless βάλω link των κανονικών αρχείων, θα ακολουθούν τα script τα link? Θα γίνεται κανονικά ο συγχρονισμός?

Νικόλαος

Ok. Έχω νέα. Αποφάσισα να αφήσω κατά μέρους τη συμβατότητα με φίλους και χρησιμοποιώντας την παραπάνω εντολή φορμάρισα τον εξωτερικό σκληρό σε ext3. Το πρόβλημα μου? Ενώ ο δίσκος είναι 250Gb και αναγνωρίζονται ως οφέλιμα τα 232Gb, μου δίνει διαθέσιμα 217Gb ενώ 11,8Gb χρησιμοποιούνται! Γιατί συμβαίνει αυτό? Πριν που ήταν fat32 είχα 232Gb διαθέσιμα... 12Gb δεν είναι για πέταμα....

Νικόλαος

rsync man page]
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the tree

:-)

Το ext3 κρατάει περίπου 5% για χρήση root !!

mkfs.ext3 man page]-m reserved-blocks-percentage
Specify the percentage of the filesystem blocks reserved for the super-user. This avoids fragmentation, and allows root-owned daemons, such as syslogd(8), to continue to function correctly after non-privileged processes are prevented from writing to the filesystem. The default percentage is 5%.

ελπίζω να μην δίνω στα νεύρα με τις παραθέσεις από τις man pages των εντολών. Απλά τις θεωρώ σαν μια από τις καλύτερες πηγές πληροφόρησης
:-)

Thanks,
κατάφερα να κάνω 2 διαμερίσματα στο δίσκο. Ένα fat32 κι ένα ext3.
Έκπληξη στον ext-3 δεν έχω δικαιώματα εγγραφής! Μόνο ο root έχει δικαιώματα.. πως αλλάζει αυτό; chmod ...κάτι...

Νικόλαος

Μήπως με chown θα ήταν καλύτερα :?

Θα πρότεινα να πειράξεις λίγο το fstab ώστε να σου γίνεται mount εκεί που θέλεις και όπως θέλεις.

Έστω οτι το ext3 partition έχει label "eksoterikos".
Αρχικά δημιουργείς έναν κενό υποκατάλογο στο /media (ως root) όπου θα γίνεται πάντα mount η ext3 κατάτμηση:

#mkdir /media/eksoterikos

Μετά ανοίγεις το αρχείο /etc/fstab ως root πάλι και ψάχνεις να βρεις αν έχει είδη κάποια γραμμή που αναφέρεται στο partition αυτό (πιθανόν να χρησιμοποιεί το uuid της κατάτμησης).Αν υπάρχει βάζεις ένα κάγκελο μπροστά της για να την μετατρέψεις σε σχόλιο και προσθέτεις την εξής γραμμή:

/dev/disk/by-label/eksoterikos  /media/eksoterikos  ext3  auto,users,rw,exec,noatime  0  2

Τα uuid ή label όλων των κατατμήσεων σου τα βρίσκεις αν πας στον υποκατάλογο /dev/disk/ και χρησιμοποιείς ότι σε βολεύει

Ελπίζω να μη σε μπερδεύω περισσότερο
:-)

μου φαίνεται με πείραξε το καλοκαίρι και γράφω χαζομάρες (ή απλά πρέπει να πάω για ύπνο !!).

Αλλαγή owner (αν θέλεις):

#chown -R nicholasp:nicholasp /media/eksoterikos

Αλλαγή permissions (για να γράφει και να σβήνει όποιος θέλει):

#chmod -R 775 /media/eksoterikos

Σόρυ που δεν ασχολήθηκα τόσο καιρό αλλά είχα πάει διακοπές μερικές μέρες

Λοιπόν έχεις μπει σε βαθιά νερά, υπομονή μην σε χάσουμε :)
Τα δικαιώματα σε δίσκους δεν αλλάζουν με chmod, ορίζονται όταν γίνονται αυτοί mount.

Πριν όμώς σου πω πως αλλάζουν πρέπει να καταλάβεις πως λειτουργούν. Αν δώσεις ls -l θα δεις δίπλα από τα αρχεία κάτι που μοιάζει με -rwxr-xr-x ή drwxrwxrwx ή ακομα lrwxrwxrwx.

Το πρώτο γράμμα δείχνει τι είναι το "αρχείο" και είναι - για κανονικό αρχείο, d για φάκελο και l για link.
Εμας μας ενδιαφέρουν τα υπόλοιπα. Στο rwxrwxrwx το r ειναι για read, το w για write και το x για execute. Η πρώτη τριάδα είναι τα δικαιώματα του χρήστη στον οποίο ανήκει το αρχείο, η δεύτερη τριάδα είναι για το group στο οποίο ανήκει το αρχείο και η τελευταία τριάδα είναι για όλους τους άλλους. Όταν κάποια δικαιώματα λείπουν γράφεται μια παύλα στην θέση τους.

Δες τώρα ότι το rwx r-x r-x θα μπορούσε να γραφεί και 111 101 101. Βασικά έτσι αποθηκεύονται τα δικαιώματα, το καθένα είναι ένα bit. Όμως ένα τριψήφιο δυαδικό νούμερο abc σε οκταδική μορφή γράφεται 4a+2b+1c. Άρα το 111 101 101 μπορεί να γραφεί και 755. Αυτό το τριψήφιο νούμερο είναι αυτό που δίνεις στην εντολή chmod.

Το πρόβλημα είναι ότι αν ένας δίσκο γίνει mount read only δεν γίνεται να γράψεις πάνω του με κανέναν τρόπο (καλά κρατάω και μια πισινή σε αυτό). Για να γράψεις πάνω του πρέπει να γίνει mount writable. Εδώ μπαίνει το umask.

Το umask αντιπροσωπεύεται επίσης από ένα τριψήφιο νούμερο και συνήθως είναι 022. Το umask μπαίνει στο παιχνίδι όταν κάποιος χρήστης δημιουργεί ένα αρχείο. Πχ αν φτιάξεις έναν κατάλογο τα default permissions είναι 777 αλλά αν το umask σου είναι 022 τα permissions του καταλόγου τελικά είναι 777 - 022 = 755. Αντίστοιχα σε ένα αρχείο τα default permissions είναι 666 οπότε τα τελικά είναι 666 - 022 = 644.

Άρα αυτό που χρειάζεται είναι όταν κάνεις mount τον δίσκο είτε στο fstab είτε στην κονσόλα αν τον κάνεις χειροκίνητα πρέπει να βάλεις umask=022 ή umask=000 αν θες να γραφουν όλοι πάνω του (αν και το τελευταίο δεν ενδείκνυται).

Αντίστοιχα με το umask υπάρχει το fmask και το dmask τα οποία εφαρμόζονται μόνο στα αρχεία ή μόνο στους φακέλους αντίστοιχα, εξ ου τα d και f. Αν θες περισσότερες πληροφορίες δες τα παρακάτω links

http://en.wikipedia.org/wiki/Fstab
http://en.wikipedia.org/wiki/Umask
http://en.wikipedia.org/wiki/Fmask

Ελπίζω να μην φλυάρησα υπέρ του δέοντος.

Δυστυχώς στο πρόβλημά σου δεν μπορώ να απαντήσω με σιγουριά γιατί δεν ασχολήθηκα ποτέ με εξωτερικό που να έχει δύο partitions για να ξέρω πως λειτουργεί το automount. Αν το κάνεις μέσω fstab είναι πολύ ευκολο απλά βάζεις το umask. Όπως και να 'χει δοκίμασε και πες μας τι πρόβλημα θα εμφανιστεί (αν εμφανιστεί).

@deerant
Ελπίζω να πέρασες καλά στις διακοπές :-)
Επίσης μ'αρέσει πολύ ο τρόπος που γράφεις. Δεν παίζει ένα ξερό δώσε την εντολή τάδε. Εξηγείς τα πάντα και δε νομίζω να θεωρηθεί φλυαρία αυτό.

@nicholasp
Ελπίζω να μη σ'απογοητεύσαμε.
Όπως λέει και ο deerant, τα δικαιώματα εγγραφής και ανάγνωσης στους δίσκους ορίζονται τη στιγμή που αυτοί γίνονται mount. Σ'εμένα η γραμμή του fstab που αναφέρω δουλεύει μια χαρά για τους εξωτερικούς ext3 που έχω.

Αν αντιμετωπίσεις πάλι πρόβλημα ρίξε μια ματιά εδώ:
http://www.linuxinsider.gr/forum/%CE%91%CF%81%CF%87%CE%B5%CE%AF%CE%B1-w…
http://www.linuxinsider.gr/forum/fstab
Στο πρώτο link αναφέρονται λεπτομέρειες και τα κατάλληλα options για umask,uid,gid τα οποία αν προσθέσεις πιστεύω δεν θα υπάρχει πια πρόβλημα.

Αν και πάλι σου φαίνονται δύσκολα, κάνε ένα copy paste εδώ το fstab σου για πιο συγκεκριμένες οδηγίες :-)