Υλοποίηση του UFS Journaling σε ένα Desktop Υπολογιστή

Μανώλης Κιαγιάς

Νομική Σημείωση

Το FreeBSD είναι ένα κατοχυρωμένο εμπορικό σύμβολο του FreeBSD Foundation.

Πολλές από τις λέξεις ή φράσεις οι οποίες χρησιμοποιούνται από τους κατασκευαστές ή τους πωλητές τους για να διακρίνουν τα προϊόντα τους θεωρούνται εμπορικά σύμβολα. Όπου αυτές εμφανίζονται σε αυτό το κείμενο και για όσες από αυτές γνωρίζει η Ομάδα Ανάπτυξης του FreeBSD ότι είναι πιθανόν να είναι εμπορικά σύμβολα, θα δείτε ένα από τα σύμβολα: “™” ή “®”.

Περίληψη

Ένα σύστημα αρχείων που διαθέτει δυνατότητα journaling, χρησιμοποιεί ένα αρχείο καταγραφής (journal ή ημερολόγιο) στο οποίο γίνονται αρχικά οι εγγραφές πριν καταχωρηθούν στο κανονικό σύστημα αρχείων. Με τον τρόπο αυτό μπορεί να εξασφαλιστεί η ακεραιότητα του συστήματος αρχείων στην περίπτωση κατάρρευσης ή απότομης διακοπής της τροφοδοσίας του. Η χρήση του journaling διασφαλίζει την συνολική ακεραιότητα του συστήματος αρχείων, αλλά δεν μπορεί να διασφαλίσει ότι δεν θα έχουμε απώλεια δεδομένων σε μεμονωμένα αρχεία τα οποία ήταν ενδεχομένως σε χρήση την ώρα της κατάρρευσης. Ένα πλεονέκτημα του journaling είναι η ελαχιστοποίηση του χρόνου που απαιτείται για τον έλεγχο του συστήματος αρχείων σε περίπτωση κακού τερματισμού. Το σύστημα αρχείων UFS που χρησιμοποιείται από το FreeBSD δεν διαθέτει δικό του ενσωματωμένο journaling. Ωστόσο, το πλαίσιο λειτουργιών GEOM στο FreeBSD 7.X παρέχει ένα νέο journal class το οποίο δίνει αυτή τη δυνατότητα, και μάλιστα ανεξάρτητα από το σύστημα αρχείων που χρησιμοποιείται. Στο άρθρο αυτό εξετάζουμε πως μπορούμε να χρησιμοποιήσουμε το journaling σε ένα τυπικό desktop μηχάνημα για εργασία γραφείου.


1. Εισαγωγή

Αν και οι περισσότεροι εξυπηρετητές που χρησιμοποιούνται σε περιβάλλοντα παραγωγής είναι καλά προστατευμένοι από μη-αναμενόμενους τερματισμούς, δεν συμβαίνει το ίδιο και με το συνηθισμένο desktop μηχάνημα το οποίο βρίσκεται στα χέρια του τελικού χρήστη. Αυτό συνήθως δεν προστατεύεται από διακοπές ρεύματος, ενώ δεν είναι και οι λίγες οι περιπτώσεις που ο κακός τερματισμός οφείλεται σε λανθασμένο χειρισμό του χρήστη (κατά λάθος πίεση του reset κ.α.). Στις περισσότερες από αυτές τις περιπτώσεις, τα Soft Updates που χρησιμοποιεί το σύστημα αρχείων UFS μπορούν να το προστατεύσουν αρκετά καλά, αν και μετά τον προβληματικό τερματισμό απαιτείται συνήθως έλεγχος του συστήματος αρχείων, ο οποίος ακόμα και όταν γίνεται στο παρασκήνιο, διαρκεί αρκετό χρόνο. Σε σπάνιες περιπτώσεις, το σύστημα αρχείων μπορεί να υποστεί ζημιά η οποία να χρειάζεται χειροκίνητη επέμβαση για να διορθωθεί, ενώ είναι πιθανή και η απώλεια δεδομένων.

