tritonas00 Δημοσ. 15 Φεβρουαρίου 2013 Μέλος Δημοσ. 15 Φεβρουαρίου 2013 (επεξεργασμένο) Μετα απο αρκετες δοκιμες σε fedora 18, debian testing φρεσκο-της ωρας-ζεστο και arch, ανεβασα νεα εκδοση στο google code, ανανεωσα το πακετο στο aur και φρασκαρα λιγο το README Οι κυριοτερες αλλαγες απο την προηγουμενη εκδοση ειναι: - Ελεχγοι εισοδου παντου, μεσα εξω στο restore (με τον κυριοτερο--> δεν δεχεται partitions που ειναι ηδη mounted) - Ελεχγος του backup image - Δυναμικο summary - δειχνει μονο οτι εχουμε επιλεξει - Το partition που επιλεγουμε δεν εμφανιζεται ξανα στις επομενες λιστες / διαλογους - Χρωματιστο CLI Input - Η fedora αναγνωριζεται αυτοματα πλεον απο το backup και ενεργοποιει τα extra options στην tar - O bootloader εγινε optional - Μας δειχνει το fstab που εφτιαξε και μας ρωταει αν θελουμε να κανουμε το κανουμε edit και αν ναι να διαλεξουμε editor - nano / vi. Επισης κραταει το παλιο fstab ως fstab-old - Καλυτερο unmounting/cleaning οταν εχουμε subvolumes - Λιγο πιο ευαναγνωστο output - καλυτερη διατυπωση σε καποιους διαλογους. - Oταν βαζουμε password δειχνει αστερισκους πλεον - Μπηκε Info στην αρχη στο restore - Μαζεμα - καθαρισμα - σκουπα οπου μπορουσα - Διαφορα μικρο-fixes --------------------------------------------------------------------------------------------------------------------------------------------------- imitheos thanks man για τον χρονο σου! Για το set -e ειναι λιγο θεμα στο restore script. Το ειχα παλια και με το παραμικρο εκοβε το script και εμενα με τα partitions στο χερι. Για την bsdtar που σκεφτομαι στο arch και debian, τι λες ? Επεξ/σία 15 Φεβρουαρίου 2013 από tritonas00 1
tritonas00 Δημοσ. 16 Φεβρουαρίου 2013 Μέλος Δημοσ. 16 Φεβρουαρίου 2013 war το backup οταν του λεμε να κρατησει μονο τα κρυφα αρχεια στον /home, υπαρχει ενα θεματακι, οταν ο φακελος εχει κενα ειχα τον φακελο με ονομα .disruptive innovations sarl και η tar ειπε: tar: /home/babis/.disruptive: Cannot stat: No such file or directorytar: innovations: Cannot stat: No such file or directorytar: sarl: Cannot stat: No such file or directorytar: Exiting with failure status due to previous errors και δεν τον πηρε αυτον τον φακελο. Αν μπορεις κοιταξε το.
imitheos Δημοσ. 16 Φεβρουαρίου 2013 Δημοσ. 16 Φεβρουαρίου 2013 Λόγω βαρεμάρας να το κάνω σωστά στο github , βάζω ένα tar με patches εδώ. system-tar.tar.gz Δεν έκανα τίποτα ιδιαίτερο. Το 1ο patch ορίζει κάποια variables με τις escape sequences για τα χρώματα και μετά τα χρησιμοποιεί στις διάφορες γραμμές ώστε να είναι λίγο πιο όμορφο το αποτέλεσμα και να καταλαβαίνει κάποιος τι κάνει η γραμμή αν δεν ξέρει από escape sequences. Το 2ο patch αφαιρεί κάποιες space που υπήρχαν στο τέλος των γραμμών και μου βαράνε άσχημα . Όταν κάνουμε clone ένα repo, τότε αντιγράφεται από το τοπικό σύστημα ο κατάλογος με τα μανίσια hooks. Έτσι αν μέσα στο repo πάμε στον κατάλογο .git/hooks, θα δούμε διάφορα αρχεία με κατάληξη .sample. Αν μετονομάσουμε το αρχείο pre-commit.sample σε pre-commit τότε ενεργοποιούμε τον συγκεκριμένο hook ο οποίος ανάμεσα σε άλλες δουλειές μας ενημερώνει αν έχουμε τέτοιες trailing spaces και σταματάει το commit. Έτσι μπορεί όποιος θέλει να τον ενεργοποιήσει για την περίπτωση που του ξεφύγει κάτι τέτοιο. Το 3ο patch αλλάζει την συνάρτηση run_tar. Αυτό που δεν μου άρεσε στην αρχική ήταν ότι είχε ένα κάρο if τα οποία δυσκολεύουν τον αναγνώστη να καταλάβει τι γίνεται. Εκτός ότι ο κώδικας που έτρεχε στην κάθε περίπτωση ήταν σχεδόν ίδιος οπότε το κοινό τμήμα μπορεί να μπει σε ένα variable, οι έλεγχοι δεν εξαρτώνται ο ένας από τον άλλον οπότε δεν χρειάζονταν τόσες περιπτώσεις "if αυτό && και αυτό && και το άλλο" και ο κώδικας μπορεί να σπάσει σε διακριτά τμήματα. Αρχικά βάζω σε ένα variable τις παραμέτρους που ήταν κοινές σε όλες τις περιπτώσεις. Έπειτα ελέγχονται τα BRhome και BRtar (το όνομα BRtar εδώ μου φαίνεται πολύ ατυχές γιατί δεν σου δίνει να καταλάβεις τι νόημα έχει που είναι να ενεργοποιήσει ACLs, κτλ) ξεχωριστά και προστίθεται η ανάλογη παράμετρος. Μετά έρχεται το κομμάτι της εκτέλεσης του tar. Αντί και πάλι να έχουμε duplicated κώδικα και να τρέχει στην μία περίπτωση czvpf και στην άλλη cvpf->find->gzip, το άλλαξα ώστε να τρέχει πάντα cvpf και να παράγει πάντα απλό tar. Έπειτα ελέγχει αν χρειάζεται να προσθέσει κρυφά αρχεία και έπειτα τρέχει gzip. Έτσι, πιστεύω, ακολουθείται μια λογική πορεία χωρίς δυσνόητο κώδικα. Εννοείται πως ΑΝ αποφασίσετε να ενσωματώσετε τις αλλαγές μπορείτε να αλλάξετε οτιδήποτε που δεν είναι όμορφο ή δεν έχει το βέλτιστο όνομα ή δεν ξέρω και εγώ τι. ΥΓ: Δεν έχω κάνει καμμία δοκιμή στον κώδικα. war το backup οταν του λεμε να κρατησει μονο τα κρυφα αρχεια στον /home, υπαρχει ενα θεματακι, οταν ο φακελος εχει κενα ειχα τον φακελο με ονομα .disruptive innovations sarl και η tar ειπε: tar: /home/babis/.disruptive: Cannot stat: No such file or directory tar: innovations: Cannot stat: No such file or directory tar: sarl: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors και δεν τον πηρε αυτον τον φακελο. Αν μπορεις κοιταξε το. Δοκίμασες να αλλάξεις στην find την παράμετρο print σε print0 και αντίστοιχα στην xargs να βάλεις την παράμετρος -0 ? 1
tritonas00 Δημοσ. 16 Φεβρουαρίου 2013 Μέλος Δημοσ. 16 Φεβρουαρίου 2013 ημιθεε εισαι θεος διορθωσα μονο το --exclude/lost+found σε --exclude=/lost+found
imitheos Δημοσ. 16 Φεβρουαρίου 2013 Δημοσ. 16 Φεβρουαρίου 2013 ημιθεε εισαι θεος διορθωσα μονο το --exclude/lost+found σε --exclude=/lost+found Βέβαια έτσι που το έκανα έχει το πρόβλημα ότι χρειάζεται σε όλες τις περιπτώσεις παραπάνω χώρο γιατί τρέχει πρώτα το απλό tar και μετά το κάνει gzip. Μια λύση για να γίνεται κατευθείαν gzip και να μην χρειάζεται το στάδιο του append θα ήταν να χρησιμοποιηθεί η παράμετρος T του tar που του λέει να διαβάσει τη λίστα με τα αρχεία προς ενσωμάτωση από κάποιο αρχείο. Δηλαδή το σκεπτικό μου είναι αντί να τρέχει tar και μετά ξανά tar με append να τρέχει. find κανονικά αρχεία > λίστα if [ brhidden] find κρυφά αρχεία του home >> λίστα fi tar zcvfpT archive.tar.gz λίστα Με αυτό το τρόπο θα μπορεί να τρέξει μόνο μία φορά το tar και να χρησιμοποιηθεί απευθείας το gzip. Επίσης με τη χρήση του find μπορεί να χρησιμοποιηθεί η παράμετρος -xdev ή ακόμη καλύτερα η παράμετρος -fstype για να κρατήσει μόνο τα αρχεία που υπάρχουν στο filesystem που θέλουμε και να μην χρειάζονται όλα αυτά τα exclude για sys,proc,κτλ Edit: Στην συνάρτηση init_variables μπορείς να δώσεις μανίσιες τιμές στα BRhome,BRhidden,BRtar ώστε να είναι πάντα ορισμένες οι μεταβλητές και να μην χρειάζεται το commit με το άσχημο x για το unary error. 1
tritonas00 Δημοσ. 16 Φεβρουαρίου 2013 Μέλος Δημοσ. 16 Φεβρουαρίου 2013 ωραια θα τα κοιταξω αυριο. κατι τελευταιο για να πω το εξης: Αν η $BRdistro δεν υπαρχει στην λιστα distrolist τοτε μπλα μπλα, και το εχω κανει ετσι: for i in ${distrolist[@]}; do if [[ $i == ${BRdistro} ]] ; then BRdistrocheck="true" ; fi; done if [ ! "$BRdistrocheck" = "true" ]; then mpla mpla fi γινεται να γραφτει καλυτερα ?
imitheos Δημοσ. 16 Φεβρουαρίου 2013 Δημοσ. 16 Φεβρουαρίου 2013 Μήπως βολεύει κάτι σαν τα παρακάτω ? if [[ ${distrolist[@]} =~ ${BRdistro} ]]; then BRdistrocheck="true" fi case "${distrolist[@]}" in *"${BRdistro}"*) BRdistrocheck="true";; esac Έχω χρόνια να ασχοληθώ με bash από πριν να υλοποιήσει τις arrays οπότε δεν ξέρω αν θα παίξουν. Έχω την εντύπωση πως το 1ο θα παίξει σωστά ενώ το 2ο θα έχει false positives γιατί θα κάνει match και υποσύνολα (πχ ebian, bian, κτλ). Δοκίμασε τα αν θες κάτι διαφορετικό. Ο κλασικός τρόπος είναι με iteration όπως το έκανες.
warlock9_0 Δημοσ. 17 Φεβρουαρίου 2013 Δημοσ. 17 Φεβρουαρίου 2013 Βέβαια έτσι που το έκανα έχει το πρόβλημα ότι χρειάζεται σε όλες τις περιπτώσεις παραπάνω χώρο γιατί τρέχει πρώτα το απλό tar και μετά το κάνει gzip. Μια λύση για να γίνεται κατευθείαν gzip και να μην χρειάζεται το στάδιο του append θα ήταν να χρησιμοποιηθεί η παράμετρος T του tar που του λέει να διαβάσει τη λίστα με τα αρχεία προς ενσωμάτωση από κάποιο αρχείο. Δηλαδή το σκεπτικό μου είναι αντί να τρέχει tar και μετά ξανά tar με append να τρέχει. find κανονικά αρχεία > λίστα if [ brhidden] find κρυφά αρχεία του home >> λίστα fi tar zcvfpT archive.tar.gz λίστα Με αυτό το τρόπο θα μπορεί να τρέξει μόνο μία φορά το tar και να χρησιμοποιηθεί απευθείας το gzip. Επίσης με τη χρήση του find μπορεί να χρησιμοποιηθεί η παράμετρος -xdev ή ακόμη καλύτερα η παράμετρος -fstype για να κρατήσει μόνο τα αρχεία που υπάρχουν στο filesystem που θέλουμε και να μην χρειάζονται όλα αυτά τα exclude για sys,proc,κτλ Edit: Στην συνάρτηση init_variables μπορείς να δώσεις μανίσιες τιμές στα BRhome,BRhidden,BRtar ώστε να είναι πάντα ορισμένες οι μεταβλητές και να μην χρειάζεται το commit με το άσχημο x για το unary error. αυτό που λες είχα δοκιμάσει να το κάνω στην αρχή Site: http://www.insomnia.gr/topic/467804-system-tar-restore-project/?p=5156719">εδώ αλλά δε μπούταρε μετά το σύστημα αν δουλέψει θα ήταν το ιδανικό
tritonas00 Δημοσ. 17 Φεβρουαρίου 2013 Μέλος Δημοσ. 17 Φεβρουαρίου 2013 Αυτο εδω επαιξε σωστα και στις 3 περιπτωσεις run_tar() { BR_TAROPTS="--sparse --exclude=/run/* --exclude=/dev/* --exclude=/proc/* --exclude=/lost+found --exclude=/sys/* --exclude=/media/* --exclude=/tmp/* --exclude=/mnt/* --exclude=.gvfs" echo "==>Generating directory list..." find / -maxdepth 1 -print | tail -n +2 > "$BRFOLDER"/list sleep 1 if [ ${BRhome} = "n" ] && [ ${BRhidden} = "n" ] ; then BR_TAROPTS="${BR_TAROPTS} --exclude=/home/*" elif [ ${BRhome} = "n" ] && [ ${BRhidden} = "y" ] ; then find / -maxdepth 1 -name 'home' -prune -o -print | tail -n +2 > "$BRFOLDER"/list find /home -maxdepth 2 -iname ".*" >> "$BRFOLDER"/list fi if [ ${BRtar} = "y" ]; then BR_TAROPTS="${BR_TAROPTS} --acls --selinux --xattrs" fi echo "==>Creating archive..." sleep 1 tar zcvfpT "$BRFile".tar.gz "$BRFOLDER"/list ${BR_TAROPTS} --exclude="$BRFOLDER" 2>>"$BRFOLDER"/errors | tee "$BRFOLDER"/log } 1
tritonas00 Δημοσ. 17 Φεβρουαρίου 2013 Μέλος Δημοσ. 17 Φεβρουαρίου 2013 Εντωμεταξυ εκανα ενα τεστακι την bsdtar και οντως αποθηκευει extended attributes. μετα το restore, η getfattr μου εδειξε κανονικα το attribute που εβαλα σε ενα αρχειο με setfattr
tritonas00 Δημοσ. 18 Φεβρουαρίου 2013 Μέλος Δημοσ. 18 Φεβρουαρίου 2013 (επεξεργασμένο) τελικα γινεται πιο απλα και σωστα (με την προηγουμενη δεν μπουταρε η fedora) run_tar() { BR_TAROPTS="--sparse --exclude=/run/* --exclude=/dev/* --exclude=/proc/* --exclude=/lost+found --exclude=/sys/* --exclude=/media/* --exclude=/tmp/* --exclude=/mnt/* --exclude=.gvfs" if [ ${BRhome} = "n" ] && [ ${BRhidden} = "n" ] ; then BR_TAROPTS="${BR_TAROPTS} --exclude=/home/*" elif [ ${BRhome} = "n" ] && [ ${BRhidden} = "y" ] ; then find /home/*/ -maxdepth 1 -iname ".*" -prune -o -print > /tmp/list BR_TAROPTS="${BR_TAROPTS} --exclude-from=/tmp/list" fi if [ ${BRtar} = "y" ]; then BR_TAROPTS="${BR_TAROPTS} --acls --selinux --xattrs" fi echo "==>Creating archive..." sleep 1 tar cvpzf "$BRFile".tar.gz ${BR_TAROPTS} --exclude="$BRFOLDER" / 2>>"$BRFOLDER"/errors | tee "$BRFOLDER"/log } Επεξ/σία 18 Φεβρουαρίου 2013 από tritonas00
tritonas00 Δημοσ. 18 Φεβρουαρίου 2013 Μέλος Δημοσ. 18 Φεβρουαρίου 2013 Οκ το τεσταρα και στις 3 περιπτωσεις και στις 3 διανομες. Ανεβασα νεα εκδοση σε google code και ενημερωσα readme και aur. Οποτε στην 2.3: - Thanks to imitheos εχουμε πιο στρωτο backup τωρα! - Με την νεα συνταξη, οταν επιλεξουμε να παρει μονο τα κρυφα αρχεια και φακελους του /home, πλεον παιρνει σωστα αυτα που περιεχουν ονοματα με κενο. - Αλλαξα το μεγεθος και την συνταξη ορισμενων διαλογων ωστε να ειναι πιο ευαναγνωστοι. so far so good Ανεβασα 3 νεα demos, ενα για καθε διανομη, επειδη εγιναν πολλες αλλαγες απο τοτε και ηταν outdated. http://www.youtube.com/watch?v=GpNSEyaynLk http://www.youtube.com/watch?v=QHkCsEW-qY8 http://www.youtube.com/watch?v=kvExZYeaCZI 3
tritonas00 Δημοσ. 20 Φεβρουαρίου 2013 Μέλος Δημοσ. 20 Φεβρουαρίου 2013 Μιας και καποια στιγμη θα παρω νεο δισκο και θα χρειαστει να μεταφερω ολη την εγκατασταση σε αυτον, σκεφτηκα οτι γιατι να παρω ολοκληρο backup αφου μπορω απευθειας να κανω μεταφορα με rsync? Οποτε το υλοποιησα στο restore script, ισως φανει χρησιμο και σε καποιον αλλον. Αφου ορισουμε τα partitions κλπ, ρωταει να επιλεξουμε mode: Restore Mode --> το κλασσικο που επαναφερει απο το backup image Transfer Mode --> που μεταφερει το υπαρχον / με rsync. Επισης υπαρχει επιλογη να μεταφερθουν μονο τα κρυφα του /home. το argument ειναι -t ή --transfer , και εχουν μπει και οι σχετικοι ελεγχοι ωστε να μην παιρνει file ή url με transfer mode ταυτοχρονα. Υπαρχει και ελεγχος για το αν το πακετο rsync ειναι εγκατεστημενο οταν ενεργοποιηθει το Transfer Mode. Στο git αυτα. Ολες οι δοκιμες και στις 3 διανομες εγιναν επιτυχως. Oποτε πλεον εχουμε direct transfer του συστηματος μας σε δισκο / usb / what ever. Ζωαρα. Για πλακα το δοκιμασα και απο το livecd της fedora και...το εκανε κανονικα μεταφορα στο δισκο με τον bootloader του και ολα του Να υπενθυμισω οτι η rsync υποστηριζει κανονικα acl's, extended attributes κλπ 1
mask2011 Δημοσ. 20 Φεβρουαρίου 2013 Δημοσ. 20 Φεβρουαρίου 2013 Δηλαδή αν κατάλαβα καλά. Π.χ. Είχα την εγκατάσταση σε ένα δίσκο IDE. Πήρα ένα καινούριο SATA. Συνδέω τον Sata επάνω στο pc και διαλέγω να μου κάνει transfer την εγκατάσταση. Άρα ουσιαστικά γλυτώνω από το να κάνω πρώτα το backup και μετά το restore με live cd/usb.
tritonas00 Δημοσ. 20 Φεβρουαρίου 2013 Μέλος Δημοσ. 20 Φεβρουαρίου 2013 Ακριβως. Αφου μιλαμε για το ιδιο μηχανημα απο δισκο σε δισκο / usb, δεν υπαρχει λογος για backup. Transfer απο το ιδιο το συστημα. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα