Προς το περιεχόμενο

System tar & restore Project


Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Μετα απο αρκετες δοκιμες σε 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 δειχνει αστερισκους πλεον :P

 

- Μπηκε Info στην αρχη στο restore

 

- Μαζεμα - καθαρισμα - σκουπα οπου μπορουσα

 

- Διαφορα μικρο-fixes

 

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

 

imitheos thanks man για τον χρονο σου!

 

Για το set -e ειναι λιγο θεμα στο restore script. Το ειχα παλια και με το παραμικρο εκοβε το script και εμενα με τα partitions στο χερι.

 

Για την bsdtar που σκεφτομαι στο arch και debian, τι λες ?

Επεξ/σία από tritonas00
  • Like 1
  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

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

 

και δεν τον πηρε αυτον τον φακελο.

 

Αν μπορεις κοιταξε το.

Δημοσ.

Λόγω βαρεμάρας να το κάνω σωστά στο github :P, βάζω ένα tar με patches εδώ.

system-tar.tar.gz

 

Δεν έκανα τίποτα ιδιαίτερο.

 

Το 1ο patch ορίζει κάποια variables με τις escape sequences για τα χρώματα και μετά τα χρησιμοποιεί στις διάφορες γραμμές ώστε να είναι λίγο πιο όμορφο το αποτέλεσμα και να καταλαβαίνει κάποιος τι κάνει η γραμμή αν δεν ξέρει από escape sequences.

 

Το 2ο patch αφαιρεί κάποιες space που υπήρχαν στο τέλος των γραμμών και μου βαράνε άσχημα :P. Όταν κάνουμε 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 ?
  • Like 1
Δημοσ.

ημιθεε εισαι θεος :D

 

διορθωσα μονο το --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.

  • Like 1
Δημοσ.

ωραια θα τα κοιταξω αυριο.

 

κατι τελευταιο

 

για να πω το εξης: Αν η $BRdistro δεν υπαρχει στην λιστα distrolist τοτε μπλα μπλα, και το εχω κανει ετσι:

 

 

for i in ${distrolist[@]}; do if [[ $i == ${BRdistro} ]] ; then BRdistrocheck="true" ; fi; done

if [ ! "$BRdistrocheck" = "true" ]; then
  mpla mpla
fi
 

 

γινεται να γραφτει καλυτερα ?

Δημοσ.

Μήπως βολεύει κάτι σαν τα παρακάτω ?


if [[ ${distrolist[@]} =~ ${BRdistro} ]]; then
BRdistrocheck="true"
fi

case "${distrolist[@]}" in *"${BRdistro}"*)
BRdistrocheck="true";;
esac
Έχω χρόνια να ασχοληθώ με bash από πριν να υλοποιήσει τις arrays οπότε δεν ξέρω αν θα παίξουν. Έχω την εντύπωση πως το 1ο θα παίξει σωστά ενώ το 2ο θα έχει false positives γιατί θα κάνει match και υποσύνολα (πχ ebian, bian, κτλ). Δοκίμασε τα αν θες κάτι διαφορετικό. Ο κλασικός τρόπος είναι με iteration όπως το έκανες.
Δημοσ.

 

Βέβαια έτσι που το έκανα έχει το πρόβλημα ότι χρειάζεται σε όλες τις περιπτώσεις παραπάνω χώρο γιατί τρέχει πρώτα το απλό 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.

 

 

αυτό που λες είχα δοκιμάσει να το κάνω στην αρχή Link.png Site: http://www.insomnia.gr/topic/467804-system-tar-restore-project/?p=5156719">εδώ αλλά δε μπούταρε μετά το σύστημα

αν δουλέψει θα ήταν το ιδανικό

Δημοσ.

Αυτο εδω επαιξε σωστα και στις 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
}
  • Like 1
Δημοσ.

Εντωμεταξυ εκανα ενα τεστακι την bsdtar και οντως αποθηκευει extended attributes.

 

μετα το restore, η getfattr μου εδειξε κανονικα το attribute που εβαλα σε ενα αρχειο με setfattr

Δημοσ. (επεξεργασμένο)

τελικα γινεται πιο απλα και σωστα (με την προηγουμενη δεν μπουταρε η 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
}
Επεξ/σία από tritonas00
Δημοσ.

Οκ το τεσταρα και στις 3 περιπτωσεις και στις 3 διανομες. Ανεβασα νεα εκδοση σε google code και ενημερωσα readme και aur.

 

Οποτε στην 2.3:

 

- Thanks to imitheos εχουμε πιο στρωτο backup τωρα!

 

- Με την νεα συνταξη, οταν επιλεξουμε να παρει μονο τα κρυφα αρχεια και φακελους του /home, πλεον παιρνει σωστα αυτα που περιεχουν ονοματα με κενο.

 

- Αλλαξα το μεγεθος και την συνταξη ορισμενων διαλογων ωστε να ειναι πιο ευαναγνωστοι.

 

so far so good :P

 

Ανεβασα 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

  • Like 3
Δημοσ.

Μιας και καποια στιγμη θα παρω νεο δισκο και θα χρειαστει να μεταφερω ολη την εγκατασταση σε αυτον, σκεφτηκα οτι γιατι να παρω ολοκληρο 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. Ζωαρα. :P

 

Για πλακα το δοκιμασα και απο το livecd της fedora και...το εκανε κανονικα μεταφορα στο δισκο με τον bootloader του και ολα του :P

 

Να υπενθυμισω οτι η rsync υποστηριζει κανονικα acl's, extended attributes κλπ

  • Like 1
Δημοσ.

Δηλαδή αν κατάλαβα καλά.

 

Π.χ. Είχα την εγκατάσταση σε ένα δίσκο IDE. Πήρα ένα καινούριο SATA. Συνδέω τον Sata επάνω στο pc και διαλέγω να μου κάνει transfer την εγκατάσταση. Άρα ουσιαστικά γλυτώνω από το να κάνω πρώτα το backup και μετά το restore με live cd/usb.

Δημοσ.

Ακριβως. Αφου μιλαμε για το ιδιο μηχανημα απο δισκο σε δισκο / usb, δεν υπαρχει λογος για backup.

 

Transfer απο το ιδιο το συστημα.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...