Η νέα δυνατότητα για journaling που παρέχεται από το GEOM μπορεί να βοηθήσει ιδιαίτερα στις παραπάνω περιπτώσεις, ελαχιστοποιώντας το χρόνο που απαιτείται για τον έλεγχο του συστήματος αρχείων και εξασφαλίζοντας ότι το σύστημα θα επανέλθει πολύ σύντομα σε σταθερή κατάσταση.

Το άρθρο αυτό περιγράφει μια διαδικασία για την υλοποίηση του UFS journaling σε ένα τυπικό desktop PC (στο οποίο χρησιμοποιείται ένας σκληρός δίσκος τόσο για το σύστημα όσο και για τα δεδομένα). Θα πρέπει να ακολουθήσετε αυτές τις οδηγίες κατά τη διάρκεια μιας νέας εγκατάστασης του FreeBSD. Τα βήματα είναι αρκετά απλά και δεν απαιτούν ιδιαίτερα πολύπλοκες εντολές.

Αφού διαβάσετε αυτό το άρθρο, θα ξέρετε:

  • Πως να δεσμεύσετε κάποιο χώρο στο δίσκο για το journaling κατά τη διάρκεια μιας νέας εγκατάστασης του FreeBSD.

  • Πως να φορτώσετε και να ενεργοποιήσετε το άρθρωμα (module) geom_journal (ή πως να ενσωματώσετε τη λειτουργία του στον προσαρμοσμένο πυρήνα σας).

  • Πως να μετατρέψετε τα υπάρχοντα συστήματα αρχείων σας ώστε να χρησιμοποιούν journaling, και τι παραμέτρους θα πρέπει να δώσετε στο /etc/fstab ώστε να τα προσαρτήσετε.

  • Πως να ενεργοποιήσετε το journaling σε νέες (άδειες) κατατμήσεις.

  • Πως να αντιμετωπίσετε προβλήματα που σχετίζονται με το journaling.

Πριν διαβάσετε αυτό το άρθρο, θα πρέπει:

  • Να κατανοείτε βασικές έννοιες του UNIX® και του FreeBSD.

  • Να είστε εξοικειωμένος με τη διαδικασία εγκατάστασης του FreeBSD και το βοηθητικό πρόγραμμα Sysinstall.

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

2. Κατανόηση του Journaling στο FreeBSD

Το journaling που παρέχεται από το GEOM στο FreeBSD 7.X δεν είναι προσανατολισμένο σε κάποιο συγκεκριμένο σύστημα αρχείων (όπως για παράδειγμα συμβαίνει με το σύστημα αρχείων ext3 στο Linux®) αλλά λειτουργεί σε επίπεδο block. Αν και αυτό σημαίνει ότι μπορεί να χρησιμοποιηθεί σε διαφορετικά συστήματα αρχείων, για το FreeBSD 7.0-RELEASE, είναι δυνατή η χρήση του μόνο στο UFS2.

Οι λειτουργίες journaling παρέχονται φορτώνοντας το άρθρωμα geom_journal.ko στον πυρήνα (ή ενσωματώνοντας τη λειτουργία του σε ένα προσαρμοσμένο πυρήνα) και χρησιμοποιώντας την εντολή gjournal για τη ρύθμιση των συστημάτων αρχείων. Η χρήση του journaling είναι γενικά θεμιτή σε μεγάλα συστήματα αρχείων, όπως είναι το /usr. Θα χρειαστεί ωστόσο να έχετε δεσμεύσει από πριν κάποιο ελεύθερο χώρο στο δίσκο.

