zgr5 Δημοσ. 23 Ιουνίου 2010 Share Δημοσ. 23 Ιουνίου 2010 Καλησπέρα σας! Έχω έναν εξωτερικό δίσκο για να κρατάω backup τα αρχεία μου Κάθε φορά που τον κάνω mount αυτός βρίσκεται στο /media/external Η δομή των αρχείων του εξωτερικού δίσκου είναι ακριβώς ίδια με την δομή των αρχείων του σκληρού μου δίσκου, έχει δηλαδή σε backup όλα τα αρχεία του σκληρού δίσκου. Αυτό που κάνω για την ώρα είναι χειροκίνητη αντιγραφή. Σε ένα txt αρχείο κάθε φορά που δημιουργώ ένα νέο αρχείο ή τροποποιώ κάποιο απ τα ήδη υπάρχοντα αρχεία του δίσκου μου γράφω στο backup.txt αρχείο μου την πλήρη διαδρομή που βρίσκεται το τροποποιημένο ή νέο αρχείο και όταν συνδέω τον εξωτερικό μου ανοίγω και το backup.txt μου και βλέπω τα αρχεία που είναι για backup και τα αντιγράφω στον εξωτερικό. Αυτή η διαδικασία μπορεί να γίνει με ένα script? Δηλαδή να τρέχω ένα script σαν root (επειδή κάποια αρχεία στον σκληρό μου ανήκουν στον root) και αυτό το script... ... να σαρώνει τον σκληρό μου δίσκο και τον εξωτερικό και να βρίσκει τις διαφορές στα αρχεία και τους φακέλους μεταξύ σκληρού και εξωτερικού ... να βρίσκει στον σκληρό όλα τα αρχεία που είναι πιο φρέσκα στον σκληρό ... να βρίσκει τα νεοδημιουργημένα αρχεία στον σκληρό .. να αντιγράφει στον εξωτερικό τα παραπάνω αρχεία μόνον χωρίς να με ρωτάει για αντικατάσταση ή όχι κάθε φορά που βρίσκει ένα καινούριο ή τροποποιημένο αρχείο. Εφχαρστώ. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
mkrokod Δημοσ. 23 Ιουνίου 2010 Share Δημοσ. 23 Ιουνίου 2010 Φίλε απ' ότι κατάλαβα αυτό που σε ενδιαφέρει είναι να έχεις ουσιαστικά ένα Image του δίσκου σου σε έναν εξωτερικό δίσκο. Σωστά??? Acronis True Image! Είναι ένα πρόγραμμα που σου κάνει Image όλον! τον δίσκο ή αν θες μόνο κάποια Folder... έχει και δυνατότητα Schedule! Οπότε μήν τρως το χρόνο σου άδικα! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
zgr5 Δημοσ. 23 Ιουνίου 2010 Μέλος Share Δημοσ. 23 Ιουνίου 2010 Acronis True Image για linux? Tέτοιο είχα στα windows xp. Backup τα αρχεία μου θέλω βέβαια όχι όμως και το σύστημα όλο. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 23 Ιουνίου 2010 Share Δημοσ. 23 Ιουνίου 2010 Acronis σε Linux?! Τι να το κάνουμε; Αυτά είναι εμπορικά κόλπα των Windows, επειδή εκεί δεν υπάρχουν ενσωματωμένα εργαλεία... Αυτό που περιγράφεις υπάρχει προεγκατεστημένο και λέγεται rsync. Δεν χρειάζεται script. Υπάρχουν και gui frontends αν για κάποιον λόγο δεν θες να τρέχεις μια εντολή από την κονσόλα. Κάνει ταχύτατο συγχρονισμό στέλνοντας μόνο τις διαφορές, όχι όλα τα αρχεία από την αρχή. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
twiner Δημοσ. 23 Ιουνίου 2010 Share Δημοσ. 23 Ιουνίου 2010 για δικό σου script: >man rsync ή για διευκόλυνση κάποια εφαρμογή σαν το luckyBackup. [edit] με πρόλαβε ο κύριος alkisg. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 23 Ιουνίου 2010 Share Δημοσ. 23 Ιουνίου 2010 Επίσης, ακόμα καλύτερα, μπορείς να χρησιμοποιήσεις το rdiff-backup, το οποίο επιπλέον σου δίνει τη δυνατότητα να κρατάς και διαφορές με παλαιότερες εκδόσεις των αρχείων σου, ώστε να μπορείς να ανακτήσεις το ίδιο αρχείο από διαφορετικές ημερομηνίες. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
zgr5 Δημοσ. 23 Ιουνίου 2010 Μέλος Share Δημοσ. 23 Ιουνίου 2010 παιδιά ευχαριστώ πολύ! ρίχνω διάβασμα man rsync και man rdiff Και πάντα αναρωτιόμουν τι κάνει αυτό το rsync. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
geopoul Δημοσ. 23 Ιουνίου 2010 Share Δημοσ. 23 Ιουνίου 2010 Επίσης, ακόμα καλύτερα, μπορείς να χρησιμοποιήσεις το rdiff-backup, το οποίο επιπλέον σου δίνει τη δυνατότητα να κρατάς και διαφορές με παλαιότερες εκδόσεις των αρχείων σου, ώστε να μπορείς να ανακτήσεις το ίδιο αρχείο από διαφορετικές ημερομηνίες. Αυτό μπορεί να γίνει και ως εξης: κάνεις backup με το rsync στον εξωτερικό δίσκο πχ με κάτι σαν >rsync -avhP --delete-after /home/user/data/ /media/external/backup και μετά παίρνεις ένα snapshot του backup directory χρησιμοποιώντας hardlinks ως εξής: >cp -rl /media/external/backup /media/external/backup-$(date +"%Y-%m-%d") Αυτό χρειάζεται λίγη προσοχή όμως ώστε το rsync να μην τροποποιήσει τα αρχεία in-place και "χαλάσει" τα παλιά snapshot, κάτι το οποίο δεν συμβαίνει με τα options που έδωσα παραπάνω. Το στάδιο του snapshot μπορεί γίνει ακόμα καλύτερα αν το συστήμα αρχείων στο /media/external είναι btrfs. Τέλος μία διαφορετική λύση θα ήταν η χρήση (με κάποιον τρόπο) ενός deduplicating συστήματος αρχείων όπως το lessfs. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 23 Ιουνίου 2010 Share Δημοσ. 23 Ιουνίου 2010 Αυτό μπορεί να γίνει και ως εξης: κάνεις backup με το rsync στον εξωτερικό δίσκο πχ με κάτι σαν >rsync -avhP --delete-after /home/user/data/ /media/external/backup και μετά παίρνεις ένα snapshot του backup directory χρησιμοποιώντας hardlinks ως εξής: >cp -rl /media/external/backup /media/external/backup-$(date +"%Y-%m-%d") Όχι, δεν είναι το ίδιο. Το rdiff-backup έχει ένα tree, το current snapshot σου δηλαδή, και ένα σύνολο από compressed rdiffs για όσα αρχεία έχουν αλλάξει. Με λίγα λόγια, κρατάει compressed binary deltas από κάθε αρχείο χωριστά με αποτέλεσμα συνήθως ένα backup με deltas 15 ημερών να πιάνει ελάχιστο χώρο παραπάνω από το original tree. Αυτό που λες το κάνει αυτόματα το rsnapshot, αλλά με αυτόν τον τρόπο αν έχει αλλάξει ένα bit σε ένα αρχείο, αποκτάς ένα καινούργιο αντίγραφο ολόκληρου του αρχείου, ενώ το rdiff-backup θα αποθήκευε μόνο το rdiff του block που περιείχε το bit. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
geopoul Δημοσ. 24 Ιουνίου 2010 Share Δημοσ. 24 Ιουνίου 2010 Όχι, δεν είναι το ίδιο. Το rdiff-backup έχει ένα tree, το current snapshot σου δηλαδή, και ένα σύνολο από compressed rdiffs για όσα αρχεία έχουν αλλάξει. Με λίγα λόγια, κρατάει compressed binary deltas από κάθε αρχείο χωριστά με αποτέλεσμα συνήθως ένα backup με deltas 15 ημερών να πιάνει ελάχιστο χώρο παραπάνω από το original tree. Αυτό που λες το κάνει αυτόματα το rsnapshot, αλλά με αυτόν τον τρόπο αν έχει αλλάξει ένα bit σε ένα αρχείο, αποκτάς ένα καινούργιο αντίγραφο ολόκληρου του αρχείου, ενώ το rdiff-backup θα αποθήκευε μόνο το rdiff του block που περιείχε το bit. Ok, μπέρδεψα το rsnapshot με το rdiff-backup. Για να καταλάβω, έχω 2 απορίες 1) πως δημιουργεί το rdiff-backup τα deltas; χρησιμοποιεί τον αλγόριθμο rsync; Αν ναι, τότε θα πρέπει κάθε φορά που κάνεις backup να υπολογίζει τα rolling CRC για όλα τα αρχεία που κάτι που μπορεί να είναι χρονοβόρο. 2) πως μπορείς να δεις τα αρχεία στα παλιά snapshot; με την μέθοδο rsync/hardlinks μπορείς να δεις τα παλιά snapshot άμεσα χωρίς να κάνεις τίποτα. Μπορείς επίσης να σβήσεις πολύ εύκολα ένα παλιό snapshot. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 24 Ιουνίου 2010 Share Δημοσ. 24 Ιουνίου 2010 Ok, μπέρδεψα το rsnapshot με το rdiff-backup. Για να καταλάβω, έχω 2 απορίες 1) πως δημιουργεί το rdiff-backup τα deltas; χρησιμοποιεί τον αλγόριθμο rsync; Αν ναι, τότε θα πρέπει κάθε φορά που κάνεις backup να υπολογίζει τα rolling CRC για όλα τα αρχεία που κάτι που μπορεί να είναι χρονοβόρο. Ούτως ή άλλως το rsync υπολογίζει τα rolling checksums για όλα τα αρχεία που θεωρεί πιθανά για μεταφορά (λόγω αλλαγής μεγέθους ή mtime ή οτιδήποτε άλλο). Απ' τη στιγμή που ξέρεις ποια blocks έχουν αλλάξει ακριβώς, γιατί να μην τα κρατήσεις και ένα αντίγραφο; Στην ουσία αυτό κάνει το rdiff-backup. 2) πως μπορείς να δεις τα αρχεία στα παλιά snapshot; με την μέθοδο rsync/hardlinks μπορείς να δεις τα παλιά snapshot άμεσα χωρίς να κάνεις τίποτα. Μπορείς επίσης να σβήσεις πολύ εύκολα ένα παλιό snapshot. Δεν έχεις απευθείας πρόσβαση σε παλαιότερες εκδόεσεις, πρέπει να ανασυνθέσεις το αρχείο από την τρέχουσα έκδοση + τα increments που θες. Προφανώς ο ευκολότερος (και ασφαλέστερος) τρόπος να το κάνεις αυτό είναι χρησιμοποιώντας το ίδιο το rdiff-backup με την επιλογή -r. Από 'κει και έπειτα, το να σβήσεις ένα παλιό snapshot ισοδυναμεί απλά με το να σβήσεις τα increments που οδηγούν σε παλιές εκδόσεις. Για τη λειτουργία αυτή το rdiff-backup παρέχει την επιλογή --remove-older-than. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
geopoul Δημοσ. 24 Ιουνίου 2010 Share Δημοσ. 24 Ιουνίου 2010 Ούτως ή άλλως το rsync υπολογίζει τα rolling checksums για όλα τα αρχεία που θεωρεί πιθανά για μεταφορά (λόγω αλλαγής μεγέθους ή mtime ή οτιδήποτε άλλο). Απ' τη στιγμή που ξέρεις ποια blocks έχουν αλλάξει ακριβώς, γιατί να μην τα κρατήσεις και ένα αντίγραφο; Στην ουσία αυτό κάνει το rdiff-backup. Όχι, στο rsync έχεις έλεγχο για το αν θα το κάνει αυτό. Με το option --whole-file που είναι και το default κοιτάει μόνο το mtime για όλα τα αρχεία. Έτσι είναι πολύ γρήγορο. Κάνει στην ουσία το ίδιο χρόνο με το >find /home/user/data + το χρόνο αντιγραφής των αλλαγμένων αρχείων (αν υπάρχουν). Αυτό για μένα είναι πολύ σημαντικό γιατί το τρέχω αρκετά συχνα (τουλάχιστο μία φορά κάθε μέρα) σε 500GB δεδομένα. Αυτό που χάνεις είναι (όπως επισημένεις και 'συ) ότι αντιγράφεις ολόκληρο το αρχείο ακόμα και αν έχει αλλάξει μόνο ένα block. Νομίζω όμως ότι καλύτερη λύση είναι να αφήσεις το σύστημα αρχείων να το χειριστεί αυτό κάνοντας deduplication όπως συμβαίνει με το lessfs ή το ZFS (ή στο μέλλον το btrfs). Δεν ξέρω αν στο rdiff-backup υπάρχει option αντίστοιχο του --whole-file ώστε να μπορείς να διαλέξεις ανάμεσα σε ταχύτητα και efficiency. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 24 Ιουνίου 2010 Share Δημοσ. 24 Ιουνίου 2010 Όχι, στο rsync έχεις έλεγχο για το αν θα το κάνει αυτό. Με το option --whole-file που είναι και το default κοιτάει μόνο το mtime για όλα τα αρχεία. Έτσι είναι πολύ γρήγορο. Κάνει στην ουσία το ίδιο χρόνο με το >find /home/user/data + το χρόνο αντιγραφής των αλλαγμένων αρχείων (αν υπάρχουν). Tο rsync (και το rdiff-backup) έχει δύο διαφορετικές δουλειές να κάνει: Να καθορίσει με ποια αρχεία θέλει να ασχοληθεί κατ' αρχήν. By default και τα δύο προγράμματα το κάνουν αυτό κοιτώντας τα metadata των αρχείων (μέγεθος, ώρα τροποποίησης κλπ), οπότε φτιάχνουν μια λίστα με τα αρχεία που αποφάσισαν ότι πρέπει να ασχοληθούν. Να μεταφέρει τα αρχεία που θεωρεί ότι έχουν αλλάξει. Εκεί και τα δύο over network χρησιμοποιούν τον ίδιο αλγόριθμο, αυτόν του rsync, που προβλέπει ότι για τα αρχεία που θέλουν να μεταφέρουν, κάθονται και υπολογίζουν το rolling checksum και στα δύο άκρα (αποστολέας - παραλήπτης) και βρίσκουν ποια blocks έχουν διαφορές. Το --whole-file (που είναι default μόνο όταν source και destination είναι local) λέει στο rsync να μην χρησιμοποιήσει rolling checksums και delta transfers, αλλά να μεταφέρει ολόκληρο το αρχείο που θεωρεί ότι έχει αλλάξει. Τώρα, όταν κάνεις backup σε διαφορετικό υπολογιστή από αυτόν που έχει τα δεδομένα, το bottleneck συνήθως είναι το δίκτυο, γι' αυτό η μέθοδος με τα rolling checksums είναι αποδοτική. Όταν κάνεις backup στο ίδιο σύστημα, τα rolling checksums δεν έχουν νόημα, διότι για να τα εξαγάγεις πρέπει να διαβάσεις ούτως ή άλλως όλο το αρχείο, οπότε αφού το διαβάζεις όλο, γιατί να μην το αντιγράψεις όπως είναι; Το rsync το κάνει αυτό by default, ενώ το το rdiff-backup υπολογίζει τα checksums για να κρατήσει τα packed deltas ούτως ή άλλως. Οπότε, για αρχείο x bytes, το rsync θα διαβάσει x και θα γράψει x, ενώ το rdiff-backup θα διαβάσει 2x και θα γράψει maximum χ bytes. Η διαφορά σε χρόνο στατιστικά δε θα είναι μεγάλη αλλά θα δεις σίγουρα παραπάνω CPU usage από την πλευρά του rdiff-backup, το οποίο όμως ανταλλάσσεις με μειωμένο μέγεθος στο δίσκο. Σε κάθε περίπτωση, μια δοκιμή με πραγματικά δεδομένα θα σε πείσει. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
geopoul Δημοσ. 24 Ιουνίου 2010 Share Δημοσ. 24 Ιουνίου 2010 Tο rsync (και το rdiff-backup) έχει δύο διαφορετικές δουλειές να κάνει: Να καθορίσει με ποια αρχεία θέλει να ασχοληθεί κατ' αρχήν. By default και τα δύο προγράμματα το κάνουν αυτό κοιτώντας τα metadata των αρχείων (μέγεθος, ώρα τροποποίησης κλπ), οπότε φτιάχνουν μια λίστα με τα αρχεία που αποφάσισαν ότι πρέπει να ασχοληθούν. Να μεταφέρει τα αρχεία που θεωρεί ότι έχουν αλλάξει. Εκεί και τα δύο over network χρησιμοποιούν τον ίδιο αλγόριθμο, αυτόν του rsync, που προβλέπει ότι για τα αρχεία που θέλουν να μεταφέρουν, κάθονται και υπολογίζουν το rolling checksum και στα δύο άκρα (αποστολέας - παραλήπτης) και βρίσκουν ποια blocks έχουν διαφορές. Το --whole-file (που είναι default μόνο όταν source και destination είναι local) λέει στο rsync να μην χρησιμοποιήσει rolling checksums και delta transfers, αλλά να μεταφέρει ολόκληρο το αρχείο που θεωρεί ότι έχει αλλάξει. Τώρα, όταν κάνεις backup σε διαφορετικό υπολογιστή από αυτόν που έχει τα δεδομένα, το bottleneck συνήθως είναι το δίκτυο, γι' αυτό η μέθοδος με τα rolling checksums είναι αποδοτική. Όταν κάνεις backup στο ίδιο σύστημα, τα rolling checksums δεν έχουν νόημα, διότι για να τα εξαγάγεις πρέπει να διαβάσεις ούτως ή άλλως όλο το αρχείο, οπότε αφού το διαβάζεις όλο, γιατί να μην το αντιγράψεις όπως είναι; Το rsync το κάνει αυτό by default, ενώ το το rdiff-backup υπολογίζει τα checksums για να κρατήσει τα packed deltas ούτως ή άλλως. Οπότε, για αρχείο x bytes, το rsync θα διαβάσει x και θα γράψει x, ενώ το rdiff-backup θα διαβάσει 2x και θα γράψει maximum χ bytes. Η διαφορά σε χρόνο στατιστικά δε θα είναι μεγάλη αλλά θα δεις σίγουρα παραπάνω CPU usage από την πλευρά του rdiff-backup, το οποίο όμως ανταλλάσσεις με μειωμένο μέγεθος στο δίσκο. Σε κάθε περίπτωση, μια δοκιμή με πραγματικά δεδομένα θα σε πείσει. Απ' ότι φαίνεται, έκανα το σφάλμα να υποθέσω ότι rdiff-backup δουλεύει όπως το rsync --checksum. Το rsync --checksum υπολογίζει τα rolling checksums για όλα τα αρχεία στο destination και για μόνο τα αλλαγμένα στο source. Έτσι μπορεί να ανιχνεύσει και να αποφύγει να μεταφέρει block δεδομένων που υπάρχουν ήδη, ακόμα και σε διαφορετικά αρχεία. Από τα λεγόμενα σου συμπεραίνω ότι το rdiff-backup μάλλον χρησιμοποιεί τον αλγόριθμο rsync σε επίπεδο αρχείου. Είναι σωστό αυτό; Αν είναι όντως έτσι, τότε δεν θα είναι σε θέσει να ανιχνεύσει κοινά block δεδομένων σε διαφορετικά αρχεία. Έτσι πχ αν ένα αρχείο έχει μετονομαστεί, θα το ξαναμεταφέρει/ξαναποθηκεύσει ενώ το rsync --checksum θα το αποφύγει αυτό. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 27 Ιουνίου 2010 Share Δημοσ. 27 Ιουνίου 2010 Απ' ότι φαίνεται, έκανα το σφάλμα να υποθέσω ότι rdiff-backup δουλεύει όπως το rsync --checksum. Το rsync --checksum υπολογίζει τα rolling checksums για όλα τα αρχεία στο destination και για μόνο τα αλλαγμένα στο source. Έτσι μπορεί να ανιχνεύσει και να αποφύγει να μεταφέρει block δεδομένων που υπάρχουν ήδη, ακόμα και σε διαφορετικά αρχεία. Από τη manpage του rsync δε βγάζω το ίδιο συμπέρασμα. Εγώ καταλαβαίνω ότι απλά χρησιμοποιεί το (MD4 ή MD5) checksum του αρχείου για να δει αν έχει αλλάξει, αντί να κοιτάει μόνο μέγεθος και mtime και επομένως δε φαίνεται να έχει καμία σχέση με τα rolling checksums. Από τα λεγόμενα σου συμπεραίνω ότι το rdiff-backup μάλλον χρησιμοποιεί τον αλγόριθμο rsync σε επίπεδο αρχείου. Είναι σωστό αυτό; Και το rsync σε επίπεδο αρχείου λειτουργεί. Αν είναι όντως έτσι, τότε δεν θα είναι σε θέσει να ανιχνεύσει κοινά block δεδομένων σε διαφορετικά αρχεία. Έτσι πχ αν ένα αρχείο έχει μετονομαστεί, θα το ξαναμεταφέρει/ξαναποθηκεύσει ενώ το rsync --checksum θα το αποφύγει αυτό. Εξ όσων γνωρίζω, το rsync δεν μπορεί να εντοπίσει μετονομασίες αρχείων, μιας και είναι stateless. Ο μόνος αξιόπιστος τρόπος να ανιχνεύσεις μια μετονομασία είναι να έχεις κρατήσει από πριν το inode number του source, πράγμα που δεν κάνει το rsync. Για το --checksum δες παραπάνω. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.