GregLeheyΑρχική συνεισφορά του Ο Διαχειριστής Τόμων VinumΣύνοψηΟτιδήποτε δίσκους και αν έχετε, πάντα υπάρχουν πιθανά
προβλήματα:Μπορεί να είναι πολύ μικροί.Μπορεί να είναι πολύ αργοί.Μπορεί να μην είναι αρκετά αξιόπιστοι.Για τα προβλήματα αυτά, έχουν προταθεί και υλοποιηθεί διάφορες
λύσεις. Ένας συχνά χρησιμοποιούμενος τρόπος προστασίας, είναι με την
χρήση πολλαπλών και ορισμένες φορές περιττών (redundant) δίσκων. Εκτός
από την υποστήριξη που παρέχεται για συσκευές (κάρτες και ελεγκτές)
hardware RAID, το βασικό σύστημα του &os; περιλαμβάνει το διαχειριστή
τόμων (volume manager) Vinum, ένα πρόγραμμα οδήγησης τύπου
μπλοκ το οποίο υλοποιεί εικονικούς δίσκους.
Το Vinum αποκαλείται και
Διαχειριστής Τόμων, και είναι ένας οδηγός
εικονικών δίσκων που αντιμετωπίζει τα παραπάνω τρία προβλήματα.
Το Vinum παρέχει καλύτερη ευελιξία, απόδοση και αξιοπιστία σε σχέση με
τα παραδοσιακά συστήματα αποθήκευσης, και υλοποιεί τα μοντέλα RAID-0,
RAID-1 και RAID-5, τόσο μεμονωμένα, όσο και σε συνδυασμό μεταξύ
τους.Το κεφάλαιο αυτό παρέχει μια επισκόπηση των πιθανών προβλημάτων των
παραδοσιακών συστημάτων αποθήκευσης, και μια εισαγωγή στο Διαχειριστή
Τόμων Vinum.Ξεκινώντας από το &os; 5 και μετά, το Vinum ξαναγράφτηκε
ώστε να ενσωματωθεί στην αρχιτεκτονική GEOM (),
διατηρώντας ωστόσο τις αρχικές ιδέες, ορολογία, και τη μορφή των
μετα-δεδομένων (metadata) που αποθηκεύονται στον δίσκο.
Η νέα αυτή εκδοχή ονομάζεται gvinum (από το
GEOM vinum). Το ακόλουθο κείμενο αναφέρεται
συνήθως στο Vinum ως αφηρημένη έννοια, άσχετα με
τις λεπτομέρειες της υλοποίησης. Όλες οι εντολές θα πρέπει τώρα να
καλούνται με τη χρήση της gvinum,
το άρθρωμα πυρήνα (kernel module) έχει μετονομαστεί σε
geom_vinum.ko από vinum.ko,
και όλα τα αρχεία συσκευών βρίσκονται στον κατάλογο
/dev/gvinum αντί για
/dev/vinum. Από το
&os; 6 και μετά, η παλιά υλοποίηση του Vinum δεν περιλαμβάνεται
πλέον στο βασικό σύστημα.Οι Δίσκοι Είναι Πολύ ΜικροίVinumRAIDsoftwareΟι δίσκοι γίνονται ολοένα και μεγαλύτεροι, αλλά με τον ίδιο ρυθμό
αυξάνονται επίσης και οι απαιτήσεις μας σε αποθηκευτικό χώρο. Πολλές
φορές θα βρεθείτε σε θέση να χρειάζεστε ένα σύστημα αρχείων μεγαλύτερο
από τους δίσκους που έχετε διαθέσιμους. Σίγουρα το πρόβλημα αυτό δεν
είναι τόσο έντονο όσο πριν δέκα χρόνια, αλλά εξακολουθεί να υπάρχει.
Μερικά συστήματα επιλύουν αυτό το πρόβλημα, δημιουργώντας μια εικονική
συσκευή που αποθηκεύει τα δεδομένα σε ένα αριθμό διακριτών
δίσκων.Καθυστερήσεις ΠρόσβασηςΣτα μοντέρνα συστήματα, υπάρχει συχνά ανάγκη πρόσβασης δεδομένων
από πολλές διεργασίες ταυτόχρονα. Για παράδειγμα, μεγάλοι εξυπηρετητές
FTP ή HTTP μπορεί να έχουν ανά πάσα στιγμή χιλιάδες ταυτόχρονες
εξωτερικές συνδέσεις και να διαθέτουν πολλαπλές διεπαφές 100 Mbit/s
οι οποίες ξεπερνάνε κατά πολύ τις δυνατότητες μεταφοράς δεδομένων των
περισσότερων σκληρών δίσκων.Τα τρέχοντα μοντέλα σκληρών δίσκων μπορούν να μεταφέρουν δεδομένα
σειριακά με ταχύτητα μέχρι και 70 MB/s, αλλά η τιμή αυτή έχει μικρή
σημασία σε ένα περιβάλλον όπου πολλές ανεξάρτητες διεργασίες χρειάζονται
πρόσβαση στον ίδιο δίσκο. Σε τέτοιες περιπτώσεις, κάθε διεργασία μπορεί
να επιτύχει μόνο ένα μικρό ποσοστό της μέγιστης αυτής απόδοσης. Είναι
πιο ενδιαφέρον να δούμε το πρόβλημα από την πλευρά του υποσυστήματος
δίσκων: ο σημαντικός παράγοντας είναι ο φόρτος στον οποίο υποβάλλεται
το υποσύστημα κατά τη διάρκεια μιας μεταφοράς. Με άλλα λόγια, ο χρόνος
που παραμένουν απασχολημένοι οι δίσκοι εξαιτίας της μεταφοράς.Σε κάθε μεταφορά δεδομένων, ο δίσκος θα πρέπει πρώτα να τοποθετήσει
τις κεφαλές στο σωστό σημείο, να περιμένει να περάσει ο πρώτος τομέας
κάτω από την κεφαλή ανάγνωσης, και έπειτα να εκτελέσει τη μεταφορά.
Οι ενέργειες αυτές μπορούν να θεωρηθούν ατομικές: δεν έχει νόημα να
προσπαθήσουμε να τις διακόψουμε. Ας θεωρήσουμε μια τυπική μεταφορά
περίπου 10 kB. Η τρέχουσα γενιά δίσκων υψηλής απόδοσης μπορεί να
τοποθετήσει τις κεφαλές στη σωστή θέση σε περίπου 3.5 ms. Οι πιο
γρήγοροι δίσκοι έχουν ταχύτητα περιστροφής 15.000 στροφές το λεπτό,
έτσι ο μέσος χρόνος καθυστέρησης περιστροφής (μισή περιστροφή) είναι
2 ms. Με 70 MB/s, η μεταφορά αυτή καθ' αυτή θα χρειαστεί
περίπου 150 μs, σχεδόν τίποτα σε σχέση με το χρόνο που
χρειάζεται για την τοποθέτηση της κεφαλής στο σωστό σημείο.
Στην περίπτωση αυτή, ο πραγματικός ρυθμός μεταφοράς πέφτει σε λίγο
περισσότερο από ένα 1 ΜΒ/s και είναι εμφανές ότι εξαρτάται σε
μεγάλο βαθμό από το μέγεθος των δεδομένων που μεταφέρονται.Η παραδοσιακή και προφανής λύση σε αυτό το πρόβλημα, είναι να
προσθέσουμε περισσότερους δίσκους: αντί να
χρησιμοποιήσουμε ένα μεγάλο δίσκο, να βάλουμε πολλούς μικρότερους με
τον ίδιο τελικό αποθηκευτικό χώρο. Κάθε δίσκος έχει δυνατότητα να
μετακινεί τις κεφαλές και να μεταφέρει δεδομένα ανεξάρτητα από τους
άλλους, έτσι η πραγματική διαμεταγωγή αυξάνει αναλογικά με το πλήθος
των δίσκων που χρησιμοποιούνται.Η πραγματική αύξηση της διαμεταγωγής είναι φυσικά μικρότερη από το
πλήθος των δίσκων που χρησιμοποιούνται: αν και κάθε δίσκος είναι ικανός
να μεταφέρει δεδομένα παράλληλα με τους άλλους, δεν υπάρχει τρόπος να
εξασφαλίσουμε ότι οι αιτήσεις μεταφοράς κατανέμονται ομοιόμορφα σε όλους
τους δίσκους. Είναι αναπόφευκτο ότι το φορτίο σε ένα δίσκο θα είναι
μεγαλύτερο από το φορτίο σε κάποιο άλλο.disk concatenationVinumconcatenationΗ ομοιομορφία κατανομής του φορτίου στους δίσκους, εξαρτάται σε
μεγάλο βαθμό από τον τρόπο που έχουν μοιραστεί τα δεδομένα σε αυτούς.
Στην παρακάτω συζήτηση, είναι βολικό να σκεφτόμαστε τον αποθηκευτικό
χώρο ενός δίσκου ως ένα μεγάλο αριθμό από τομείς στους οποίους έχουμε
πρόσβαση με βάση ένα αριθμό, ακριβώς όπως οι σελίδες σε ένα βιβλίο.
Η πιο προφανής μέθοδος είναι να χωρίσουμε τον εικονικό δίσκο σε ομάδες
από συνεχόμενους τομείς, όπου καθεμία έχει το μέγεθος του πραγματικού
ανεξάρτητου φυσικού δίσκου, και να τις αποθηκεύσουμε με αυτό τον τρόπο,
περίπου σαν να παίρναμε ένα μεγάλο βιβλίο και να το χωρίζαμε σε
μικρότερους τόμους. Η μέθοδος αυτή ονομάζεται
συνένωση (concatenation) και έχει το πλεονέκτημα
ότι δεν απαιτεί τα μεγέθη των δίσκων να έχουν κάποια σχέση μεταξύ τους.
Λειτουργεί πολύ καλά όταν η πρόσβαση στον εικονικό δίσκο είναι
ομοιόμορφα κατανεμημένη σε όλη την περιοχή διευθύνσεων του. Όταν η
πρόσβαση συγκεντρώνεται σε μια μικρότερη περιοχή, η βελτίωση είναι
μικρότερη. Το δείχνει την ακολουθία με
την οποία γίνεται η κατανομή των θέσεων αποθήκευσης όταν
χρησιμοποιείται η συνένωση.disk stripingVinumstripingRAIDΈνας εναλλακτικός τρόπος αποθήκευσης, είναι να χωριστεί η περιοχή
διευθύνσεων σε μικρότερα τμήματα ίσου μεγέθους τα οποία να αποθηκεύονται
σειριακά σε διαφορετικές συσκευές. Για παράδειγμα, οι πρώτοι 256 τομείς
μπορεί να είναι αποθηκευμένοι στον πρώτο δίσκο, οι επόμενοι 256 στον
επόμενο δίσκο, κ.ο.κ. Μετά την χρήση και του τελευταίου δίσκου,
η διαδικασία επαναλαμβάνεται μέχρι να γεμίσουν όλοι οι δίσκοι. Αυτή
η μέθοδος ονομάζεται striping ή
RAID-0.
Το RAID σημαίνει Redundant
Array of Inexpensive Disks και παρέχει διάφορες μορφές
ανοχής σε σφάλματα, αν και στην παραπάνω χρήση ο όρος είναι
κάπως παραπλανητικός: το RAID-0 δεν παρέχει καμιά
τέτοια προστασία δεδομένων.
Το striping απαιτεί κάπως περισσότερη προσπάθεια για τον εντοπισμό των
δεδομένων και μπορεί να προκαλέσει μεγαλύτερο φορτίο I/O όταν μια
μεταφορά κατανέμεται σε πολλαπλούς δίσκους, αλλά από την άλλη
επιτυγχάνει μεγαλύτερο σταθερό φορτίο σε κάθε δίσκο.
Το δείχνει τη σειρά με την οποία
χρησιμοποιούνται οι μονάδες αποθήκευσης σε μια οργάνωση τύπου
stripe.Ακεραιότητα ΔεδομένωνΤο τελευταίο πρόβλημα με την τρέχουσα τεχνολογία δίσκων, είναι
η αναξιοπιστία τους. Αν και τα τελευταία χρόνια η αξιοπιστία των
δίσκων έχει αυξηθεί σημαντικά, εξακολουθούν να είναι το εξάρτημα με
το μεγαλύτερο ρυθμό αποτυχίας στους εξυπηρετητές. Όταν αποτύχει ένας
δίσκος, τα αποτελέσματα μπορεί να είναι καταστροφικά: η αντικατάσταση
ενός χαλασμένου δίσκου και η αντιγραφή των δεδομένων στο νέο μπορεί
να διαρκέσει μέρες.disk mirroringVinummirroringRAID-1Ο παραδοσιακός τρόπος αντιμετώπισης αυτού του προβλήματος είναι το
mirroring (καθρεπτισμός), η διατήρηση δηλαδή δύο
αντιγράφων των δεδομένων σε διαφορετικούς δίσκους. Με την εφεύρεση των
διάφορων επιπέδων RAID, η τεχνική αυτή έγινε επίσης
γνωστή με την ονομασία RAID επιπέδου 1 ή απλώς
RAID-1. Κάθε εγγραφή στον τόμο γίνεται και στους
δύο δίσκους. Η ανάγνωση μπορεί να γίνει από οποιοδήποτε δίσκο, έτσι
αν ένας από τους δύο αποτύχει, τα δεδομένα εξακολουθούν να είναι
διαθέσιμα στον άλλο.Το mirroring έχει δύο προβλήματα:Το κόστος. Απαιτεί διπλάσιο κόστος από οποιαδήποτε λύση δεν
προσφέρει αυτή τη λειτουργία.Τη μείωση της απόδοσης. Οι εγγραφές πρέπει να
γίνονται και στους δύο δίσκους, καταναλώνοντας έτσι το διπλάσιο
εύρος ζώνης σε σχέση με ένα τόμο που δεν χρησιμοποιεί mirror.
Η ανάγνωση δεν υποφέρει από το ίδιο πρόβλημα. Μάλιστα φαίνεται
να είναι και γρηγορότερη.RAID-5Μια εναλλακτική
λύση είναι το parity (ισοτιμία), το οποίο
υλοποιείται στα επίπεδα 2, 3, 4 και 5 του RAID.
Από τα επίπεδα αυτά, το RAID-5 είναι το πιο
ενδιαφέρον. Ο τρόπος που υλοποιείται στο Vinum, είναι μια παραλλαγή
της οργάνωσης δεδομένων που χρησιμοποιείται στο stripe, με τη διαφορά
ότι ένα μπλοκ από κάθε stripe χρησιμοποιείται για να αποθηκεύει την
ισοτιμία ενός άλλου μπλοκ. Στο Vinum, μια συστοιχία
RAID-5, είναι παρόμοια με μια συστοιχία stripe,
εκτός από το γεγονός ότι υλοποιεί RAID-5 καθώς κάθε
stripe περιέχει και μπλοκ ισοτιμίας. Η τοποθεσία του μπλοκ ισοτιμίας,
αλλάζει από το ένα stripe στο επόμενο, κάτι που απαιτείται από το
RAID-5. Οι αριθμοί στα μπλοκ δεδομένων αναφέρονται
στη σχετική αρίθμηση τους.Σε σύγκριση με το mirror, το RAID-5 έχει το
πλεονέκτημα να απαιτεί σημαντικά λιγότερο χώρο αποθήκευσης. Η ταχύτητα
ανάγνωσης είναι ίδια με το stripe, αλλά η εγγραφή είναι σημαντικά πιο
αργή, περίπου το 25% της απόδοσης κατά την ανάγνωση. Αν ένας δίσκος
χαλάσει, η συστοιχία εξακολουθεί να λειτουργεί σε ελαττωμένη (degraded)
κατάσταση: η ανάγνωση από τους δίσκους που λειτουργούν κανονικά
συνεχίζεται απροβλημάτιστα, αλλά η ανάγνωση δεδομένων που βρίσκονταν
στον προβληματικό δίσκο πρέπει να επαναϋπολογιστεί με βάση τα
αντίστοιχα μπλοκ ισοτιμίας που βρίσκονται σε όλους τους άλλους
δίσκους.Αντικείμενα του VinumΓια την αντιμετώπιση των παραπάνω προβλημάτων, το Vinum υλοποιεί μια
ιεραρχία αντικειμένων τεσσάρων επιπέδων:Το πλέον ορατό αντικείμενο είναι ο εικονικός δίσκος, ο οποίος
καλείται και τόμος (volume). Οι τόμοι έχουν
ουσιαστικά τις ίδιες ιδιότητες με ένα δίσκο του &unix;, αν και
υπάρχουν κάποιες μικρές διαφορές. Δεν υπάρχουν περιορισμοί όσο
αφορά το μέγεθος τους.Οι τόμοι αποτελούνται από plex, και κάθε
ένα από αυτά αντιπροσωπεύει το συνολικό χώρο διευθύνσεων ενός
τόμου. Αυτό το επίπεδο στην ιεραρχία παρέχει τη δυνατότητα
redundancy. Μπορείτε να σκεφτείτε τα plex ως μεμονωμένους δίσκους
σε μια συστοιχία mirror, όπου κάθε ένα περιέχει τα ίδια
δεδομένα.Καθώς το Vinum υπάρχει μέσα στο πλαίσιο λειτουργιών του &unix;
που χρησιμοποιείται για την αποθήκευση σε δίσκους, θα μπορούσε
να χρησιμοποιήσει τις κατατμήσεις του &unix; ως το δομικό στοιχείο
για τη δημιουργία των plex. Στην πραγματικότητα, η λογική αυτή
αποδεικνύεται ιδιαίτερα περιοριστική: οι δίσκοι στο &unix; μπορούν
να έχουν περιορισμένο αριθμό κατατμήσεων. Αντίθετα, το Vinum
υποδιαιρεί μια μόνο κατάτμηση του &unix;
(τον οδηγό) σε συνεχόμενες περιοχές που
καλούνται υποδίσκοι (subdisks). Οι υποδίσκοι
χρησιμοποιούνται ως τα δομικά στοιχεία για τα plex.Οι υποδίσκοι βρίσκονται σε οδηγούς Vinum,
που τη δεδομένη στιγμή είναι κατατμήσεις του &unix;. Οι οδηγοί του
Vinum μπορούν να περιέχουν οποιοδήποτε αριθμό από υποδίσκους. Με
εξαίρεση μια μικρή περιοχή στην αρχή του δίσκου (η οποία
χρησιμοποιείται για την αποθήκευση δεδομένων ρύθμισης και
κατάστασης) όλος ο υπόλοιπος οδηγός είναι διαθέσιμος για αποθήκευση
δεδομένων.Οι παρακάτω ενότητες περιγράφουν τον τρόπο με τον οποίο αυτά τα
αντικείμενα παρέχουν την λειτουργικότητα που απαιτείται από το
Vinum.Μέγεθος ΤόμουΤα plex μπορούν να περιλαμβάνουν πολλαπλούς υποδίσκους, που
κατανέμονται σε όλους τους οδηγούς του Vinum. Σαν αποτέλεσμα, το
μέγεθος ενός συγκεκριμένου δίσκου δεν περιορίζει το μέγεθος ούτε του
plex, ούτε του τόμου.Πλεονάζουσα (Redundant) Αποθήκευση ΔεδομένωνΤο Vinum υλοποιεί το mirroring προσαρτώντας πολλαπλά plex σε
ένα τόμο. Κάθε plex είναι μια αναπαράσταση των δεδομένων ενός τόμου.
Ένας τόμος μπορεί να περιέχει μεταξύ ενός και οκτώ plex.Αν και ένα plex αντιπροσωπεύει τα πλήρη δεδομένα ενός τόμου,
είναι πιθανόν κάποια μέρη της αναπαράστασης να λείπουν από το φυσικό
μέσο, είτε επειδή έχει σχεδιαστεί με αυτό το τρόπο (αν δεν έχει
οριστεί υποδίσκος για κάποια τμήματα του plex) ή από πρόβλημα (ως
αποτέλεσμα της αποτυχίας κάποιου δίσκου). Όσο υπάρχει τουλάχιστον
ένα plex που μπορεί να παρέχει τα δεδομένα για την πλήρη περιοχή
διευθύνσεων του τόμου, ο τόμος είναι πλήρως λειτουργικός.Θέματα ΑπόδοσηςΤο Vinum υλοποιεί τόσο συνένωση όσο και striping σε επίπεδο
plex:Ένα plex συνένωσης (concatenated)
χρησιμοποιεί την περιοχή διευθύνσεων κάθε υποδίσκου με τη
σειρά.Ένα striped plex γράφει τα δεδομένα
σε λωρίδες (stripes) που κατανέμονται σε κάθε υποδίσκο. Όλοι οι
υποδίσκοι πρέπει να έχουν το ίδιο μέγεθος και πρέπει να υπάρχουν
τουλάχιστον δύο υποδίσκοι, για να ξεχωρίζουν σε σχέση με το plex
συνένωσης.Είδη Οργάνωσης PlexΗ έκδοση του Vinum που παρέχεται με το &os; &rel.current;
υλοποιεί δύο είδη plex:Τα plex συνένωσης προσφέρουν τη μεγαλύτερη ευελιξία: μπορούν
να περιέχουν οποιοδήποτε αριθμό υποδίσκων, και οι υποδίσκοι αυτοί
μπορεί να είναι διαφορετικού μεγέθους. Το plex μπορεί να
επεκταθεί προσθέτοντας περισσότερους υποδίσκους. Χρειάζονται
λιγότερο χρόνο CPU σε σχέση με τα stripes, αν
και η διαφορά στη χρήση της CPU δεν είναι
μετρήσιμη. Από την άλλη μεριά, είναι πιο επιρρεπή σε
μη-ισορροπημένη λειτουργία, όπου ένας δίσκος είναι πολύ ενεργός
και οι υπόλοιποι αδρανούν.Το μεγαλύτερο πλεονέκτημα των stripes
(RAID-0), είναι ότι έχουν πιο ισορροπημένη
λειτουργία: επιλέγοντας το σωστό μέγεθος λωρίδας (περίπου
256 kB), μπορείτε να εξισορροπήσετε το φορτίο σε κάθε δίσκο
του plex. Τα μειονεκτήματα αυτής της μεθόδου είναι (ελαφρά) πιο
πολύπλοκος κώδικας και περιορισμοί στους υποδίσκους: πρέπει όλοι
να είναι το ίδιο μέγεθος και η επέκταση ενός plex με προσθήκη
περισσότερων δίσκων είναι τόσο πολύπλοκη που τη δεδομένη στιγμή
το Vinum δεν την υλοποιεί. Το Vinum επίσης επιβάλλει ένα ακόμα
απλοϊκό περιορισμό: ένα plex τύπου stripe πρέπει να διαθέτει
υποχρεωτικά δύο τουλάχιστον υποδίσκους, διαφορετικά είναι
αδύνατο να το ξεχωρίσουμε από ένα plex συνένωσης.Ο δείχνει περιληπτικά τα
πλεονεκτήματα και μειονεκτήματα κάθε είδους οργάνωσης plex.
Είδη Οργάνωσης Vinum PlexΤύπος plexΕλάχιστο πλήθος υποδίσκωνΔυνατότητα προσθήκης υποδίσκωνΟι υποδίσκοι πρέπει να είναι ίδιου μεγέθουςΕφαρμογήσυνένωσης (concatenated)1ναιόχιΑποθήκευση μεγάλου όγκου δεδομένων με μέγιστη ευελιξία
στον τρόπο κατανομής και μέτρια απόδοση.striped2όχιναιΥψηλή απόδοση σε συνδυασμό με πολύ καλές ταχύτητες σε
καταστάσεις πολλαπλής πρόσβασης.
Μερικά ΠαραδείγματαΤο Vinum διατηρεί μια
βάση δεδομένων με τις ρυθμίσεις του η οποία
περιγράφει τα αντικείμενα τα οποία γνωρίζει ένα συγκεκριμένο σύστημα.
Αρχικά, ο χρήστης δημιουργεί αυτή τη βάση δεδομένων από ένα ή
περισσότερα αρχεία ρυθμίσεων, με την βοήθεια του προγράμματος
&man.gvinum.8;. Το vinum αποθηκεύει ένα αντίγραφο της βάσης
δεδομένων σε κάθε slice του δίσκου (που το Vinum αποκαλεί
συσκευή) που βρίσκεται υπό τον έλεγχο του.
Η βάση δεδομένων ανανεώνεται σε κάθε αλλαγή κατάστασης, ώστε
όλα τα αντικείμενα του Vinum να επανέρχονται στη σωστή κατάσταση μετά
από μια επανεκκίνηση.Το Αρχείο ΡυθμίσεωνΤο αρχείο ρυθμίσεων περιγράφει τα μεμονωμένα αντικείμενα του
Vinum. Ο ορισμός για ένα απλό τόμο μπορεί να μοιάζει με τον
παρακάτω:
drive a device /dev/da3h
volume myvol
plex org concat
sd length 512m drive aΑυτό το αρχείο περιγράφει τέσσερα αντικείμενα του Vinum:Η γραμμή drive περιγράφει μια κατάτμηση
δίσκου (οδηγού) και τη θέση της σε σχέση με
το φυσικό δίσκο. Δίνεται σε αυτή το συμβολικό όνομα
a. Αυτός ο διαχωρισμός των συμβολικών από
τα πραγματικά ονόματα συσκευών, μας επιτρέπει να μεταφέρουμε
δίσκους από μια θέση σε μια άλλη χωρίς να προκληθεί
σύγχυση.Η γραμμή volume περιγράφει ένα τόμο.
Το μόνο απαιτούμενο χαρακτηριστικό εδώ είναι το όνομα, στην
περίπτωση μας myvol.Η γραμμή plex ορίζει ένα plex.
Η μόνη απαραίτητη παράμετρος είναι το είδος της οργάνωσης, στη
συγκεκριμένη περίπτωση το concat. Δεν
είναι απαραίτητο να δοθεί όνομα: το σύστημα παράγει αυτόματα
ένα όνομα χρησιμοποιώντας το όνομα του τόμου και την κατάληξη
.px, όπου το
x είναι ο αριθμός του plex στον τόμο. Έτσι,
αυτό το plex θα καλείται myvol.p0.Η γραμμή sd περιγράφει ένα υποδίσκο.
Οι ελάχιστες απαιτούμενες προδιαγραφές είναι το όνομα ενός
δίσκου στον οποίο θα αποθηκευτεί, και το μήκος του υποδίσκου.
Όπως συμβαίνει και με τα plex, δεν απαιτείται όνομα:
το σύστημα αποδίδει ονόματα αυτόματα, χρησιμοποιώντας ως σημείο
εκκίνησης το όνομα του plex και προσθέτοντας την κατάληξη
.sx, όπου το
x είναι ο αριθμός του υποδίσκου στο plex.
Έτσι, το Vinum δίνει σε αυτόν τον υποδίσκο το όνομα
myvol.p0.s0.Μετά την επεξεργασία αυτού του αρχείου, το &man.gvinum.8; παράγει
την ακόλουθη έξοδο:
&prompt.root; gvinum -> create config1
Configuration summary
Drives: 1 (4 configured)
Volumes: 1 (4 configured)
Plexes: 1 (8 configured)
Subdisks: 1 (16 configured)
D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%)
V myvol State: up Plexes: 1 Size: 512 MB
P myvol.p0 C State: up Subdisks: 1 Size: 512 MB
S myvol.p0.s0 State: up PO: 0 B Size: 512 MBΗ παραπάνω έξοδος χρησιμοποιεί τη μορφή συντομευμένης λίστας του
&man.gvinum.8;. Η γραφική απεικόνιση φαίνεται στο .Στο σχήμα αυτό (καθώς και σε αυτά που ακολουθούν) υπάρχει η
αναπαράσταση ενός τόμου που περιέχει τα plex, τα οποία με τη
σειρά τους περιέχουν τους υποδίσκους. Σε αυτό το απλουστευμένο
παράδειγμα, ο τόμος περιέχει ένα plex και το plex περιέχει ένα
υποδίσκο.Ο τόμος αυτός δεν έχει κάποιο συγκεκριμένο
πλεονέκτημα σε σχέση με μια συμβατική κατάτμηση δίσκου. Περιέχει
ένα μόνο plex, άρα δεν έχει κάποια ικανότητα ανοχής σφαλμάτων.
Το plex περιέχει επίσης ένα υποδίσκο, και έτσι δεν υπάρχει διαφορά
στην κατανομή χώρου σε σχέση με μια συμβατική κατάτμηση. Στις
επόμενες ενότητες θα δείξουμε διαφορετικές και πιο ενδιαφέρουσες
μεθόδους ρύθμισης.Αυξημένη Αξιοπιστία: MirroringΗ αξιοπιστία ενός τόμου μπορεί να αυξηθεί μέσω του mirroring
(καθρεπτισμού). Όταν σχεδιάζετε ένα τόμο στον οποίο θα γίνει
mirroring, είναι σημαντικό να εξασφαλίσετε ότι οι υποδίσκοι σε κάθε
plex είναι σε διαφορετικούς οδηγούς, ώστε η αποτυχία ενός δίσκου να
μην προκαλέσει παύση λειτουργίας και στα δύο plex. Το παρακάτω
παράδειγμα δείχνει πως μπορεί να γίνει mirroring ενός τόμου:
drive b device /dev/da4h
volume mirror
plex org concat
sd length 512m drive a
plex org concat
sd length 512m drive bΣτο παράδειγμα αυτό, δεν ήταν απαραίτητο να καθοριστεί ξανά ο
οδηγός a, καθώς το Vinum διαθέτει ήδη τις
αντίστοιχες καταχωρίσεις στη βάση δεδομένων με τις ρυθμίσεις του.
Μετά την επεξεργασία των παραπάνω ορισμών, η ρύθμιση μοιάζει με
την παρακάτω:
Drives: 2 (4 configured)
Volumes: 2 (4 configured)
Plexes: 3 (8 configured)
Subdisks: 3 (16 configured)
D a State: up Device /dev/da3h Avail: 1549/2573 MB (60%)
D b State: up Device /dev/da4h Avail: 2061/2573 MB (80%)
V myvol State: up Plexes: 1 Size: 512 MB
V mirror State: up Plexes: 2 Size: 512 MB
P myvol.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB
S myvol.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p1.s0 State: empty PO: 0 B Size: 512 MBΤο αναπαριστά αυτή τη δομή
γραφικά.Στο παράδειγμα αυτό, κάθε plex περιέχει την πλήρη περιοχή
διευθύνσεων, μεγέθους 512 MB. Όπως και στο προηγούμενο
παράδειγμα, κάθε plex περιέχει ένα μοναδικό υποδίσκο.Βελτιστοποιώντας την ΑπόδοσηΟ mirrored τόμος του προηγούμενου παραδείγματος παρουσιάζει
μεγαλύτερη ανοχή σφαλμάτων σε σχέση με ένα τόμο που δεν χρησιμοποιεί
mirror, αλλά η απόδοση του είναι μικρότερη: κάθε εγγραφή στον
τόμο πρέπει να γίνεται και στους δύο δίσκους, χρησιμοποιώντας έτσι
μεγαλύτερο ποσοστό του διαθέσιμου εύρους ζώνης. Οι απαιτήσεις που
ενδεχομένως έχουμε για απόδοση, απαιτούν διαφορετική προσέγγιση:
αντί να χρησιμοποιήσουμε mirror, μπορούμε να δημιουργήσουμε λωρίδες
αποθήκευσης (stripes) σε όσο το δυνατόν περισσότερους δίσκους.
Η παρακάτω ρύθμιση δείχνει ένα τόμο στον οποίο το plex έχει γίνει
stripe σε τέσσερις δίσκους:
drive c device /dev/da5h
drive d device /dev/da6h
volume stripe
plex org striped 512k
sd length 128m drive a
sd length 128m drive b
sd length 128m drive c
sd length 128m drive dΌπως και προηγουμένως, δεν χρειάζεται να ορίσουμε ξανά τους
δίσκους που είναι ήδη γνωστοί στο Vinum. Μετά την επεξεργασία του
παραπάνω ορισμού, η ρύθμιση θα μοιάζει με την παρακάτω:
Drives: 4 (4 configured)
Volumes: 3 (4 configured)
Plexes: 4 (8 configured)
Subdisks: 7 (16 configured)
D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%)
D b State: up Device /dev/da4h Avail: 1933/2573 MB (75%)
D c State: up Device /dev/da5h Avail: 2445/2573 MB (95%)
D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%)
V myvol State: up Plexes: 1 Size: 512 MB
V mirror State: up Plexes: 2 Size: 512 MB
V striped State: up Plexes: 1 Size: 512 MB
P myvol.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB
P striped.p1 State: up Subdisks: 1 Size: 512 MB
S myvol.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB
S striped.p0.s0 State: up PO: 0 B Size: 128 MB
S striped.p0.s1 State: up PO: 512 kB Size: 128 MB
S striped.p0.s2 State: up PO: 1024 kB Size: 128 MB
S striped.p0.s3 State: up PO: 1536 kB Size: 128 MBΑυτός ο τόμος αναπαρίσταται γραφικά στο
. Η απόχρωση της λωρίδας
αντιπροσωπεύει τη θέση της μέσα στην περιοχή διευθύνσεων του plex:
οι ανοιχτόχρωμες λωρίδες είναι οι πρώτες, οι σκουρόχρωμες είναι οι
τελευταίες.Αξιοπιστία και ΑπόδοσηΜε το κατάλληλο υλικό, είναι δυνατόν
να δημιουργηθούν τόμοι οι οποίοι να παρουσιάζουν τόσο μεγάλη ανοχή
σε σφάλματα, όσο και αυξημένη απόδοση σε σχέση με τις τυποποιημένες
κατατμήσεις του &unix;. Ένα τυπικό αρχείο ρυθμίσεων θα μοιάζει με το
παρακάτω:
volume raid10
plex org striped 512k
sd length 102480k drive a
sd length 102480k drive b
sd length 102480k drive c
sd length 102480k drive d
sd length 102480k drive e
plex org striped 512k
sd length 102480k drive c
sd length 102480k drive d
sd length 102480k drive e
sd length 102480k drive a
sd length 102480k drive bΟι υποδίσκοι του δεύτερου plex έχουν μετατεθεί κατά δύο οδηγούς
σε σχέση με αυτούς του πρώτου plex: αυτό εξασφαλίζει ότι οι εγγραφές
δεν γίνονται στους ίδιους υποδίσκους, ακόμα και αν μια μεταφορά
χρησιμοποιεί και τους δύο δίσκους.Το αναπαριστά γραφικά τη δομή
αυτού του τόμου.Ονομασία ΑντικειμένωνΌπως περιγράψαμε παραπάνω, το Vinum αποδίδει προεπιλεγμένα ονόματα
σε plex και υποδίσκους, αν και υπάρχει η δυνατότητα να τα
παρακάμψετε. Αυτό ωστόσο δεν συνίσταται: η εμπειρία που έχουμε από
το διαχειριστή τόμων VERITAS (ο οποίος επιτρέπει ελεύθερη απόδοση
ονομάτων στα αντικείμενα) έχει δείξει ότι αυτού του είδους η ευελιξία
δεν προσφέρει σημαντικά πλεονεκτήματα, και μπορεί να προκαλέσει
σύγχυση.Τα ονόματα μπορεί να περιέχουν οποιοδήποτε μη-κενό χαρακτήρα, αλλά
συνίσταται να περιοριστείτε στη χρήση γραμμάτων, αριθμών και της κάτω
παύλας. Τα ονόματα των τόμων, των plex και των υποδίσκων μπορεί να
είναι μέχρι 64 χαρακτήρες, ενώ τα ονόματα των δίσκων μπορεί να είναι
μέχρι 32 χαρακτήρες.Τα αρχεία συσκευών του Vinum δημιουργούνται στον κατάλογο
/dev/gvinum. Με τις ρυθμίσεις
που φαίνονται παραπάνω, το Vinum θα δημιουργήσει τα παρακάτω αρχεία
συσκευών:Καταχωρίσεις συσκευών για κάθε τόμο. Αυτές είναι και οι κύριες
συσκευές που χρησιμοποιεί το Vinum. Με τις ρυθμίσεις που δείξαμε
παραπάνω, θα έχουμε τις συσκευές:
/dev/gvinum/myvol,
/dev/gvinum/mirror,
/dev/gvinum/striped,
/dev/gvinum/raid5 και
/dev/gvinum/raid10.Όλοι οι τόμοι διαθέτουν απευθείας καταχωρίσεις στον κατάλογο
/dev/gvinum/.Οι κατάλογοι
/dev/gvinum/plex και
/dev/gvinum/sd, που
περιέχουν τα αρχεία συσκευών για κάθε plex και υποδίσκο
αντίστοιχα.Για παράδειγμα, θεωρήστε το παρακάτω αρχείο ρυθμίσεων:
drive drive1 device /dev/sd1h
drive drive2 device /dev/sd2h
drive drive3 device /dev/sd3h
drive drive4 device /dev/sd4h
volume s64 setupstate
plex org striped 64k
sd length 100m drive drive1
sd length 100m drive drive2
sd length 100m drive drive3
sd length 100m drive drive4Μετά την επεξεργασία αυτού του αρχείου, το &man.gvinum.8; θα
δημιουργήσει την ακόλουθη δομή στον κατάλογο
/dev/gvinum:
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 plex
crwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 s64
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 sd
/dev/vinum/plex:
total 0
crwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0
/dev/vinum/sd:
total 0
crwxr-xr-- 1 root wheel 91, 0x20000002 Apr 13 16:46 s64.p0.s0
crwxr-xr-- 1 root wheel 91, 0x20100002 Apr 13 16:46 s64.p0.s1
crwxr-xr-- 1 root wheel 91, 0x20200002 Apr 13 16:46 s64.p0.s2
crwxr-xr-- 1 root wheel 91, 0x20300002 Apr 13 16:46 s64.p0.s3Αν και συνίσταται να μην δίνονται συγκεκριμένα ονόματα στα plex
και τους υποδίσκους, θα πρέπει να δοθούν ονόματα στους δίσκους του
Vinum. Με τον τρόπο αυτό, ο δίσκος αναγνωρίζεται αυτόματα ακόμα και
αν αλλάξει θέση. Τα ονόματα των δίσκων μπορεί να έχουν μέγεθος μέχρι
32 χαρακτήρες.Δημιουργία Συστημάτων ΑρχείωνΟι τόμοι δείχνουν όμοιοι με τους δίσκους όσο αφορά το σύστημα,
με μια εξαίρεση. Αντίθετα με τους δίσκους του &unix;, το Vinum δεν
δημιουργεί κατατμήσεις στους τόμους, και έτσι απουσιάζει από αυτούς
ο αντίστοιχος πίνακας κατατμήσεων. Αυτό απαιτεί την τροποποίηση
κάποιων βοηθητικών προγραμμάτων και ειδικότερα του &man.newfs.8;, το
οποίο στις προηγούμενες υλοποιήσεις του προσπαθούσε να ερμηνεύσει
το τελευταίο γράμμα ενός τόμου Vinum ως αναγνωριστικό της κατάτμησης.
Για παράδειγμα, ένας κανονικός δίσκος μπορεί να έχει το όνομα
/dev/ad0a ή
/dev/da2h.
Τα ονόματα αυτά αντιπροσωπεύουν την πρώτη κατάτμηση
(a) στον πρώτο δίσκο IDE
(ad) και την όγδοη κατάτμηση
(h) στον τρίτο (2) SCSI δίσκο
(da) αντίστοιχα. Σε αντίθεση, ένας τόμος
του Vinum μπορεί να ονομάζεται /dev/gvinum/concat, το οποίο δεν
έχει καμιά σχέση με όνομα κατάτμησης.Για να δημιουργήσετε ένα σύστημα αρχείων σε αυτό τον τόμο,
χρησιμοποιήστε την &man.newfs.8;:&prompt.root; newfs /dev/gvinum/concatΡύθμιση του VinumΤο Vinum δεν υπάρχει στον πυρήνα GENERIC.
Είναι δυνατόν να δημιουργήσετε προσαρμοσμένο πυρήνα που να το περιέχει,
αλλά δεν συνίσταται. Ο συνηθισμένος τρόπος να ξεκινήσετε το Vinum,
είναι να το φορτώσετε ως άρθρωμα στον πυρήνα (kld).
Δεν χρειάζεται καν να χρησιμοποιήσετε την &man.kldload.8; για το
Vinum: όταν ξεκινήσετε το &man.gvinum.8;, θα γίνει έλεγχος για να
διαπιστωθεί αν το άρθρωμα είναι φορτωμένο, και αν δεν είναι θα
φορτωθεί αυτόματα.ΕκκίνησηΤο Vinum αποθηκεύει τις πληροφορίες για τις ρυθμίσεις του στα
slices των δίσκων, ουσιαστικά με τον ίδιο τρόπο που τις αποθηκεύει
και στα αρχεία ρυθμίσεων. Όταν το Vinum διαβάζει τη βάση δεδομένων
των ρυθμίσεων, μπορεί να αναγνωρίσει ένα αριθμό λέξεων που δεν
επιτρέπεται να εμφανιστούν στα αρχεία ρυθμίσεων. Για παράδειγμα, οι
ρυθμίσεις για κάποιο δίσκο μπορεί να περιέχουν το παρακάτω
κείμενο:volume myvol state up
volume bigraid state down
plex name myvol.p0 state up org concat vol myvol
plex name myvol.p1 state up org concat vol myvol
plex name myvol.p2 state init org striped 512b vol myvol
plex name bigraid.p0 state initializing org raid5 512b vol bigraid
sd name myvol.p0.s0 drive a plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 0b
sd name myvol.p0.s1 drive b plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 1048576b
sd name myvol.p1.s0 drive c plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 0b
sd name myvol.p1.s1 drive d plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 1048576b
sd name myvol.p2.s0 drive a plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 0b
sd name myvol.p2.s1 drive b plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 524288b
sd name myvol.p2.s2 drive c plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1048576b
sd name myvol.p2.s3 drive d plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1572864b
sd name bigraid.p0.s0 drive a plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 0b
sd name bigraid.p0.s1 drive b plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 4194304b
sd name bigraid.p0.s2 drive c plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 8388608b
sd name bigraid.p0.s3 drive d plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 12582912b
sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216bΟι προφανείς διαφορές εδώ, είναι η παρουσία συγκεκριμένων
θέσεων και ονομάτων (και τα δύο είναι επιτρεπτά, αλλά γενικά δεν
συνίσταται η χρήση τους) και οι πληροφορίες κατάστασης (που
δεν είναι διαθέσιμες στο χρήστη). Το Vinum δεν αποθηκεύει
πληροφορίες σχετικές με τους δίσκους στις ρυθμίσεις του: απλώς
ανιχνεύει όλους τους δίσκους για κατατμήσεις που περιέχουν
ετικέτα Vinum. Αυτό επιτρέπει στο Vinum να αναγνωρίσει τους δίσκους
σωστά, ακόμα και αν τους έχει δοθεί διαφορετικό &unix;
αναγνωριστικό (ID).Αυτόματη ΕκκίνησηΤο Gvinum ξεκινάει πάντοτε αυτόματα
μετά την φόρτωση του αρθρώματος μέσω του &man.loader.conf.5;.
Για να φορτώσετε το άρθρωμα του Gvinum κατά
την εκκίνηση, προσθέστε τη γραμμή
geom_vinum_load="YES" στο αρχείο
/boot/loader.conf.Όταν ξεκινάτε το Vinum με την εντολή
gvinum start, το Vinum διαβάζει τη βάση
δεδομένων ρυθμίσεων από έναν δίσκο που βρίσκεται υπό τον έλεγχο
του. Κάτω από φυσιολογικές συνθήκες, κάθε δίσκος περιέχει ένα
όμοιο αντίγραφο της βάσης, έτσι δεν έχει σημασία από ποιο δίσκο θα
γίνει η ανάγνωση. Ωστόσο, μετά από κάποιο απότομο τερματισμό
λειτουργίας, το Vinum θα πρέπει να καθορίσει ποιος δίσκος έχει το
πιο πρόσφατο αντίγραφο και να διαβάσει από εκεί τις ρυθμίσεις.
Μετά θα διορθώσει (αν χρειάζεται) τις ρυθμίσεις και στους
υπόλοιπους δίσκους.Χρήση του Vinum στο Ριζικό Σύστημα ΑρχείωνΣε ένα μηχάνημα στο οποίο έχει γίνει πλήρες mirror στα συστήματα
αρχείων με τη χρήση του Vinum, είναι συνήθως επιθυμητό να γίνει mirror
και στο ριζικό (root) σύστημα αρχείων. Η ρύθμιση αυτή δεν είναι
τόσο απλή όσο σε ένα οποιοδήποτε σύστημα αρχείων, επειδή:Το ριζικό σύστημα αρχείων πρέπει να είναι διαθέσιμο από πολύ
νωρίς κατά τη διαδικασία εκκίνησης, έτσι είναι απαραίτητο οι
υποδομές του Vinum να είναι επίσης διαθέσιμες την ίδια
στιγμή.Ο τόμος που περιέχει το ριζικό σύστημα αρχείων περιέχει επίσης
και τον κώδικα εκκίνησης (bootstrap) και τον πυρήνα, ο οποίος
θα πρέπει να είναι προσβάσιμος από βασικά προγράμματα
του συστήματος (π.χ. το BIOS σε μηχανήματα τύπου PC), τα οποία δεν
γνωρίζουν και δεν μπορούν να μάθουν τις λεπτομέρειες υλοποίησης του
Vinum.Στις επόμενες ενότητες, ο όρος ριζικός τόμος
χρησιμοποιείται γενικά για να περιγράψει τον τόμο του Vinum που
περιέχει το ριζικό σύστημα αρχείων. Είναι γενικά καλή ιδέα να
χρησιμοποιείται το όνομα "root" για αυτό τον τόμο,
αλλά αυτό δεν αποτελεί τεχνική απαίτηση. Όλα τα παραδείγματα εντολών
στις παρακάτω ενότητες χρησιμοποιούν την παραπάνω παραδοχή.Εκκίνηση του Vinum Αρκετά Νωρίς για το Ριζικό Σύστημα
ΑρχείωνΑυτό μπορεί να επιτευχθεί με διάφορους τρόπους:Το Vinum πρέπει να είναι διαθέσιμο στο πυρήνα κατά την
εκκίνηση. Για το λόγο αυτό, η μέθοδος αυτόματης εκκίνησης που
περιγράψαμε στο δεν μπορεί να
χρησιμοποιηθεί σε αυτή την περίπτωση και η παράμετρος
start_vinumδεν θα πρέπει
να τεθεί όταν χρησιμοποιείται η παρακάτω διάταξη. Μια πιθανή
επιλογή είναι να μεταγλωττίσετε στατικά το Vinum στον πυρήνα
ώστε να είναι διαθέσιμο πάντα, αλλά αυτό συνήθως δεν είναι
επιθυμητό. Υπάρχει μια ακόμα διαθέσιμη επιλογή, να ορίσετε να
φορτώνεται το άρθρωμα του πυρήνα μέσω του
/boot/loader () πριν την εκκίνηση του ίδιου του
πυρήνα. Αυτό μπορεί να επιτευχθεί με τη γραμμή:geom_vinum_load="YES"στο αρχείο /boot/loader.conf.Στο Gvinum, όλη η διαδικασία εκκίνησης
γίνεται αυτόματα μετά την φόρτωση του αρθρώματος πυρήνα, έτσι
η διαδικασία που περιγράψαμε παραπάνω είναι και η μόνη που
απαιτείται.Δημιουργία Ριζικού Τόμου Vinum με Δυνατότητα Πρόσβασης από τον
Κώδικα Εκκίνησης (Bootstrap).Καθώς ο τρέχοντας κώδικας εκκίνησης του &os; έχει μέγεθος μόνο
7.5 KB, και είναι ήδη επιφορτισμένος με την ανάγνωση αρχείων (όπως το
/boot/loader) από το σύστημα αρχείων UFS, είναι
πρακτικά αδύνατο να γνωρίζει και τις απαιτούμενες εσωτερικές δομές
του Vinum ώστε να μπορεί να ερμηνεύσει τις αντίστοιχες πληροφορίες
ρύθμισης και να μάθει τις λεπτομέρειες του τόμου εκκίνησης. Για το
λόγο αυτό, χρειάζεται να χρησιμοποιήσουμε κάποια τεχνάσματα ώστε να
δώσουμε στον κώδικα εκκίνησης την ψευδαίσθηση ύπαρξης μιας κανονικής
κατάτμησης "a" που να περιέχει το ριζικό σύστημα
αρχείων.Για να καταστεί αυτό δυνατό, θα πρέπει να πληρούνται ταυτόχρονα
όλες οι παρακάτω προϋποθέσεις όσο αφορά τον τόμο εκκίνησης:Ο τόμος εκκίνησης δεν θα πρέπει να είναι stripe ή
RAID-5.Ο τόμος εκκίνησης δεν θα πρέπει να περιέχει περισσότερους
από ένα συνενωμένους υποδίσκους ανά plex.Σημειώστε ότι είναι συνήθως επιθυμητό και δυνατό να υπάρχουν
πολλαπλά plex, καθένα από τα οποία να είναι αντίγραφο του ριζικού
συστήματος αρχείων. Η διαδικασία εκκίνησης θα χρησιμοποιήσει ωστόσο
μόνο ένα από αυτά τα αντίγραφα για να βρει τον κώδικα εκκίνησης και
όλα τα αρχεία, μέχρι να γίνει τελικά η προσάρτηση του ριζικού
συστήματος αρχείων από τον ίδιο τον πυρήνα. Κάθε μοναδικός υποδίσκος
μέσα σε αυτά τα plex, θα χρειαστεί να διαθέτει τη δική του
ψευτο-κατάτμηση "a" ώστε η συσκευή να είναι
εκκινήσιμη. Δεν είναι απαραίτητο κάθε μια από αυτές τις
ψευτο-κατατμήσεις να βρίσκεται στην ίδια θέση μέσα στην συσκευή,
σε σχέση με άλλες συσκευές που περιέχουν plex με ριζικό σύστημα
αρχείων. Είναι όμως γενικά καλή ιδέα να δημιουργήσετε τους τόμους
του Vinum με τέτοιο τρόπο, ώστε οι συσκευές mirror που προκύπτουν να
είναι συμμετρικές για να αποφύγετε τη σύγχυση.Για να δημιουργηθούν αυτές οι τύπου "a"
κατατμήσεις για κάθε συσκευή που θα περιέχει τμήματα του ριζικού
τόμου, θα πρέπει να γίνουν τα ακόλουθα:Θα πρέπει να εξετάσετε τη θέση (την απόσταση από την αρχή της
συσκευής) και το μέγεθος της συσκευής υποδίσκου η οποία θα είναι
μέρος του ριζικού τόμου, χρησιμοποιώντας την εντολή:&prompt.root; gvinum l -rv rootΣημειώστε ότι στο Vinum οι θέσεις και τα μεγέθη μετρούνται
σε bytes. Θα πρέπει να διαιρέσετε αυτούς τους αριθμούς με το 512
για να βρείτε τους αριθμούς μπλοκ που θα χρησιμοποιήσετε στην
εντολή bsdlabel.Εκτελέστε την εντολή:&prompt.root; bsdlabel -e devnameγια κάθε συσκευή που συμμετέχει στο ριζικό τόμο.
Το devname θα πρέπει να είναι είτε το
όνομα του δίσκου (για παράδειγμα da0)
για δίσκους χωρίς slices (χωρίς δηλ. κατατμήσεις fdisk), ή το
όνομα του slice (για παράδειγμα,
ad0s1).Αν υπάρχει ήδη μια κατάτμηση "a" στη
συσκευή (που πιθανώς περιέχει το ριζικό σύστημα αρχείων που ήταν
σε χρήση πριν χρησιμοποιηθεί το Vinum), θα πρέπει να μετονομαστεί
σε κάτι άλλο ώστε να εξακολουθεί να είναι προσβάσιμο
(σε περίπτωση ανάγκης), αλλά δεν θα χρησιμοποιείται πλέον από
προεπιλογή για την εκκίνηση του συστήματος. Σημειώστε ότι οι
ενεργές κατατμήσεις (όπως για παράδειγμα ένα ριζικό σύστημα
αρχείων το οποίο είναι ήδη προσαρτημένο) δεν μπορούν να
μετονομαστούν. Θα πρέπει να εκτελέσετε την εντολή
χρησιμοποιώντας την επιλογή Fixit του CD
εγκατάστασης, ή να ακολουθήσετε μια διαδικασία δύο βημάτων
(σε περίπτωση που έχετε mirror) ξεκινώντας από τον ένα δίσκο και
μετονομάζοντας τον άλλο.Έπειτα θα πρέπει να προσθέσετε την απόσταση (offset, αν
υπάρχει) της κατάτμησης Vinum αυτής της συσκευής, με την απόσταση
του υποδίσκου του αντίστοιχου ριζικού τόμου της συσκευής. Η τιμή
που θα προκύψει θα είναι η απόσταση ("offset")
για τη νέα κατάτμηση "a". Μπορείτε να πάρετε
αυτούσια την τιμή "size" για αυτή την κατάτμηση
από τον υπολογισμό που κάνατε παραπάνω. Το
"fstype" θα πρέπει να είναι
4.2BSD. Οι τιμές των
"fsize", "bsize",
και "cpg" θα πρέπει να επιλεχθούν με τέτοιο
τρόπο ώστε να ταιριάζουν με το πραγματικό σύστημα αρχείων, αν και
δεν έχουν σημασία στη συγκεκριμένη περίπτωση.Με αυτό τον τρόπο, θα δημιουργηθεί μια νέα κατάτμηση
"a" η οποία επικαλύπτει την κατάτμηση του
Vinum σε αυτή τη συσκευή. Σημειώστε ότι η εντολή
bsdlabel θα επιτρέψει αυτή την επικάλυψη μόνο
αν η κατάτμηση του Vinum έχει επισημανθεί κατάλληλα με fstype
"vinum".Αυτό είναι όλο! Υπάρχει πλέον μια ψευτο-κατάτμηση
"a" σε κάθε συσκευή η οποία έχει αντίγραφο του
ριζικού τόμου. Συνίσταται να επαληθεύσετε ξανά το αποτέλεσμα,
χρησιμοποιώντας μια εντολή όπως την παρακάτω:&prompt.root; fsck -n /dev/devnameaΘα πρέπει να θυμάστε ότι οι θέσεις των αρχείων που περιέχουν
πληροφορίες ελέγχου πρέπει να είναι σχετικές ως προς το ριζικό
σύστημα αρχείων που βρίσκεται στο τόμο του Vinum, και ο οποίος
(κατά την δημιουργία καινούριου ριζικού τόμου Vinum) μπορεί να μην
ταιριάζει με το ριζικό σύστημα αρχείων που είναι ενεργό τη δεδομένη
στιγμή. Θα πρέπει ιδιαίτερα να φροντίσετε τα αρχεία
/etc/fstab και
/boot/loader.conf.Στην επόμενη επανεκκίνηση, ο κώδικας εκκίνησης θα πρέπει να
εντοπίσει τις κατάλληλες πληροφορίες ελέγχου από το νέο (Vinum)
ριζικό σύστημα αρχείων και να δράσει κατάλληλα. Στο τέλος της
διαδικασίας αρχικοποίησης του πυρήνα, και μετά την αναγγελία όλων
των συσκευών, το μήνυμα το οποίο δείχνει την επιτυχή λειτουργία
του εγχειρήματος μοιάζει με το παρακάτω:Mounting root from ufs:/dev/gvinum/rootΠαράδειγμα Ρύθμισης Ριζικού Τόμου με VinumΜετά την ρύθμιση του ριζικού τόμου με το Vinum, η έξοδος της
εντολής gvinum l -rv root θα μοιάζει με την
παρακάτω:
...
Subdisk root.p0.s0:
Size: 125829120 bytes (120 MB)
State: up
Plex root.p0 at offset 0 (0 B)
Drive disk0 (/dev/da0h) at offset 135680 (132 kB)
Subdisk root.p1.s0:
Size: 125829120 bytes (120 MB)
State: up
Plex root.p1 at offset 0 (0 B)
Drive disk1 (/dev/da1h) at offset 135680 (132 kB)
Οι τιμές που θα πρέπει να σημειώσετε είναι το
135680 για την απόσταση (offset σε σχέση με την
κατάτμηση /dev/da0h). Αυτό
μεταφράζεται σε 265 block των 512 byte για την εντολή
bsdlabel. Παρόμοια, το μέγεθος του ριζικού τόμου
είναι 245760 μπλοκ των 512 byte. Το /dev/da1h, το οποίο περιέχει το
δεύτερο αντίγραφο του ριζικού τόμου, έχει συμμετρική ρύθμιση.Το bsdlabel για αυτές τις συσκευές θα μοιάζει με το
παρακάτω:
...
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*)
c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*)
h: 71771672 16 vinum # (Cyl. 0*- 4467*)Μπορείτε να παρατηρήσετε ότι η παράμετρος
"size" για την ψευτο-κατάτμηση
"a" ταιριάζει με την τιμή που δείξαμε παραπάνω,
ενώ η τιμή της παραμέτρου "offset" είναι το
άθροισμα της απόστασης ανάμεσα στην κατάτμηση Vinum
"h" και της απόστασης αυτής της κατάτμησης μέσα
στη συσκευή (ή το slice). Πρόκειται για μια τυπική ρύθμιση που είναι
απαραίτητη για να αποφευχθούν τα προβλήματα που περιγράφηκαν στο
. Μπορείτε επίσης να δείτε ότι
ολόκληρη η κατάτμηση "a" περιέχεται αυτούσια
μέσα στην "h" η οποία και περιέχει όλες τις
πληροφορίες Vinum της συσκευής.Σημειώστε ότι στο παραπάνω παράδειγμα η συσκευή χρησιμοποιείται
εξ' ολοκλήρου από το Vinum, και δεν υπάρχει κάποιο κατάλοιπο ριζικής
κατάτμησης από παλιότερη χρήση. Αυτό συμβαίνει επειδή πρόκειται για
δίσκο που χρησιμοποιήθηκε από την αρχή ως μέρος ενός συστήματος
Vinum.Αντιμετώπιση ΠροβλημάτωνΣε περίπτωση προβλήματος, θα χρειαστείτε κάποια μέθοδο
αντιμετώπισης. Η παρακάτω λίστα περιέχει μερικά από τα πιο
συνηθισμένα προβλήματα και τις λύσεις τους.Ο Κώδικας Εκκίνησης Φορτώνεται, Αλλά το Σύστημα δεν
ΕκκινείΑν για οποιοδήποτε λόγο το σύστημα δεν συνεχίζει την εκκίνηση,
θα πρέπει να διακόψετε την εκκίνηση μέσα στο χρονικό διάστημα των 10
δευτερολέπτων που εμφανίζεται ο φορτωτής εκκίνησης, πιέζοντας το
πλήκτρο space. Μπορείτε να εξετάσετε τις τιμές
των μεταβλητών του φορτωτή
(όπως η vinum.autostart), χρησιμοποιώντας την
εντολή show, και να τις αλλάξετε με τις εντολές
set ή unset.Αν το μοναδικό πρόβλημα ήταν η απουσία του αρθρώματος
Vinum στη λίστα της αυτόματης φόρτωσης, αρκεί να δώσετε την
εντολή load geom_vinum.Όταν είστε έτοιμος, η εκκίνηση μπορεί να συνεχιστεί με την
εντολή boot -as. Οι επιλογές
θα οδηγήσουν τον πυρήνα να ρωτήσει για το
ριζικό σύστημα αρχείων που πρόκειται να προσαρτηθεί
(), και η διαδικασία εκκίνησης θα σταματήσει σε
κατάσταση ενός χρήστη (single user, λόγω της επιλογής
), όπου η προσάρτηση του ριζικού συστήματος
είναι μόνο για ανάγνωση. Με τον τρόπο αυτό, ακόμα και αν έχει
προσαρτηθεί μόνο ένα plex ενός τόμου που αποτελείται από πολλά,
δεν υπάρχει κίνδυνος να δημιουργηθεί ασυνέπεια δεδομένων μεταξύ
των plex.Στην προτροπή που εμφανίζεται για το ριζικό σύστημα αρχείων που
πρόκειται να προσαρτηθεί, μπορείτε να εισάγετε οποιαδήποτε
συσκευή περιέχει ένα έγκυρο ριζικό σύστημα αρχείων. Αν το
/etc/fstab έχει ρυθμιστεί σωστά, η προεπιλογή
θα είναι κάτι σαν ufs:/dev/gvinum/root.
Μια τυπική εναλλακτική τοποθεσία θα μπορούσε να είναι το
ufs:da0d, μια υποθετική κατάτμηση
που περιέχει το παλιό (πριν το Vinum) ριζικό σύστημα αρχείων.
Αν πρόκειται να χρησιμοποιήσετε μια
από τις τύπου "a" ψευτο-κατατμήσεις που είναι
στην πραγματικότητα υποδίσκοι της ριζικής συσκευής του Vinum, θα
πρέπει να είστε προσεκτικός, γιατί αν χρησιμοποιείτε mirror θα
γίνει προσάρτηση μόνο του ενός τμήματος της συσκευής.
Αν πρόκειται να προσαρτήσετε αυτή τη συσκευή αργότερα με
δυνατότητα εγγραφής-ανάγνωσης, είναι απαραίτητο να αφαιρέσετε τα
υπόλοιπα plex του ριζικού τόμου του Vinum, καθώς αυτά θα περιέχουν
δεδομένα που δεν είναι σε συγχρονισμό με την κατάτμηση που έχετε
ήδη προσαρτήσει.Φορτώνει Μόνο ο Βασικός Κώδικας ΕκκίνησηςΑν η φόρτωση του /boot/loader δεν είναι
επιτυχής, αλλά ο βασικός κώδικας εκκίνησης (primary bootstrap)
φορτώνεται (κάτι που μπορείτε να διαπιστώσετε ελέγχοντας αν
εμφανίζεται μια παύλα στην πάνω αριστερή γωνία της οθόνης κατά το
αρχικό στάδιο εκκίνησης), μπορείτε να προσπαθήσετε να διακόψετε
τη βασική εκκίνηση σε αυτό το σημείο χρησιμοποιώντας το πλήκτρο
space. Με αυτό τον τρόπο, η εκκίνηση θα
σταματήσει στο στάδιο δύο (δείτε το ).
Μπορείτε εδώ να προσπαθήσετε να εκκινήσετε από μια εναλλακτική
κατάτμηση, π.χ. την κατάτμηση που περιείχε το ριζικό σύστημα
αρχείων που μετακινήσατε από το "a" όταν
ξεκινήσατε να χρησιμοποιείτε το Vinum.Δεν Γίνεται Καμιά Εκκίνηση, ο Κώδικας Εκκίνησης Προκαλεί
PanicΑυτό μπορεί να συμβεί αν ο κώδικας εκκίνησης καταστραφεί
από την εγκατάσταση του Vinum. Δυστυχώς, το Vinum την τρέχουσα
στιγμή αφήνει μόνο 4 KB ελεύθερα στην αρχή της κατάτμησης του
πριν αρχίσει να γράφει τις πληροφορίες της επικεφαλίδας του.
Ωστόσο τα στάδια ένα και δύο καθώς και το bsdlabel που
ενσωματώνεται ανάμεσα τους, χρειάζονται 8 KB. Έτσι, αν μια
κατάτμηση Vinum ξεκίναγε στην θέση 0 μέσα σε ένα slice ή δίσκο που
προορίζονταν για εκκίνηση, η εγκατάσταση του Vinum θα κατέστρεφε
τον κώδικα εκκίνησης.Με τον ίδιο τρόπο, αν η παραπάνω κατάσταση επιδιορθωθεί για
παράδειγμα ξεκινώντας από ένα CD Fixit και
επανεγκαθιστώντας τον κώδικα εκκίνησης με τη βοήθεια της εντολής
bsdlabel -B (όπως περιγράφεται στο ), ο κώδικας εκκίνησης θα καταστρέψει την
επικεφαλίδα του Vinum, το οποίο δεν θα μπορεί πλέον να εντοπίσει
τους δίσκους του. Αν και το παραπάνω δεν καταστρέφει τα δεδομένα
ρυθμίσεων ή τα πραγματικά δεδομένα που υπάρχουν στους τόμους (και
η ανάκτηση τους είναι δυνατή αν δώσετε ξανά ακριβώς τις ίδιες
ρυθμίσεις στο Vinum με τις αρχικές σας), η κατάσταση διορθώνεται
αρκετά δύσκολα. Θα πρέπει να μετακινήσετε ολόκληρη την κατάτμηση
του Vinum τουλάχιστον κατά 4 KB ώστε να μην υπάρχει σύγκρουση
μεταξύ της επικεφαλίδας του Vinum και του κώδικα εκκίνησης.