Όταν γίνεται χρήση του journaling σε ένα σύστημα αρχείων, απαιτείται κάποιος ελεύθερος χώρος για να αποθηκεύονται τα δεδομένα του ημερολογίου καταγραφής (journal). Ο χώρος του δίσκου που αποθηκεύονται τα πραγματικά δεδομένα αναφέρεται ως παροχέας δεδομένων (data provider), ενώ ο χώρος στον οποίο αποθηκεύεται το ημερολόγιο ονομάζεται παροχέας ημερολογίου (journal provider). Σε περίπτωση που το journaling γίνεται σε σύστημα αρχείων το οποίο έχει ήδη δεδομένα, οι δύο παροχείς πρέπει να βρίσκονται σε διαφορετικές κατατμήσεις. Σε περίπτωση χρήσης journaling σε νέα κατάτμηση, έχετε την επιλογή να χρησιμοποιήσετε τον ίδιο παροχέα και για τα δεδομένα και για το ημερολόγιο. Σε κάθε περίπτωση, με τη χρήση της εντολής gjournal, οι δύο παροχείς συνδυάζονται για να δημιουργήσουν το τελικό σύστημα αρχείων που υποστηρίζει journaling. Για παράδειγμα:

  • Θέλετε να χρησιμοποιήσετε journaling στο σύστημα αρχείων /usr, το οποίο βρίσκεται στο /dev/ad0s1f (το σύστημα αρχείων περιέχει ήδη δεδομένα).

  • Έχετε κρατήσει κάποιο κενό χώρο στο δίσκο, σε μια κατάτμηση στο /dev/ad0s1g.

  • Με την χρήση της εντολής gjournal, θα δημιουργηθεί μια νέα συσκευή, η /dev/ad0s1f.journal, όπου το /dev/ad0s1f θα είναι ο παροχέας δεδομένων και το /dev/ad0s1g θα είναι ο παροχέας ημερολογίου. Η νέα αυτή συσκευή θα χρησιμοποιείται πλέον για όλες τις εργασίες που θα εκτελούνται στο σύστημα αρχείων.

Ο χώρος στο δίσκο που απαιτείται για το ημερολόγιο εξαρτάται από τη χρήση του συστήματος αρχείων, και όχι από το μέγεθος του παροχέα δεδομένων. Για παράδειγμα, σε ένα τυπικό μηχάνημα γραφείου, θα είναι αρκετό να χρησιμοποιήσετε 1 GB για τον παροχέα ημερολογίου του συστήματος αρχείων /usr, ενώ σε ένα μηχάνημα το οποίο χρησιμοποιείται σε εργασίες όπου οι εγγραφές στο δίσκο είναι πολύ συχνές και μεγάλες σε μέγεθος (π.χ. επεξεργασία video) θα χρειαστείτε περισσότερο χώρο. Σε περίπτωση που ο χώρος που έχει δεσμευθεί για το ημερολόγιο εξαντληθεί πριν γίνει δυνατή η εγγραφή δεδομένων στο κανονικό σύστημα αρχείων, το σύστημα θα καταρρεύσει με kernel panic.

Τα μεγέθη που προτείνονται εδώ για τον παροχέα ημερολογίου, είναι απίθανο να προκαλέσουν πρόβλημα σε τυπική χρήση γραφείου (περιήγηση στο διαδίκτυο, επεξεργασία κειμένου, αναπαραγωγή πολυμέσων). Αν ωστόσο το είδος της εργασίας σας περιλαμβάνει έντονη χρήση του σκληρού δίσκου, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κανόνα για τη μεγαλύτερη δυνατή αξιοπιστία: όλη η μνήμη RAM του συστήματος σας πρέπει να χωράει στο 30% του χώρου του ημερολογίου. Για παράδειγμα, αν το σύστημα σας έχει 1 GB RAM, θα πρέπει να δημιουργήσετε ημερολόγιο μεγέθους περίπου 3.3 GB. (Πολλαπλασιάστε το μέγεθος της RAM με το 3.3 για να βρείτε το μέγεθος του ημερολογίου.)

Για περισσότερες πληροφορίες σχετικά με το journaling, παρακαλούμε διαβάστε τη σελίδα manual του gjournal(8).

3. Βήματα Κατά την Εγκατάσταση του FreeBSD

3.1. Δέσμευση Χώρου στο Δίσκο για το Journaling

Ένα τυπικό desktop μηχάνημα, έχει συνήθως ένα σκληρό δίσκο στον οποίο αποθηκεύονται τόσο το λειτουργικό όσο και τα δεδομένα του χρήστη. Συνήθως, οι προεπιλεγμένες κατατμήσεις που δημιουργούνται από το Sysinstall είναι περίπου σωστές: Ένα desktop μηχάνημα δεν χρειάζεται μεγάλη κατάτμηση /var, ενώ το μεγαλύτερο μέρος του ελεύθερου χώρου αποδίδεται στο /usr, αφού στους υποκαταλόγους του αποθηκεύονται τα δεδομένα του χρήστη και γίνονται και οι εγκαταστάσεις του λογισμικού.

Χρησιμοποιώντας τις προεπιλεγμένες κατατμήσεις (αυτές που δημιουργεί ο επεξεργαστής Disklabel όταν πιέσετε το A), δεν μένει καθόλου ελεύθερος χώρος. Ωστόσο κάθε κατάτμηση στην οποία θέλετε να χρησιμοποιήσετε journaling, χρειάζεται ακόμα μία για την αποθήκευση του ημερολογίου. Καθώς η κατάτμηση /usr είναι η μεγαλύτερη, το πλέον λογικό είναι να την μικρύνουμε ελαφρά ώστε να εξασφαλίσουμε το χώρο που απαιτείται για το journaling.

Στο παράδειγμα μας, χρησιμοποιείται ένας δίσκος μεγέθους 80 GB. Στην ακόλουθη εικόνα φαίνονται οι προεπιλεγμένες κατατμήσεις όπως δημιουργούνται από τον επεξεργαστή Disklabel κατά την εγκατάσταση:

disklabel1

Αν τα παραπάνω μεγέθη είναι περίπου τα επιθυμητά για την εγκατάσταση σας, είναι αρκετά εύκολο να ρυθμιστούν ώστε να γίνει δυνατή η χρήση του journaling. Απλώς χρησιμοποιήστε τα πλήκτρα με τα βελάκια για να μετακινήσετε την μπάρα επιλογής στην κατάτμηση /usr και πιέστε το D για να την διαγράψετε.

Τώρα, μετακινήστε την μπάρα επιλογής στο όνομα του σκληρού δίσκου στο άνω μέρος της οθόνης, και πιέστε C για να δημιουργήσετε μια νέα κατάτμηση για το /usr. Η νέα αυτή κατάτμηση θα πρέπει να είναι μικρότερη κατά 1 GB (αν έχετε σκοπό να χρησιμοποιήσετε journaling μόνο στο /usr), ή κατά 2 GB (αν έχετε σκοπό να χρησιμοποιήσετε journaling τόσο στο /usr όσο και στο /var). Στο διάλογο που θα εμφανιστεί, επιλέξτε να δημιουργήσετε σύστημα αρχείων (file system) και γράψτε /usr ως το σημείο προσάρτησης (mount point).

Είναι αναγκαία η χρήση journaling στην κατάτμηση /var partition; Φυσιολογικά, το journaling έχει νόημα μόνο σε αρκετά μεγάλες κατατμήσεις. Δεν πρόκειται ωστόσο να δημιουργηθεί κάποιο πρόβλημα αν χρησιμοποιήσετε journaling στο /var. Αν η χρήση του συγκεκριμένου συστήματος αρχείων είναι μικρή (το οποίο είναι και το πιθανότερο σε ένα dekstop μηχάνημα) ίσως είναι καλή ιδέα να χρησιμοποιήσετε λιγότερο χώρο στο δίσκο για το ημερολόγιο του.

Στο παράδειγμα μας, θα ενεργοποιήσουμε το journaling τόσο στο /usr όσο και στο /var. Μπορείτε φυσικά να προσαρμόσετε αυτή τη διαδικασία σύμφωνα με τις ανάγκες σας.

Για να απλοποιήσουμε, όσο είναι δυνατόν, τη διαδικασία, θα χρησιμοποιήσουμε το Sysinstall για να δημιουργήσουμε τις κατατμήσεις που απαιτούνται για το journaling. Ωστόσο, κατά τη διάρκεια της εγκατάστασης, το Sysinstall επιμένει να ρωτάει για σημεία προσάρτησης σε κάθε κατάτμηση που δημιουργείται. Στο σημείο αυτό, δεν υπάρχουν σημεία προσάρτησης για τις κατατμήσεις μας, και στην πραγματικότητα δεν τα χρειαζόμαστε καν. Οι κατατμήσεις που χρησιμοποιούνται για τα ημερολόγια, δεν προσαρτώνται κάπου.

Για να αποφύγουμε αυτά τα προβλήματα με το Sysinstall, θα δημιουργήσουμε αυτές τις κατατμήσεις ως χώρο swap. Στο swap δεν γίνεται ποτέ προσάρτηση, ενώ και το Sysinstall δεν έχει κανένα πρόβλημα να δημιουργήσει όσες τέτοιες κατατμήσεις χρειαζόμαστε. Μετά την πρώτη εκκίνηση, θα πρέπει ωστόσο να επεξεργαστούμε το αρχείο /etc/fstab και να αφαιρέσουμε τις έξτρα καταχωρήσεις swap που δημιουργήθηκαν κατά την εγκατάσταση.

Για να δημιουργήσετε τους χώρους swap, χρησιμοποιήστε πάλι τα πλήκτρα με τα βελάκια για να μετακινήσετε την μπάρα επιλογής στο άνω μέρος της οθόνης του επεξεργαστή Disklabel, έτσι ώστε να είναι επιλεγμένο το όνομα του σκληρού δίσκου. Κατόπιν, πιέστε N, δώστε το επιθυμητό μέγεθος (1024M), και επιλέξτε "swap space" από το μενού που εμφανίζεται. Επαναλάβετε για κάθε ημερολόγιο που επιθυμείτε να δημιουργήσετε. Στο παράδειγμα μας, δημιουργούμε δύο κατατμήσεις στις οποίες θα αποθηκεύονται τα ημερολόγια των /usr και /var. Το τελικό αποτέλεσμα φαίνεται στην παρακάτω εικόνα:

disklabel2

Μόλις ολοκληρώσετε τη δημιουργία των κατατμήσεων, σας συνιστούμε να σημειώσετε τα ονόματα τους και τα σημεία προσάρτησης για να τα έχετε πρόχειρα κατά τη φάση των ρυθμίσεων. Με τον τρόπο αυτό θα αποφύγετε τυχόν λάθη που μπορεί να καταστρέψουν την εγκατάσταση σας. Ο παρακάτω πίνακας δείχνει τις σημειώσεις μας για το παράδειγμα μας:

Πίνακας 1. Κατατμήσεις και Ημερολόγια
ΚατάτμησηΣημείο ΠροσάρτησηςΗμερολόγιο

ad0s1d

/var

ad0s1h

ad0s1f

/usr

ad0s1g

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

3.2. Πρώτη Εκκίνηση

Το σύστημα σας θα ξεκινήσει φυσιολογικά, αλλά θα χρειαστεί να επεξεργαστείτε το /etc/fstab και να διαγράψετε τις καταχωρήσεις για τις κατατμήσεις swap που θα χρησιμοποιηθούν στα ημερολόγια. Φυσιολογικά, η κατάτμηση που χρησιμοποιείται ως κανονικό swap τελειώνει με το γράμμα "b" (π.χ. ad0s1b στο παράδειγμα μας). Διαγράψτε όλες τις άλλες καταχωρήσεις για το swap και επανεκκινήστε το σύστημα σας, ώστε να σταματήσει το FreeBSD να τις χρησιμοποιεί.

Μόλις το σύστημα εκκινήσει ξανά, θα είμαστε έτοιμοι να ρυθμίσουμε το journaling.

4. Ρύθμιση του Journaling

4.1. Εκτέλεση της Εντολής gjournal

Έχοντας προετοιμάσει όλες τις απαραίτητες κατατμήσεις, είναι σχετικά απλό να ρυθμίσουμε το journaling. Θα πρέπει να μεταβούμε σε κατάσταση ενός χρήστη, για το λόγο αυτό εισέλθετε στο σύστημα ως root και γράψτε:

# shutdown now

Πιέστε Enter για να βγείτε στο προεπιλεγμένο κέλυφος. Θα πρέπει να αποπροσαρτήσουμε τις κατατμήσεις στις οποίες θα γίνει το journaling, στο παράδειγμα μας τις /usr και /var:

# umount /usr /var

Φορτώστε το άρθρωμα του πυρήνα που απαιτείται για το journaling:

# gjournal load

Χρησιμοποιήστε τώρα τις σημειώσεις σας για να καθορίσετε ποια κατάτμηση χρησιμοποιείται για κάθε ημερολόγιο. Στο παράδειγμα μας, το /usr βρίσκεται στο ad0s1f και το ημερολόγιο του θα είναι στο ad0s1g, ενώ το /var είναι στο ad0s1d και το ημερολόγιο του θα είναι στο ad0s1h. Θα χρειαστείτε τις παρακάτω εντολές:

# gjournal label ad0s1f ad0s1g
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
# gjournal label ad0s1d ad0s1h
GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.

Αν ο τελευταίος τομέας κάποιας από τις κατατμήσεις είναι σε χρήση, η εντολή gjournal θα σας επιστρέψει ένα μήνυμα λάθους. Θα πρέπει να εκτελέσετε την εντολή χρησιμοποιώντας την παράμετρο -F με την οποία θα υποχρεώσετε την επανεγγραφή του τομέα, π.χ.:

# gjournal label -f ad0s1d ad0s1h

Μια που πρόκειται για νέα εγκατάσταση, είναι μάλλον απίθανο να προκαλέσετε κάποιο πρόβλημα.

Στο σημείο αυτό δημιουργούνται δύο νέες συσκευές, οι ad0s1d.journal και ad0s1f.journal. Αυτές αντιπροσωπεύουν τις κατατμήσεις /var και /usr που θα πρέπει να προσαρτήσουμε. Πριν τις προσαρτήσουμε ωστόσο, θα πρέπει να θέσουμε την επιλογή journal και να αναιρέσουμε την επιλογή Soft Updates:

# tunefs -J enable -n disable ad0s1d.journal
tunefs: gjournal set
tunefs: soft updates cleared

# tunefs -J enable -n disable ad0s1f.journal
tunefs: gjournal set
tunefs: soft updates cleared

Προσαρτήστε τώρα χειροκίνητα τις νέες συσκευές στα αντίστοιχα σημεία προσάρτησης (σημειώστε ότι μπορούμε πλέον να χρησιμοποιήσουμε την επιλογή async κατά την προσάρτηση):

# mount -o async /dev/ad0s1d.journal /var
# mount -o async /dev/ad0s1f.journal /usr

Επεξεργαστείτε το αρχείο /etc/fstab και ανανεώστε τις καταχωρήσεις για τις κατατμήσεις /usr και /var:

/dev/ad0s1f.journal     /usr            ufs     rw,async      2       2
/dev/ad0s1d.journal     /var            ufs     rw,async      2       2

Βεβαιωθείτε ότι οι παραπάνω καταχωρήσεις είναι σωστές, διαφορετικά θα έχετε πρόβλημα να εκκινήσετε κανονικά στην επόμενη επανεκκίνηση του συστήματος σας.

Τέλος, επεξεργαστείτε το αρχείο /boot/loader.conf και προσθέστε την ακόλουθη γραμμή ώστε να φορτώνεται το άρθρωμα gjournal(8) σε κάθε εκκίνηση:

geom_journal_load="YES"

Συγχαρητήρια! Το σύστημα σας είναι τώρα έτοιμο για journaling. Μπορείτε να γράψετε exit για να επιστρέψετε στην κανονική λειτουργία (πολλαπλών χρηστών) ή να επανεκκινήσετε το σύστημα σας (συνίσταται) για να ελέγξετε τις ρυθμίσεις σας. Κατά την εκκίνηση, θα δείτε μηνύματα όπως το παρακάτω:

ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
GEOM_JOURNAL: Journal ad0s1d clean.
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
GEOM_JOURNAL: Journal ad0s1f clean.

Μετά από ένα προβληματικό τερματισμό θα δείτε μηνύματα όπως το παρακάτω:

GEOM_JOURNAL: Journal ad0s1d consistent.

Αυτό συνήθως σημαίνει ότι το gjournal(8) χρησιμοποίησε τις πληροφορίες του ημερολογίου για να επιστρέψει το σύστημα αρχείων σε σταθερή κατάσταση.

4.2. Χρήση του Journaling σε Νέες Κατατμήσεις

Αν και η παραπάνω διαδικασία είναι απαραίτητη για να χρησιμοποιήσετε journaling σε κατατμήσεις που έχουν ήδη δεδομένα, η αντίστοιχη διαδικασία για νέες κατατμήσεις είναι πιο απλή. Στην περίπτωση αυτή, μπορεί να χρησιμοποιηθεί ο ίδιος παροχέας τόσο για τα δεδομένα όσο και για το ημερολόγιο. Για παράδειγμα, υποθέστε ότι έχετε προσθέσει ένα νέο δίσκο και έχετε δημιουργήσει την κατάτμηση /dev/ad1s1d. Η δημιουργία του ημερολογίου είναι αρκετά απλή και φαίνεται παρακάτω:

# gjournal label ad1s1d

Το προεπιλεγμένο μέγεθος του ημερολογίου είναι 1 GB. Μπορείτε ωστόσο να το ρυθμίσετε χρησιμοποιώντας την επιλογή -s. Μπορείτε να δώσετε τιμές σε bytes, ή να βάλετε μετά την τιμή ένα από τα γράμματα K, M ή G για να δηλώσετε Kilobytes, Megabytes ή Gigabytes αντίστοιχα. Σημειώστε ότι η εντολή gjournal, δεν θα σας επιτρέψει να δημιουργήσετε ημερολόγιο που να είναι ακατάλληλο λόγω μικρού μεγέθους.

Για παράδειγμα, για να δημιουργήσετε ένα ημερολόγιο μεγέθους 2 GB, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:

# gjournal label -s 2G ad1s1d

Μπορείτε έπειτα να δημιουργήσετε ένα σύστημα αρχείων στη νέα σας κατάτμηση, και ταυτόχρονα να ενεργοποιήσετε το journaling, χρησιμοποιώντας την επιλογή -J:

# newfs -J /dev/ad1s1d.journal

4.3. Ενσωμάτωση του Journaling σε Προσαρμοσμένο Πυρήνα

Αν δεν θέλετε να φορτώσετε το geom_journal ως άρθρωμα, μπορείτε να ενσωματώσετε τις λειτουργίες του στον προσαρμοσμένο πυρήνα σας. Επεξεργαστείτε το αρχείο ρυθμίσεων του πυρήνα, και βεβαιωθείτε ότι περιλαμβάνει τις ακόλουθες δύο γραμμές:

options UFS_GJOURNAL # Σημείωση: η επιλογή αυτή υπάρχει στο GENERIC

options GEOM_JOURNAL # Θα πρέπει να προσθέσετε αυτή τη γραμμή

Μεταγλωττίστε και επανεγκαταστήστε τον πυρήνα σας χρησιμοποιώντας τις σχετικές οδηγίες στο Εγχειρίδιο του FreeBSD.

Μην ξεχάσετε να αφαιρέσετε την αντίστοιχη καταχώρηση "load" από το αρχείο /boot/loader.conf αν την είχατε χρησιμοποιήσει προηγουμένως.

5. Αντιμετώπιση Προβλημάτων

Το ακόλουθο τμήμα καλύπτει συχνές ερωτήσεις σχετικά με προβλήματα που μπορείτε να συναντήσετε στην υλοποίηση του jounaling.

5.1. Κατά τη διάρκεια έντονης χρήσης του δίσκου, το σύστημα μου σταματάει με kernel panic. Υπάρχει περίπτωση αυτό να σχετίζεται με το journaling;

Είναι πιθανό το ημερολόγιο να γεμίζει πριν προλάβουν τα προηγούμενα δεδομένα του να μεταφερθούν στο σύστημα αρχείων. Θα πρέπει να θυμάστε ότι το μέγεθος του ημερολογίου δεν εξαρτάται από το μέγεθος του παροχέα δεδομένων, αλλά από το φόρτο εργασίας του. Αν η δραστηριότητα του δίσκου σας είναι υψηλή, θα χρειαστείτε μεγαλύτερο μέγεθος για την κατάτμηση του ημερολογίου. Δείτε τη σχετική σημείωση στην ενότητα Κατανόηση του Journaling στο FreeBSD.

5.2. Έκανα κάποιο λάθος στις ρυθμίσεις, και δεν μπορώ πλέον να ξεκινήσω κανονικά το σύστημα μου. Υπάρχει τρόπος να το διορθώσω;

Πιθανόν ξεχάσατε να προσθέσετε (ή έχετε κάνει λάθος) την καταχώρηση στο /boot/loader.conf, ή ίσως υπάρχει λάθος στο αρχείο /etc/fstab. Τα λάθη αυτά συνήθως διορθώνονται εύκολα. Πιέστε Enter για να ξεκινήσετε το προεπιλεγμένο κέλυφος λειτουργίας ενός χρήστη. Μετά εντοπίστε την πηγή του προβλήματος:

# cat /boot/loader.conf

Αν λείπει ή υπάρχει λάθος στην καταχώρηση geom_journal_load, οι αντίστοιχες συσκευές δεν δημιουργούνται καν. Μπορείτε να φορτώσετε το άρθρωμα χειροκίνητα, να προσαρτήσετε όλες τις κατατμήσεις, και να συνεχίσετε με την κανονική εκκίνηση:

# gjournal load

GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
GEOM_JOURNAL: Journal ad0s1d clean.
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
GEOM_JOURNAL: Journal ad0s1f clean.

# mount -a
# exit
(η εκκίνηση συνεχίζεται)

Αν ωστόσο η καταχώρηση αυτή είναι σωστή, ρίξτε μια ματιά στο αρχείο /etc/fstab. Το πιο πιθανό είναι να βρείτε ότι κάποια καταχώρηση λείπει, ή είναι λάθος. Στην περίπτωση αυτή, προσαρτήστε χειροκίνητα όλες τις κατατμήσεις και συνεχίστε την εκκίνηση κανονικά.

5.3. Μπορώ να καταργήσω το journaling και να επιστρέψω στο κανονικό σύστημα αρχείων με τα Soft Updates;

Βέβαια. Χρησιμοποιήστε την ακόλουθη διαδικασία η οποία αναιρεί τις αλλαγές. Μπορείτε έπειτα να χρησιμοποιήσετε τις κατατμήσεις των ημερολογίων για άλλο σκοπό, εφόσον το επιθυμείτε.

Εισέλθετε ως root και μεταβείτε σε κατάσταση ενός χρήστη:

# shutdown now

Αποπροσαρτήστε τις κατατμήσεις που χρησιμοποιούν journaling:

# umount /usr /var

Συγχρονίστε τα ημερολόγια:

# gjournal sync

Σταματήστε τους παροχείς ημερολογίου:

# gjournal stop ad0s1d.journal
# gjournal stop ad0s1f.journal

Διαγράψτε τα metadata του journaling από όλες τις συσκευές που χρησιμοποιήσατε:

# gjournal clear ad0s1d
# gjournal clear ad0s1f
# gjournal clear ad0s1g
# gjournal clear ad0s1h

Αναιρέστε την επιλογή του journaling, και θέστε ξανά την επιλογή για Soft Updates:

# tunefs -J disable -n enable ad0s1d
tunefs: gjournal cleared
tunefs: soft updates set

# tunefs-J disable -n enable ad0s1f
tunefs: gjournal cleared
tunefs: soft updates set

Προσαρτήστε χειροκίνητα τις κανονικές κατατμήσεις:

# mount -o rw /dev/ad0s1d  /var
# mount -o rw /dev/ad0s1f  /usr

Επεξεργαστείτε το /etc/fstab και επαναφέρατε τις προηγούμενες ρυθμίσεις:

/dev/ad0s1f     /usr            ufs     rw      2       2
/dev/ad0s1d     /var            ufs     rw      2       2

Τέλος, επεξεργαστείτε το αρχείο /boot/loader.conf, αφαιρέστε την καταχώρηση που φορτώνει το άρθρωμα geom_journal και επανεκκινήστε το σύστημα σας.

6. Επιπλέον Πληροφορίες

Το journaling είναι μια σχετικά νέα δυνατότητα του FreeBSD, και έτσι δεν είναι ακόμα καλά τεκμηριωμένη. Ίσως όμως να βρείτε χρήσιμες πληροφορίες στις παρακάτω αναφορές: