e8e2dfdbab
is appended during rendering - For the same reason, do not specify format either - Add constraints to enforce this
1353 lines
59 KiB
XML
1353 lines
59 KiB
XML
<?xml version="1.0" encoding="iso-8859-7"?>
|
||
<!--
|
||
|
||
Το Εγχειρίδιο του FreeBSD: Ο Διαχειριστής Τόμων Vinum
|
||
|
||
Γράφτηκε από τον:
|
||
Greg Lehey (grog at lemis dot com)
|
||
|
||
Ενσωματώθηκε στο Εγχειρίδιο του FreeBSD από τους:
|
||
Hiten Pandya <hmp@FreeBSD.org>
|
||
Tom Rhodes <trhodes@FreeBSD.org>
|
||
|
||
$FreeBSD$
|
||
|
||
%SOURCE% en_US.ISO8859-1/books/handbook/vinum/chapter.xml
|
||
%SRCID% 38826
|
||
|
||
-->
|
||
|
||
<chapter id="vinum-vinum">
|
||
<chapterinfo>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Greg</firstname>
|
||
<surname>Lehey</surname>
|
||
<contrib>Αρχική συνεισφορά του </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
</chapterinfo>
|
||
|
||
<title>Ο Διαχειριστής Τόμων Vinum</title>
|
||
|
||
<sect1 id="vinum-synopsis">
|
||
<title>Σύνοψη</title>
|
||
|
||
<para>Οτιδήποτε δίσκους και αν έχετε, πάντα υπάρχουν πιθανά
|
||
προβλήματα:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Μπορεί να είναι πολύ μικροί.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Μπορεί να είναι πολύ αργοί.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Μπορεί να μην είναι αρκετά αξιόπιστοι.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Για τα προβλήματα αυτά, έχουν προταθεί και υλοποιηθεί διάφορες
|
||
λύσεις. Ένας συχνά χρησιμοποιούμενος τρόπος προστασίας, είναι με την
|
||
χρήση πολλαπλών και ορισμένες φορές περιττών (redundant) δίσκων. Εκτός
|
||
από την υποστήριξη που παρέχεται για συσκευές (κάρτες και ελεγκτές)
|
||
hardware RAID, το βασικό σύστημα του &os; περιλαμβάνει το διαχειριστή
|
||
τόμων (volume manager) Vinum, ένα πρόγραμμα οδήγησης τύπου
|
||
μπλοκ το οποίο υλοποιεί εικονικούς δίσκους.
|
||
Το <emphasis>Vinum</emphasis> αποκαλείται και
|
||
<emphasis>Διαχειριστής Τόμων</emphasis>, και είναι ένας οδηγός
|
||
εικονικών δίσκων που αντιμετωπίζει τα παραπάνω τρία προβλήματα.
|
||
Το Vinum παρέχει καλύτερη ευελιξία, απόδοση και αξιοπιστία σε σχέση με
|
||
τα παραδοσιακά συστήματα αποθήκευσης, και υλοποιεί τα μοντέλα RAID-0,
|
||
RAID-1 και RAID-5, τόσο μεμονωμένα, όσο και σε συνδυασμό μεταξύ
|
||
τους.</para>
|
||
|
||
<para>Το κεφάλαιο αυτό παρέχει μια επισκόπηση των πιθανών προβλημάτων των
|
||
παραδοσιακών συστημάτων αποθήκευσης, και μια εισαγωγή στο Διαχειριστή
|
||
Τόμων Vinum.</para>
|
||
|
||
<note>
|
||
<para>Ξεκινώντας από το &os; 5 και μετά, το Vinum ξαναγράφτηκε
|
||
ώστε να ενσωματωθεί στην αρχιτεκτονική GEOM (<xref linkend="GEOM"/>),
|
||
διατηρώντας ωστόσο τις αρχικές ιδέες, ορολογία, και τη μορφή των
|
||
μετα-δεδομένων (metadata) που αποθηκεύονται στον δίσκο.
|
||
Η νέα αυτή εκδοχή ονομάζεται <emphasis>gvinum</emphasis> (από το
|
||
<emphasis>GEOM vinum</emphasis>). Το ακόλουθο κείμενο αναφέρεται
|
||
συνήθως στο <emphasis>Vinum</emphasis> ως αφηρημένη έννοια, άσχετα με
|
||
τις λεπτομέρειες της υλοποίησης. Όλες οι εντολές θα πρέπει τώρα να
|
||
καλούνται με τη χρήση της <command>gvinum</command>,
|
||
το άρθρωμα πυρήνα (kernel module) έχει μετονομαστεί σε
|
||
<filename>geom_vinum.ko</filename> από <filename>vinum.ko</filename>,
|
||
και όλα τα αρχεία συσκευών βρίσκονται στον κατάλογο
|
||
<filename class="directory">/dev/gvinum</filename> αντί για
|
||
<filename class="directory">/dev/vinum</filename>. Από το
|
||
&os; 6 και μετά, η παλιά υλοποίηση του Vinum δεν περιλαμβάνεται
|
||
πλέον στο βασικό σύστημα.</para>
|
||
</note>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-intro">
|
||
<title>Οι Δίσκοι Είναι Πολύ Μικροί</title>
|
||
|
||
<indexterm><primary>Vinum</primary></indexterm>
|
||
<indexterm><primary>RAID</primary>
|
||
<secondary>software</secondary></indexterm>
|
||
|
||
<para>Οι δίσκοι γίνονται ολοένα και μεγαλύτεροι, αλλά με τον ίδιο ρυθμό
|
||
αυξάνονται επίσης και οι απαιτήσεις μας σε αποθηκευτικό χώρο. Πολλές
|
||
φορές θα βρεθείτε σε θέση να χρειάζεστε ένα σύστημα αρχείων μεγαλύτερο
|
||
από τους δίσκους που έχετε διαθέσιμους. Σίγουρα το πρόβλημα αυτό δεν
|
||
είναι τόσο έντονο όσο πριν δέκα χρόνια, αλλά εξακολουθεί να υπάρχει.
|
||
Μερικά συστήματα επιλύουν αυτό το πρόβλημα, δημιουργώντας μια εικονική
|
||
συσκευή που αποθηκεύει τα δεδομένα σε ένα αριθμό διακριτών
|
||
δίσκων.</para>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-access-bottlenecks">
|
||
<title>Καθυστερήσεις Πρόσβασης</title>
|
||
|
||
<para>Στα μοντέρνα συστήματα, υπάρχει συχνά ανάγκη πρόσβασης δεδομένων
|
||
από πολλές διεργασίες ταυτόχρονα. Για παράδειγμα, μεγάλοι εξυπηρετητές
|
||
FTP ή HTTP μπορεί να έχουν ανά πάσα στιγμή χιλιάδες ταυτόχρονες
|
||
εξωτερικές συνδέσεις και να διαθέτουν πολλαπλές διεπαφές 100 Mbit/s
|
||
οι οποίες ξεπερνάνε κατά πολύ τις δυνατότητες μεταφοράς δεδομένων των
|
||
περισσότερων σκληρών δίσκων.</para>
|
||
|
||
<para>Τα τρέχοντα μοντέλα σκληρών δίσκων μπορούν να μεταφέρουν δεδομένα
|
||
σειριακά με ταχύτητα μέχρι και 70 MB/s, αλλά η τιμή αυτή έχει μικρή
|
||
σημασία σε ένα περιβάλλον όπου πολλές ανεξάρτητες διεργασίες χρειάζονται
|
||
πρόσβαση στον ίδιο δίσκο. Σε τέτοιες περιπτώσεις, κάθε διεργασία μπορεί
|
||
να επιτύχει μόνο ένα μικρό ποσοστό της μέγιστης αυτής απόδοσης. Είναι
|
||
πιο ενδιαφέρον να δούμε το πρόβλημα από την πλευρά του υποσυστήματος
|
||
δίσκων: ο σημαντικός παράγοντας είναι ο φόρτος στον οποίο υποβάλλεται
|
||
το υποσύστημα κατά τη διάρκεια μιας μεταφοράς. Με άλλα λόγια, ο χρόνος
|
||
που παραμένουν απασχολημένοι οι δίσκοι εξαιτίας της μεταφοράς.</para>
|
||
|
||
<para>Σε κάθε μεταφορά δεδομένων, ο δίσκος θα πρέπει πρώτα να τοποθετήσει
|
||
τις κεφαλές στο σωστό σημείο, να περιμένει να περάσει ο πρώτος τομέας
|
||
κάτω από την κεφαλή ανάγνωσης, και έπειτα να εκτελέσει τη μεταφορά.
|
||
Οι ενέργειες αυτές μπορούν να θεωρηθούν ατομικές: δεν έχει νόημα να
|
||
προσπαθήσουμε να τις διακόψουμε.</para>
|
||
|
||
<para><anchor id="vinum-latency"/> Ας θεωρήσουμε μια τυπική μεταφορά
|
||
περίπου 10 kB. Η τρέχουσα γενιά δίσκων υψηλής απόδοσης μπορεί να
|
||
τοποθετήσει τις κεφαλές στη σωστή θέση σε περίπου 3.5 ms. Οι πιο
|
||
γρήγοροι δίσκοι έχουν ταχύτητα περιστροφής 15.000 στροφές το λεπτό,
|
||
έτσι ο μέσος χρόνος καθυστέρησης περιστροφής (μισή περιστροφή) είναι
|
||
2 ms. Με 70 MB/s, η μεταφορά αυτή καθ' αυτή θα χρειαστεί
|
||
περίπου 150 μs, σχεδόν τίποτα σε σχέση με το χρόνο που
|
||
χρειάζεται για την τοποθέτηση της κεφαλής στο σωστό σημείο.
|
||
Στην περίπτωση αυτή, ο πραγματικός ρυθμός μεταφοράς πέφτει σε λίγο
|
||
περισσότερο από ένα 1 ΜΒ/s και είναι εμφανές ότι εξαρτάται σε
|
||
μεγάλο βαθμό από το μέγεθος των δεδομένων που μεταφέρονται.</para>
|
||
|
||
<para>Η παραδοσιακή και προφανής λύση σε αυτό το πρόβλημα, είναι να
|
||
προσθέσουμε <quote>περισσότερους δίσκους</quote>: αντί να
|
||
χρησιμοποιήσουμε ένα μεγάλο δίσκο, να βάλουμε πολλούς μικρότερους με
|
||
τον ίδιο τελικό αποθηκευτικό χώρο. Κάθε δίσκος έχει δυνατότητα να
|
||
μετακινεί τις κεφαλές και να μεταφέρει δεδομένα ανεξάρτητα από τους
|
||
άλλους, έτσι η πραγματική διαμεταγωγή αυξάνει αναλογικά με το πλήθος
|
||
των δίσκων που χρησιμοποιούνται.</para>
|
||
|
||
<para>Η πραγματική αύξηση της διαμεταγωγής είναι φυσικά μικρότερη από το
|
||
πλήθος των δίσκων που χρησιμοποιούνται: αν και κάθε δίσκος είναι ικανός
|
||
να μεταφέρει δεδομένα παράλληλα με τους άλλους, δεν υπάρχει τρόπος να
|
||
εξασφαλίσουμε ότι οι αιτήσεις μεταφοράς κατανέμονται ομοιόμορφα σε όλους
|
||
τους δίσκους. Είναι αναπόφευκτο ότι το φορτίο σε ένα δίσκο θα είναι
|
||
μεγαλύτερο από το φορτίο σε κάποιο άλλο.</para>
|
||
|
||
<indexterm>
|
||
<primary>disk concatenation</primary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>Vinum</primary>
|
||
<secondary>concatenation</secondary>
|
||
</indexterm>
|
||
|
||
<para>Η ομοιομορφία κατανομής του φορτίου στους δίσκους, εξαρτάται σε
|
||
μεγάλο βαθμό από τον τρόπο που έχουν μοιραστεί τα δεδομένα σε αυτούς.
|
||
Στην παρακάτω συζήτηση, είναι βολικό να σκεφτόμαστε τον αποθηκευτικό
|
||
χώρο ενός δίσκου ως ένα μεγάλο αριθμό από τομείς στους οποίους έχουμε
|
||
πρόσβαση με βάση ένα αριθμό, ακριβώς όπως οι σελίδες σε ένα βιβλίο.
|
||
Η πιο προφανής μέθοδος είναι να χωρίσουμε τον εικονικό δίσκο σε ομάδες
|
||
από συνεχόμενους τομείς, όπου καθεμία έχει το μέγεθος του πραγματικού
|
||
ανεξάρτητου φυσικού δίσκου, και να τις αποθηκεύσουμε με αυτό τον τρόπο,
|
||
περίπου σαν να παίρναμε ένα μεγάλο βιβλίο και να το χωρίζαμε σε
|
||
μικρότερους τόμους. Η μέθοδος αυτή ονομάζεται
|
||
<emphasis>συνένωση (concatenation)</emphasis> και έχει το πλεονέκτημα
|
||
ότι δεν απαιτεί τα μεγέθη των δίσκων να έχουν κάποια σχέση μεταξύ τους.
|
||
Λειτουργεί πολύ καλά όταν η πρόσβαση στον εικονικό δίσκο είναι
|
||
ομοιόμορφα κατανεμημένη σε όλη την περιοχή διευθύνσεων του. Όταν η
|
||
πρόσβαση συγκεντρώνεται σε μια μικρότερη περιοχή, η βελτίωση είναι
|
||
μικρότερη. Το <xref linkend="vinum-concat"/> δείχνει την ακολουθία με
|
||
την οποία γίνεται η κατανομή των θέσεων αποθήκευσης όταν
|
||
χρησιμοποιείται η συνένωση.</para>
|
||
|
||
<para>
|
||
<figure id="vinum-concat">
|
||
<title>Οργάνωση Συνένωσης</title>
|
||
<graphic fileref="vinum/vinum-concat"/>
|
||
</figure>
|
||
</para>
|
||
|
||
<indexterm>
|
||
<primary>disk striping</primary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>Vinum</primary>
|
||
<secondary>striping</secondary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>RAID</primary>
|
||
</indexterm>
|
||
|
||
<para>Ένας εναλλακτικός τρόπος αποθήκευσης, είναι να χωριστεί η περιοχή
|
||
διευθύνσεων σε μικρότερα τμήματα ίσου μεγέθους τα οποία να αποθηκεύονται
|
||
σειριακά σε διαφορετικές συσκευές. Για παράδειγμα, οι πρώτοι 256 τομείς
|
||
μπορεί να είναι αποθηκευμένοι στον πρώτο δίσκο, οι επόμενοι 256 στον
|
||
επόμενο δίσκο, κ.ο.κ. Μετά την χρήση και του τελευταίου δίσκου,
|
||
η διαδικασία επαναλαμβάνεται μέχρι να γεμίσουν όλοι οι δίσκοι. Αυτή
|
||
η μέθοδος ονομάζεται <emphasis>striping</emphasis> ή
|
||
<acronym>RAID-0</acronym>.
|
||
|
||
<footnote>
|
||
<para>Το <acronym>RAID</acronym> σημαίνει <emphasis>Redundant
|
||
Array of Inexpensive Disks</emphasis> και παρέχει διάφορες μορφές
|
||
ανοχής σε σφάλματα, αν και στην παραπάνω χρήση ο όρος είναι
|
||
κάπως παραπλανητικός: το <acronym>RAID-0</acronym> δεν παρέχει καμιά
|
||
τέτοια προστασία δεδομένων.</para>
|
||
</footnote>
|
||
|
||
Το striping απαιτεί κάπως περισσότερη προσπάθεια για τον εντοπισμό των
|
||
δεδομένων και μπορεί να προκαλέσει μεγαλύτερο φορτίο I/O όταν μια
|
||
μεταφορά κατανέμεται σε πολλαπλούς δίσκους, αλλά από την άλλη
|
||
επιτυγχάνει μεγαλύτερο σταθερό φορτίο σε κάθε δίσκο.
|
||
Το <xref linkend="vinum-striped"/> δείχνει τη σειρά με την οποία
|
||
χρησιμοποιούνται οι μονάδες αποθήκευσης σε μια οργάνωση τύπου
|
||
stripe.</para>
|
||
|
||
<para>
|
||
<figure id="vinum-striped">
|
||
<title>Striped Organization</title>
|
||
<graphic fileref="vinum/vinum-striped"/>
|
||
</figure>
|
||
</para>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-data-integrity">
|
||
<title>Ακεραιότητα Δεδομένων</title>
|
||
|
||
<para>Το τελευταίο πρόβλημα με την τρέχουσα τεχνολογία δίσκων, είναι
|
||
η αναξιοπιστία τους. Αν και τα τελευταία χρόνια η αξιοπιστία των
|
||
δίσκων έχει αυξηθεί σημαντικά, εξακολουθούν να είναι το εξάρτημα με
|
||
το μεγαλύτερο ρυθμό αποτυχίας στους εξυπηρετητές. Όταν αποτύχει ένας
|
||
δίσκος, τα αποτελέσματα μπορεί να είναι καταστροφικά: η αντικατάσταση
|
||
ενός χαλασμένου δίσκου και η αντιγραφή των δεδομένων στο νέο μπορεί
|
||
να διαρκέσει μέρες.</para>
|
||
|
||
<indexterm>
|
||
<primary>disk mirroring</primary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>Vinum</primary>
|
||
<secondary>mirroring</secondary>
|
||
</indexterm>
|
||
<indexterm>
|
||
<primary>RAID-1</primary>
|
||
</indexterm>
|
||
|
||
<para>Ο παραδοσιακός τρόπος αντιμετώπισης αυτού του προβλήματος είναι το
|
||
<emphasis>mirroring</emphasis> (καθρεπτισμός), η διατήρηση δηλαδή δύο
|
||
αντιγράφων των δεδομένων σε διαφορετικούς δίσκους. Με την εφεύρεση των
|
||
διάφορων επιπέδων <acronym>RAID</acronym>, η τεχνική αυτή έγινε επίσης
|
||
γνωστή με την ονομασία <acronym>RAID επιπέδου 1</acronym> ή απλώς
|
||
<acronym>RAID-1</acronym>. Κάθε εγγραφή στον τόμο γίνεται και στους
|
||
δύο δίσκους. Η ανάγνωση μπορεί να γίνει από οποιοδήποτε δίσκο, έτσι
|
||
αν ένας από τους δύο αποτύχει, τα δεδομένα εξακολουθούν να είναι
|
||
διαθέσιμα στον άλλο.</para>
|
||
|
||
<para>Το mirroring έχει δύο προβλήματα:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Το κόστος. Απαιτεί διπλάσιο κόστος από οποιαδήποτε λύση δεν
|
||
προσφέρει αυτή τη λειτουργία.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Τη μείωση της απόδοσης. Οι εγγραφές πρέπει να
|
||
γίνονται και στους δύο δίσκους, καταναλώνοντας έτσι το διπλάσιο
|
||
εύρος ζώνης σε σχέση με ένα τόμο που δεν χρησιμοποιεί mirror.
|
||
Η ανάγνωση δεν υποφέρει από το ίδιο πρόβλημα. Μάλιστα φαίνεται
|
||
να είναι και γρηγορότερη.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para><indexterm><primary>RAID-5</primary></indexterm>Μια εναλλακτική
|
||
λύση είναι το <emphasis>parity</emphasis> (ισοτιμία), το οποίο
|
||
υλοποιείται στα επίπεδα 2, 3, 4 και 5 του <acronym>RAID</acronym>.
|
||
Από τα επίπεδα αυτά, το <acronym>RAID-5</acronym> είναι το πιο
|
||
ενδιαφέρον. Ο τρόπος που υλοποιείται στο Vinum, είναι μια παραλλαγή
|
||
της οργάνωσης δεδομένων που χρησιμοποιείται στο stripe, με τη διαφορά
|
||
ότι ένα μπλοκ από κάθε stripe χρησιμοποιείται για να αποθηκεύει την
|
||
ισοτιμία ενός άλλου μπλοκ. Στο Vinum, μια συστοιχία
|
||
<acronym>RAID-5</acronym>, είναι παρόμοια με μια συστοιχία stripe,
|
||
εκτός από το γεγονός ότι υλοποιεί <acronym>RAID-5</acronym> καθώς κάθε
|
||
stripe περιέχει και μπλοκ ισοτιμίας. Η τοποθεσία του μπλοκ ισοτιμίας,
|
||
αλλάζει από το ένα stripe στο επόμενο, κάτι που απαιτείται από το
|
||
<acronym>RAID-5</acronym>. Οι αριθμοί στα μπλοκ δεδομένων αναφέρονται
|
||
στη σχετική αρίθμηση τους.</para>
|
||
|
||
<para>
|
||
<figure id="vinum-raid5-org">
|
||
<title>RAID-5 Organization</title>
|
||
<graphic fileref="vinum/vinum-raid5-org"/>
|
||
</figure>
|
||
</para>
|
||
|
||
<para>Σε σύγκριση με το mirror, το <acronym>RAID-5</acronym> έχει το
|
||
πλεονέκτημα να απαιτεί σημαντικά λιγότερο χώρο αποθήκευσης. Η ταχύτητα
|
||
ανάγνωσης είναι ίδια με το stripe, αλλά η εγγραφή είναι σημαντικά πιο
|
||
αργή, περίπου το 25% της απόδοσης κατά την ανάγνωση. Αν ένας δίσκος
|
||
χαλάσει, η συστοιχία εξακολουθεί να λειτουργεί σε ελαττωμένη (degraded)
|
||
κατάσταση: η ανάγνωση από τους δίσκους που λειτουργούν κανονικά
|
||
συνεχίζεται απροβλημάτιστα, αλλά η ανάγνωση δεδομένων που βρίσκονταν
|
||
στον προβληματικό δίσκο πρέπει να επαναϋπολογιστεί με βάση τα
|
||
αντίστοιχα μπλοκ ισοτιμίας που βρίσκονται σε όλους τους άλλους
|
||
δίσκους.</para>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-objects">
|
||
<title>Αντικείμενα του Vinum</title>
|
||
|
||
<para>Για την αντιμετώπιση των παραπάνω προβλημάτων, το Vinum υλοποιεί μια
|
||
ιεραρχία αντικειμένων τεσσάρων επιπέδων:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Το πλέον ορατό αντικείμενο είναι ο εικονικός δίσκος, ο οποίος
|
||
καλείται και <emphasis>τόμος (volume)</emphasis>. Οι τόμοι έχουν
|
||
ουσιαστικά τις ίδιες ιδιότητες με ένα δίσκο του &unix;, αν και
|
||
υπάρχουν κάποιες μικρές διαφορές. Δεν υπάρχουν περιορισμοί όσο
|
||
αφορά το μέγεθος τους.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Οι τόμοι αποτελούνται από <emphasis>plex</emphasis>, και κάθε
|
||
ένα από αυτά αντιπροσωπεύει το συνολικό χώρο διευθύνσεων ενός
|
||
τόμου. Αυτό το επίπεδο στην ιεραρχία παρέχει τη δυνατότητα
|
||
redundancy. Μπορείτε να σκεφτείτε τα plex ως μεμονωμένους δίσκους
|
||
σε μια συστοιχία mirror, όπου κάθε ένα περιέχει τα ίδια
|
||
δεδομένα.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Καθώς το Vinum υπάρχει μέσα στο πλαίσιο λειτουργιών του &unix;
|
||
που χρησιμοποιείται για την αποθήκευση σε δίσκους, θα μπορούσε
|
||
να χρησιμοποιήσει τις κατατμήσεις του &unix; ως το δομικό στοιχείο
|
||
για τη δημιουργία των plex. Στην πραγματικότητα, η λογική αυτή
|
||
αποδεικνύεται ιδιαίτερα περιοριστική: οι δίσκοι στο &unix; μπορούν
|
||
να έχουν περιορισμένο αριθμό κατατμήσεων. Αντίθετα, το Vinum
|
||
υποδιαιρεί μια μόνο κατάτμηση του &unix;
|
||
(τον <emphasis>οδηγό</emphasis>) σε συνεχόμενες περιοχές που
|
||
καλούνται <emphasis>υποδίσκοι (subdisks)</emphasis>. Οι υποδίσκοι
|
||
χρησιμοποιούνται ως τα δομικά στοιχεία για τα plex.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Οι υποδίσκοι βρίσκονται σε <emphasis>οδηγούς</emphasis> Vinum,
|
||
που τη δεδομένη στιγμή είναι κατατμήσεις του &unix;. Οι οδηγοί του
|
||
Vinum μπορούν να περιέχουν οποιοδήποτε αριθμό από υποδίσκους. Με
|
||
εξαίρεση μια μικρή περιοχή στην αρχή του δίσκου (η οποία
|
||
χρησιμοποιείται για την αποθήκευση δεδομένων ρύθμισης και
|
||
κατάστασης) όλος ο υπόλοιπος οδηγός είναι διαθέσιμος για αποθήκευση
|
||
δεδομένων.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Οι παρακάτω ενότητες περιγράφουν τον τρόπο με τον οποίο αυτά τα
|
||
αντικείμενα παρέχουν την λειτουργικότητα που απαιτείται από το
|
||
Vinum.</para>
|
||
|
||
<sect2>
|
||
<title>Μέγεθος Τόμου</title>
|
||
|
||
<para>Τα plex μπορούν να περιλαμβάνουν πολλαπλούς υποδίσκους, που
|
||
κατανέμονται σε όλους τους οδηγούς του Vinum. Σαν αποτέλεσμα, το
|
||
μέγεθος ενός συγκεκριμένου δίσκου δεν περιορίζει το μέγεθος ούτε του
|
||
plex, ούτε του τόμου.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Πλεονάζουσα (Redundant) Αποθήκευση Δεδομένων</title>
|
||
|
||
<para>Το Vinum υλοποιεί το mirroring προσαρτώντας πολλαπλά plex σε
|
||
ένα τόμο. Κάθε plex είναι μια αναπαράσταση των δεδομένων ενός τόμου.
|
||
Ένας τόμος μπορεί να περιέχει μεταξύ ενός και οκτώ plex.</para>
|
||
|
||
<para>Αν και ένα plex αντιπροσωπεύει τα πλήρη δεδομένα ενός τόμου,
|
||
είναι πιθανόν κάποια μέρη της αναπαράστασης να λείπουν από το φυσικό
|
||
μέσο, είτε επειδή έχει σχεδιαστεί με αυτό το τρόπο (αν δεν έχει
|
||
οριστεί υποδίσκος για κάποια τμήματα του plex) ή από πρόβλημα (ως
|
||
αποτέλεσμα της αποτυχίας κάποιου δίσκου). Όσο υπάρχει τουλάχιστον
|
||
ένα plex που μπορεί να παρέχει τα δεδομένα για την πλήρη περιοχή
|
||
διευθύνσεων του τόμου, ο τόμος είναι πλήρως λειτουργικός.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Θέματα Απόδοσης</title>
|
||
|
||
<para>Το Vinum υλοποιεί τόσο συνένωση όσο και striping σε επίπεδο
|
||
plex:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Ένα <emphasis>plex συνένωσης (concatenated)</emphasis>
|
||
χρησιμοποιεί την περιοχή διευθύνσεων κάθε υποδίσκου με τη
|
||
σειρά.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Ένα <emphasis>striped plex</emphasis> γράφει τα δεδομένα
|
||
σε λωρίδες (stripes) που κατανέμονται σε κάθε υποδίσκο. Όλοι οι
|
||
υποδίσκοι πρέπει να έχουν το ίδιο μέγεθος και πρέπει να υπάρχουν
|
||
τουλάχιστον δύο υποδίσκοι, για να ξεχωρίζουν σε σχέση με το plex
|
||
συνένωσης.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Είδη Οργάνωσης Plex</title>
|
||
|
||
<para>Η έκδοση του Vinum που παρέχεται με το &os; &rel.current;
|
||
υλοποιεί δύο είδη plex:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Τα plex συνένωσης προσφέρουν τη μεγαλύτερη ευελιξία: μπορούν
|
||
να περιέχουν οποιοδήποτε αριθμό υποδίσκων, και οι υποδίσκοι αυτοί
|
||
μπορεί να είναι διαφορετικού μεγέθους. Το plex μπορεί να
|
||
επεκταθεί προσθέτοντας περισσότερους υποδίσκους. Χρειάζονται
|
||
λιγότερο χρόνο <acronym>CPU</acronym> σε σχέση με τα stripes, αν
|
||
και η διαφορά στη χρήση της <acronym>CPU</acronym> δεν είναι
|
||
μετρήσιμη. Από την άλλη μεριά, είναι πιο επιρρεπή σε
|
||
μη-ισορροπημένη λειτουργία, όπου ένας δίσκος είναι πολύ ενεργός
|
||
και οι υπόλοιποι αδρανούν.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Το μεγαλύτερο πλεονέκτημα των stripes
|
||
(<acronym>RAID-0</acronym>), είναι ότι έχουν πιο ισορροπημένη
|
||
λειτουργία: επιλέγοντας το σωστό μέγεθος λωρίδας (περίπου
|
||
256 kB), μπορείτε να εξισορροπήσετε το φορτίο σε κάθε δίσκο
|
||
του plex. Τα μειονεκτήματα αυτής της μεθόδου είναι (ελαφρά) πιο
|
||
πολύπλοκος κώδικας και περιορισμοί στους υποδίσκους: πρέπει όλοι
|
||
να είναι το ίδιο μέγεθος και η επέκταση ενός plex με προσθήκη
|
||
περισσότερων δίσκων είναι τόσο πολύπλοκη που τη δεδομένη στιγμή
|
||
το Vinum δεν την υλοποιεί. Το Vinum επίσης επιβάλλει ένα ακόμα
|
||
απλοϊκό περιορισμό: ένα plex τύπου stripe πρέπει να διαθέτει
|
||
υποχρεωτικά δύο τουλάχιστον υποδίσκους, διαφορετικά είναι
|
||
αδύνατο να το ξεχωρίσουμε από ένα plex συνένωσης.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Ο <xref linkend="vinum-comparison"/> δείχνει περιληπτικά τα
|
||
πλεονεκτήματα και μειονεκτήματα κάθε είδους οργάνωσης plex.</para>
|
||
|
||
<table id="vinum-comparison" frame="none">
|
||
<title>Είδη Οργάνωσης Vinum Plex</title>
|
||
<tgroup cols="5">
|
||
<thead>
|
||
<row>
|
||
<entry>Τύπος plex</entry>
|
||
<entry>Ελάχιστο πλήθος υποδίσκων</entry>
|
||
<entry>Δυνατότητα προσθήκης υποδίσκων</entry>
|
||
<entry>Οι υποδίσκοι πρέπει να είναι ίδιου μεγέθους</entry>
|
||
<entry>Εφαρμογή</entry>
|
||
</row>
|
||
</thead>
|
||
|
||
<tbody>
|
||
<row>
|
||
<entry>συνένωσης (concatenated)</entry>
|
||
<entry>1</entry>
|
||
<entry>ναι</entry>
|
||
<entry>όχι</entry>
|
||
<entry>Αποθήκευση μεγάλου όγκου δεδομένων με μέγιστη ευελιξία
|
||
στον τρόπο κατανομής και μέτρια απόδοση.</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry>striped</entry>
|
||
<entry>2</entry>
|
||
<entry>όχι</entry>
|
||
<entry>ναι</entry>
|
||
<entry>Υψηλή απόδοση σε συνδυασμό με πολύ καλές ταχύτητες σε
|
||
καταστάσεις πολλαπλής πρόσβασης.</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-examples">
|
||
<title>Μερικά Παραδείγματα</title>
|
||
|
||
<para>Το Vinum διατηρεί μια
|
||
<emphasis>βάση δεδομένων με τις ρυθμίσεις του</emphasis> η οποία
|
||
περιγράφει τα αντικείμενα τα οποία γνωρίζει ένα συγκεκριμένο σύστημα.
|
||
Αρχικά, ο χρήστης δημιουργεί αυτή τη βάση δεδομένων από ένα ή
|
||
περισσότερα αρχεία ρυθμίσεων, με την βοήθεια του προγράμματος
|
||
&man.gvinum.8;. Το vinum αποθηκεύει ένα αντίγραφο της βάσης
|
||
δεδομένων σε κάθε slice του δίσκου (που το Vinum αποκαλεί
|
||
<emphasis>συσκευή</emphasis>) που βρίσκεται υπό τον έλεγχο του.
|
||
Η βάση δεδομένων ανανεώνεται σε κάθε αλλαγή κατάστασης, ώστε
|
||
όλα τα αντικείμενα του Vinum να επανέρχονται στη σωστή κατάσταση μετά
|
||
από μια επανεκκίνηση.</para>
|
||
|
||
<sect2>
|
||
<title>Το Αρχείο Ρυθμίσεων</title>
|
||
|
||
<para>Το αρχείο ρυθμίσεων περιγράφει τα μεμονωμένα αντικείμενα του
|
||
Vinum. Ο ορισμός για ένα απλό τόμο μπορεί να μοιάζει με τον
|
||
παρακάτω:</para>
|
||
|
||
<programlisting>
|
||
drive a device /dev/da3h
|
||
volume myvol
|
||
plex org concat
|
||
sd length 512m drive a</programlisting>
|
||
|
||
<para>Αυτό το αρχείο περιγράφει τέσσερα αντικείμενα του Vinum:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Η γραμμή <emphasis>drive</emphasis> περιγράφει μια κατάτμηση
|
||
δίσκου (<emphasis>οδηγού</emphasis>) και τη θέση της σε σχέση με
|
||
το φυσικό δίσκο. Δίνεται σε αυτή το συμβολικό όνομα
|
||
<emphasis>a</emphasis>. Αυτός ο διαχωρισμός των συμβολικών από
|
||
τα πραγματικά ονόματα συσκευών, μας επιτρέπει να μεταφέρουμε
|
||
δίσκους από μια θέση σε μια άλλη χωρίς να προκληθεί
|
||
σύγχυση.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Η γραμμή <emphasis>volume</emphasis> περιγράφει ένα τόμο.
|
||
Το μόνο απαιτούμενο χαρακτηριστικό εδώ είναι το όνομα, στην
|
||
περίπτωση μας <emphasis>myvol</emphasis>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Η γραμμή <emphasis>plex</emphasis> ορίζει ένα plex.
|
||
Η μόνη απαραίτητη παράμετρος είναι το είδος της οργάνωσης, στη
|
||
συγκεκριμένη περίπτωση το <emphasis>concat</emphasis>. Δεν
|
||
είναι απαραίτητο να δοθεί όνομα: το σύστημα παράγει αυτόματα
|
||
ένα όνομα χρησιμοποιώντας το όνομα του τόμου και την κατάληξη
|
||
<emphasis>.p</emphasis><emphasis>x</emphasis>, όπου το
|
||
<emphasis>x</emphasis> είναι ο αριθμός του plex στον τόμο. Έτσι,
|
||
αυτό το plex θα καλείται <emphasis>myvol.p0</emphasis>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Η γραμμή <emphasis>sd</emphasis> περιγράφει ένα υποδίσκο.
|
||
Οι ελάχιστες απαιτούμενες προδιαγραφές είναι το όνομα ενός
|
||
δίσκου στον οποίο θα αποθηκευτεί, και το μήκος του υποδίσκου.
|
||
Όπως συμβαίνει και με τα plex, δεν απαιτείται όνομα:
|
||
το σύστημα αποδίδει ονόματα αυτόματα, χρησιμοποιώντας ως σημείο
|
||
εκκίνησης το όνομα του plex και προσθέτοντας την κατάληξη
|
||
<emphasis>.s</emphasis><emphasis>x</emphasis>, όπου το
|
||
<emphasis>x</emphasis> είναι ο αριθμός του υποδίσκου στο plex.
|
||
Έτσι, το Vinum δίνει σε αυτόν τον υποδίσκο το όνομα
|
||
<emphasis>myvol.p0.s0</emphasis>.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Μετά την επεξεργασία αυτού του αρχείου, το &man.gvinum.8; παράγει
|
||
την ακόλουθη έξοδο:</para>
|
||
|
||
<programlisting width="97">
|
||
&prompt.root; gvinum -> <userinput>create config1</userinput>
|
||
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</programlisting>
|
||
|
||
<para>Η παραπάνω έξοδος χρησιμοποιεί τη μορφή συντομευμένης λίστας του
|
||
&man.gvinum.8;. Η γραφική απεικόνιση φαίνεται στο <xref
|
||
linkend="vinum-simple-vol"/>.</para>
|
||
|
||
<para>
|
||
<figure id="vinum-simple-vol">
|
||
<title>Ένας Απλός Τόμος Vinum</title>
|
||
<graphic fileref="vinum/vinum-simple-vol"/>
|
||
</figure>
|
||
</para>
|
||
|
||
<para>Στο σχήμα αυτό (καθώς και σε αυτά που ακολουθούν) υπάρχει η
|
||
αναπαράσταση ενός τόμου που περιέχει τα plex, τα οποία με τη
|
||
σειρά τους περιέχουν τους υποδίσκους. Σε αυτό το απλουστευμένο
|
||
παράδειγμα, ο τόμος περιέχει ένα plex και το plex περιέχει ένα
|
||
υποδίσκο.</para>
|
||
|
||
<para>Ο τόμος αυτός δεν έχει κάποιο συγκεκριμένο
|
||
πλεονέκτημα σε σχέση με μια συμβατική κατάτμηση δίσκου. Περιέχει
|
||
ένα μόνο plex, άρα δεν έχει κάποια ικανότητα ανοχής σφαλμάτων.
|
||
Το plex περιέχει επίσης ένα υποδίσκο, και έτσι δεν υπάρχει διαφορά
|
||
στην κατανομή χώρου σε σχέση με μια συμβατική κατάτμηση. Στις
|
||
επόμενες ενότητες θα δείξουμε διαφορετικές και πιο ενδιαφέρουσες
|
||
μεθόδους ρύθμισης.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Αυξημένη Αξιοπιστία: Mirroring</title>
|
||
|
||
<para>Η αξιοπιστία ενός τόμου μπορεί να αυξηθεί μέσω του mirroring
|
||
(καθρεπτισμού). Όταν σχεδιάζετε ένα τόμο στον οποίο θα γίνει
|
||
mirroring, είναι σημαντικό να εξασφαλίσετε ότι οι υποδίσκοι σε κάθε
|
||
plex είναι σε διαφορετικούς οδηγούς, ώστε η αποτυχία ενός δίσκου να
|
||
μην προκαλέσει παύση λειτουργίας και στα δύο plex. Το παρακάτω
|
||
παράδειγμα δείχνει πως μπορεί να γίνει mirroring ενός τόμου:</para>
|
||
|
||
<programlisting>
|
||
drive b device /dev/da4h
|
||
volume mirror
|
||
plex org concat
|
||
sd length 512m drive a
|
||
plex org concat
|
||
sd length 512m drive b</programlisting>
|
||
|
||
<para>Στο παράδειγμα αυτό, δεν ήταν απαραίτητο να καθοριστεί ξανά ο
|
||
οδηγός <emphasis>a</emphasis>, καθώς το Vinum διαθέτει ήδη τις
|
||
αντίστοιχες καταχωρίσεις στη βάση δεδομένων με τις ρυθμίσεις του.
|
||
Μετά την επεξεργασία των παραπάνω ορισμών, η ρύθμιση μοιάζει με
|
||
την παρακάτω:</para>
|
||
|
||
<programlisting width="97">
|
||
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</programlisting>
|
||
|
||
<para>Το <xref linkend="vinum-mirrored-vol"/> αναπαριστά αυτή τη δομή
|
||
γραφικά.</para>
|
||
|
||
<para>
|
||
<figure id="vinum-mirrored-vol">
|
||
<title>Ένας Mirrored Τόμος Vinum </title>
|
||
<graphic fileref="vinum/vinum-mirrored-vol"/>
|
||
</figure>
|
||
</para>
|
||
|
||
<para>Στο παράδειγμα αυτό, κάθε plex περιέχει την πλήρη περιοχή
|
||
διευθύνσεων, μεγέθους 512 MB. Όπως και στο προηγούμενο
|
||
παράδειγμα, κάθε plex περιέχει ένα μοναδικό υποδίσκο.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Βελτιστοποιώντας την Απόδοση</title>
|
||
|
||
<para>Ο mirrored τόμος του προηγούμενου παραδείγματος παρουσιάζει
|
||
μεγαλύτερη ανοχή σφαλμάτων σε σχέση με ένα τόμο που δεν χρησιμοποιεί
|
||
mirror, αλλά η απόδοση του είναι μικρότερη: κάθε εγγραφή στον
|
||
τόμο πρέπει να γίνεται και στους δύο δίσκους, χρησιμοποιώντας έτσι
|
||
μεγαλύτερο ποσοστό του διαθέσιμου εύρους ζώνης. Οι απαιτήσεις που
|
||
ενδεχομένως έχουμε για απόδοση, απαιτούν διαφορετική προσέγγιση:
|
||
αντί να χρησιμοποιήσουμε mirror, μπορούμε να δημιουργήσουμε λωρίδες
|
||
αποθήκευσης (stripes) σε όσο το δυνατόν περισσότερους δίσκους.
|
||
Η παρακάτω ρύθμιση δείχνει ένα τόμο στον οποίο το plex έχει γίνει
|
||
stripe σε τέσσερις δίσκους:</para>
|
||
|
||
<programlisting>
|
||
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</programlisting>
|
||
|
||
<para>Όπως και προηγουμένως, δεν χρειάζεται να ορίσουμε ξανά τους
|
||
δίσκους που είναι ήδη γνωστοί στο Vinum. Μετά την επεξεργασία του
|
||
παραπάνω ορισμού, η ρύθμιση θα μοιάζει με την παρακάτω:</para>
|
||
|
||
<programlisting width="92">
|
||
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</programlisting>
|
||
|
||
<para>
|
||
<figure id="vinum-striped-vol">
|
||
<title>Ένας Striped Τόμος Vinum</title>
|
||
<graphic fileref="vinum/vinum-striped-vol"/>
|
||
</figure>
|
||
</para>
|
||
|
||
<para>Αυτός ο τόμος αναπαρίσταται γραφικά στο
|
||
<xref linkend="vinum-striped-vol"/>. Η απόχρωση της λωρίδας
|
||
αντιπροσωπεύει τη θέση της μέσα στην περιοχή διευθύνσεων του plex:
|
||
οι ανοιχτόχρωμες λωρίδες είναι οι πρώτες, οι σκουρόχρωμες είναι οι
|
||
τελευταίες.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Αξιοπιστία και Απόδοση</title>
|
||
|
||
<para><anchor id="vinum-resilience"/>Με το κατάλληλο υλικό, είναι δυνατόν
|
||
να δημιουργηθούν τόμοι οι οποίοι να παρουσιάζουν τόσο μεγάλη ανοχή
|
||
σε σφάλματα, όσο και αυξημένη απόδοση σε σχέση με τις τυποποιημένες
|
||
κατατμήσεις του &unix;. Ένα τυπικό αρχείο ρυθμίσεων θα μοιάζει με το
|
||
παρακάτω:</para>
|
||
|
||
<programlisting>
|
||
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</programlisting>
|
||
|
||
<para>Οι υποδίσκοι του δεύτερου plex έχουν μετατεθεί κατά δύο οδηγούς
|
||
σε σχέση με αυτούς του πρώτου plex: αυτό εξασφαλίζει ότι οι εγγραφές
|
||
δεν γίνονται στους ίδιους υποδίσκους, ακόμα και αν μια μεταφορά
|
||
χρησιμοποιεί και τους δύο δίσκους.</para>
|
||
|
||
<para>Το <xref linkend="vinum-raid10-vol"/> αναπαριστά γραφικά τη δομή
|
||
αυτού του τόμου.</para>
|
||
|
||
<para>
|
||
<figure id="vinum-raid10-vol">
|
||
<title>Ένας Mirrored και Striped Τόμος του Vinum</title>
|
||
<graphic fileref="vinum/vinum-raid10-vol"/>
|
||
</figure>
|
||
</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-object-naming">
|
||
<title>Ονομασία Αντικειμένων</title>
|
||
|
||
<para>Όπως περιγράψαμε παραπάνω, το Vinum αποδίδει προεπιλεγμένα ονόματα
|
||
σε plex και υποδίσκους, αν και υπάρχει η δυνατότητα να τα
|
||
παρακάμψετε. Αυτό ωστόσο δεν συνίσταται: η εμπειρία που έχουμε από
|
||
το διαχειριστή τόμων VERITAS (ο οποίος επιτρέπει ελεύθερη απόδοση
|
||
ονομάτων στα αντικείμενα) έχει δείξει ότι αυτού του είδους η ευελιξία
|
||
δεν προσφέρει σημαντικά πλεονεκτήματα, και μπορεί να προκαλέσει
|
||
σύγχυση.</para>
|
||
|
||
<para>Τα ονόματα μπορεί να περιέχουν οποιοδήποτε μη-κενό χαρακτήρα, αλλά
|
||
συνίσταται να περιοριστείτε στη χρήση γραμμάτων, αριθμών και της κάτω
|
||
παύλας. Τα ονόματα των τόμων, των plex και των υποδίσκων μπορεί να
|
||
είναι μέχρι 64 χαρακτήρες, ενώ τα ονόματα των δίσκων μπορεί να είναι
|
||
μέχρι 32 χαρακτήρες.</para>
|
||
|
||
<para>Τα αρχεία συσκευών του Vinum δημιουργούνται στον κατάλογο
|
||
<filename class="directory">/dev/gvinum</filename>. Με τις ρυθμίσεις
|
||
που φαίνονται παραπάνω, το Vinum θα δημιουργήσει τα παρακάτω αρχεία
|
||
συσκευών:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Καταχωρίσεις συσκευών για κάθε τόμο. Αυτές είναι και οι κύριες
|
||
συσκευές που χρησιμοποιεί το Vinum. Με τις ρυθμίσεις που δείξαμε
|
||
παραπάνω, θα έχουμε τις συσκευές:
|
||
<filename class="devicefile">/dev/gvinum/myvol</filename>,
|
||
<filename class="devicefile">/dev/gvinum/mirror</filename>,
|
||
<filename class="devicefile">/dev/gvinum/striped</filename>,
|
||
<filename class="devicefile">/dev/gvinum/raid5</filename> και
|
||
<filename class="devicefile">/dev/gvinum/raid10</filename>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Όλοι οι τόμοι διαθέτουν απευθείας καταχωρίσεις στον κατάλογο
|
||
<filename class="directory">/dev/gvinum/</filename>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Οι κατάλογοι
|
||
<filename class="directory">/dev/gvinum/plex</filename> και
|
||
<filename class="directory">/dev/gvinum/sd</filename>, που
|
||
περιέχουν τα αρχεία συσκευών για κάθε plex και υποδίσκο
|
||
αντίστοιχα.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Για παράδειγμα, θεωρήστε το παρακάτω αρχείο ρυθμίσεων:</para>
|
||
|
||
<programlisting>
|
||
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</programlisting>
|
||
|
||
<para>Μετά την επεξεργασία αυτού του αρχείου, το &man.gvinum.8; θα
|
||
δημιουργήσει την ακόλουθη δομή στον κατάλογο
|
||
<filename class="directory">/dev/gvinum</filename>:</para>
|
||
|
||
<programlisting>
|
||
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</programlisting>
|
||
|
||
<para>Αν και συνίσταται να μην δίνονται συγκεκριμένα ονόματα στα plex
|
||
και τους υποδίσκους, θα πρέπει να δοθούν ονόματα στους δίσκους του
|
||
Vinum. Με τον τρόπο αυτό, ο δίσκος αναγνωρίζεται αυτόματα ακόμα και
|
||
αν αλλάξει θέση. Τα ονόματα των δίσκων μπορεί να έχουν μέγεθος μέχρι
|
||
32 χαρακτήρες.</para>
|
||
|
||
<sect2>
|
||
<title>Δημιουργία Συστημάτων Αρχείων</title>
|
||
|
||
<para>Οι τόμοι δείχνουν όμοιοι με τους δίσκους όσο αφορά το σύστημα,
|
||
με μια εξαίρεση. Αντίθετα με τους δίσκους του &unix;, το Vinum δεν
|
||
δημιουργεί κατατμήσεις στους τόμους, και έτσι απουσιάζει από αυτούς
|
||
ο αντίστοιχος πίνακας κατατμήσεων. Αυτό απαιτεί την τροποποίηση
|
||
κάποιων βοηθητικών προγραμμάτων και ειδικότερα του &man.newfs.8;, το
|
||
οποίο στις προηγούμενες υλοποιήσεις του προσπαθούσε να ερμηνεύσει
|
||
το τελευταίο γράμμα ενός τόμου Vinum ως αναγνωριστικό της κατάτμησης.
|
||
Για παράδειγμα, ένας κανονικός δίσκος μπορεί να έχει το όνομα
|
||
<filename class="devicefile">/dev/ad0a</filename> ή
|
||
<filename class="devicefile">/dev/da2h</filename>.
|
||
Τα ονόματα αυτά αντιπροσωπεύουν την πρώτη κατάτμηση
|
||
(<devicename>a</devicename>) στον πρώτο δίσκο IDE
|
||
(<devicename>ad</devicename>) και την όγδοη κατάτμηση
|
||
(<devicename>h</devicename>) στον τρίτο (2) SCSI δίσκο
|
||
(<devicename>da</devicename>) αντίστοιχα. Σε αντίθεση, ένας τόμος
|
||
του Vinum μπορεί να ονομάζεται <filename
|
||
class="devicefile">/dev/gvinum/concat</filename>, το οποίο δεν
|
||
έχει καμιά σχέση με όνομα κατάτμησης.</para>
|
||
|
||
<para>Για να δημιουργήσετε ένα σύστημα αρχείων σε αυτό τον τόμο,
|
||
χρησιμοποιήστε την &man.newfs.8;:</para>
|
||
|
||
<screen>&prompt.root; <userinput>newfs /dev/gvinum/concat</userinput></screen>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-config">
|
||
<title>Ρύθμιση του Vinum</title>
|
||
|
||
<para>Το Vinum δεν υπάρχει στον πυρήνα <filename>GENERIC</filename>.
|
||
Είναι δυνατόν να δημιουργήσετε προσαρμοσμένο πυρήνα που να το περιέχει,
|
||
αλλά δεν συνίσταται. Ο συνηθισμένος τρόπος να ξεκινήσετε το Vinum,
|
||
είναι να το φορτώσετε ως άρθρωμα στον πυρήνα (<acronym>kld</acronym>).
|
||
Δεν χρειάζεται καν να χρησιμοποιήσετε την &man.kldload.8; για το
|
||
Vinum: όταν ξεκινήσετε το &man.gvinum.8;, θα γίνει έλεγχος για να
|
||
διαπιστωθεί αν το άρθρωμα είναι φορτωμένο, και αν δεν είναι θα
|
||
φορτωθεί αυτόματα.</para>
|
||
|
||
<sect2>
|
||
<title>Εκκίνηση</title>
|
||
|
||
<para>Το Vinum αποθηκεύει τις πληροφορίες για τις ρυθμίσεις του στα
|
||
slices των δίσκων, ουσιαστικά με τον ίδιο τρόπο που τις αποθηκεύει
|
||
και στα αρχεία ρυθμίσεων. Όταν το Vinum διαβάζει τη βάση δεδομένων
|
||
των ρυθμίσεων, μπορεί να αναγνωρίσει ένα αριθμό λέξεων που δεν
|
||
επιτρέπεται να εμφανιστούν στα αρχεία ρυθμίσεων. Για παράδειγμα, οι
|
||
ρυθμίσεις για κάποιο δίσκο μπορεί να περιέχουν το παρακάτω
|
||
κείμενο:</para>
|
||
|
||
<programlisting width="119">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</programlisting>
|
||
|
||
<para>Οι προφανείς διαφορές εδώ, είναι η παρουσία συγκεκριμένων
|
||
θέσεων και ονομάτων (και τα δύο είναι επιτρεπτά, αλλά γενικά δεν
|
||
συνίσταται η χρήση τους) και οι πληροφορίες κατάστασης (που
|
||
δεν είναι διαθέσιμες στο χρήστη). Το Vinum δεν αποθηκεύει
|
||
πληροφορίες σχετικές με τους δίσκους στις ρυθμίσεις του: απλώς
|
||
ανιχνεύει όλους τους δίσκους για κατατμήσεις που περιέχουν
|
||
ετικέτα Vinum. Αυτό επιτρέπει στο Vinum να αναγνωρίσει τους δίσκους
|
||
σωστά, ακόμα και αν τους έχει δοθεί διαφορετικό &unix;
|
||
αναγνωριστικό (ID).</para>
|
||
|
||
<sect3 id="vinum-rc-startup">
|
||
<title>Αυτόματη Εκκίνηση</title>
|
||
|
||
<para>Το <emphasis>Gvinum</emphasis> ξεκινάει πάντοτε αυτόματα
|
||
μετά την φόρτωση του αρθρώματος μέσω του &man.loader.conf.5;.
|
||
Για να φορτώσετε το άρθρωμα του <emphasis>Gvinum</emphasis> κατά
|
||
την εκκίνηση, προσθέστε τη γραμμή
|
||
<literal>geom_vinum_load="YES"</literal> στο αρχείο
|
||
<filename>/boot/loader.conf</filename>.</para>
|
||
|
||
<para>Όταν ξεκινάτε το Vinum με την εντολή
|
||
<command>gvinum start</command>, το Vinum διαβάζει τη βάση
|
||
δεδομένων ρυθμίσεων από έναν δίσκο που βρίσκεται υπό τον έλεγχο
|
||
του. Κάτω από φυσιολογικές συνθήκες, κάθε δίσκος περιέχει ένα
|
||
όμοιο αντίγραφο της βάσης, έτσι δεν έχει σημασία από ποιο δίσκο θα
|
||
γίνει η ανάγνωση. Ωστόσο, μετά από κάποιο απότομο τερματισμό
|
||
λειτουργίας, το Vinum θα πρέπει να καθορίσει ποιος δίσκος έχει το
|
||
πιο πρόσφατο αντίγραφο και να διαβάσει από εκεί τις ρυθμίσεις.
|
||
Μετά θα διορθώσει (αν χρειάζεται) τις ρυθμίσεις και στους
|
||
υπόλοιπους δίσκους.</para>
|
||
</sect3>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="vinum-root">
|
||
<title>Χρήση του Vinum στο Ριζικό Σύστημα Αρχείων</title>
|
||
|
||
<para>Σε ένα μηχάνημα στο οποίο έχει γίνει πλήρες mirror στα συστήματα
|
||
αρχείων με τη χρήση του Vinum, είναι συνήθως επιθυμητό να γίνει mirror
|
||
και στο ριζικό (root) σύστημα αρχείων. Η ρύθμιση αυτή δεν είναι
|
||
τόσο απλή όσο σε ένα οποιοδήποτε σύστημα αρχείων, επειδή:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Το ριζικό σύστημα αρχείων πρέπει να είναι διαθέσιμο από πολύ
|
||
νωρίς κατά τη διαδικασία εκκίνησης, έτσι είναι απαραίτητο οι
|
||
υποδομές του Vinum να είναι επίσης διαθέσιμες την ίδια
|
||
στιγμή.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Ο τόμος που περιέχει το ριζικό σύστημα αρχείων περιέχει επίσης
|
||
και τον κώδικα εκκίνησης (bootstrap) και τον πυρήνα, ο οποίος
|
||
θα πρέπει να είναι προσβάσιμος από βασικά προγράμματα
|
||
του συστήματος (π.χ. το BIOS σε μηχανήματα τύπου PC), τα οποία δεν
|
||
γνωρίζουν και δεν μπορούν να μάθουν τις λεπτομέρειες υλοποίησης του
|
||
Vinum.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Στις επόμενες ενότητες, ο όρος <quote>ριζικός τόμος</quote>
|
||
χρησιμοποιείται γενικά για να περιγράψει τον τόμο του Vinum που
|
||
περιέχει το ριζικό σύστημα αρχείων. Είναι γενικά καλή ιδέα να
|
||
χρησιμοποιείται το όνομα <literal>"root"</literal> για αυτό τον τόμο,
|
||
αλλά αυτό δεν αποτελεί τεχνική απαίτηση. Όλα τα παραδείγματα εντολών
|
||
στις παρακάτω ενότητες χρησιμοποιούν την παραπάνω παραδοχή.</para>
|
||
|
||
<sect2>
|
||
<title>Εκκίνηση του Vinum Αρκετά Νωρίς για το Ριζικό Σύστημα
|
||
Αρχείων</title>
|
||
|
||
<para>Αυτό μπορεί να επιτευχθεί με διάφορους τρόπους:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Το Vinum πρέπει να είναι διαθέσιμο στο πυρήνα κατά την
|
||
εκκίνηση. Για το λόγο αυτό, η μέθοδος αυτόματης εκκίνησης που
|
||
περιγράψαμε στο <xref linkend="vinum-rc-startup"/> δεν μπορεί να
|
||
χρησιμοποιηθεί σε αυτή την περίπτωση και η παράμετρος
|
||
<literal>start_vinum</literal> <emphasis>δεν</emphasis> θα πρέπει
|
||
να τεθεί όταν χρησιμοποιείται η παρακάτω διάταξη. Μια πιθανή
|
||
επιλογή είναι να μεταγλωττίσετε στατικά το Vinum στον πυρήνα
|
||
ώστε να είναι διαθέσιμο πάντα, αλλά αυτό συνήθως δεν είναι
|
||
επιθυμητό. Υπάρχει μια ακόμα διαθέσιμη επιλογή, να ορίσετε να
|
||
φορτώνεται το άρθρωμα του πυρήνα μέσω του
|
||
<filename>/boot/loader</filename> (<xref
|
||
linkend="boot-loader"/>) πριν την εκκίνηση του ίδιου του
|
||
πυρήνα. Αυτό μπορεί να επιτευχθεί με τη γραμμή:</para>
|
||
|
||
<programlisting>geom_vinum_load="YES"</programlisting>
|
||
|
||
<para>στο αρχείο <filename>/boot/loader.conf</filename>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Στο <emphasis>Gvinum</emphasis>, όλη η διαδικασία εκκίνησης
|
||
γίνεται αυτόματα μετά την φόρτωση του αρθρώματος πυρήνα, έτσι
|
||
η διαδικασία που περιγράψαμε παραπάνω είναι και η μόνη που
|
||
απαιτείται.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Δημιουργία Ριζικού Τόμου Vinum με Δυνατότητα Πρόσβασης από τον
|
||
Κώδικα Εκκίνησης (Bootstrap).</title>
|
||
|
||
<para>Καθώς ο τρέχοντας κώδικας εκκίνησης του &os; έχει μέγεθος μόνο
|
||
7.5 KB, και είναι ήδη επιφορτισμένος με την ανάγνωση αρχείων (όπως το
|
||
<filename>/boot/loader</filename>) από το σύστημα αρχείων UFS, είναι
|
||
πρακτικά αδύνατο να γνωρίζει και τις απαιτούμενες εσωτερικές δομές
|
||
του Vinum ώστε να μπορεί να ερμηνεύσει τις αντίστοιχες πληροφορίες
|
||
ρύθμισης και να μάθει τις λεπτομέρειες του τόμου εκκίνησης. Για το
|
||
λόγο αυτό, χρειάζεται να χρησιμοποιήσουμε κάποια τεχνάσματα ώστε να
|
||
δώσουμε στον κώδικα εκκίνησης την ψευδαίσθηση ύπαρξης μιας κανονικής
|
||
κατάτμησης <literal>"a"</literal> που να περιέχει το ριζικό σύστημα
|
||
αρχείων.</para>
|
||
|
||
<para>Για να καταστεί αυτό δυνατό, θα πρέπει να πληρούνται ταυτόχρονα
|
||
όλες οι παρακάτω προϋποθέσεις όσο αφορά τον τόμο εκκίνησης:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Ο τόμος εκκίνησης δεν θα πρέπει να είναι stripe ή
|
||
RAID-5.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Ο τόμος εκκίνησης δεν θα πρέπει να περιέχει περισσότερους
|
||
από ένα συνενωμένους υποδίσκους ανά plex.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Σημειώστε ότι είναι συνήθως επιθυμητό και δυνατό να υπάρχουν
|
||
πολλαπλά plex, καθένα από τα οποία να είναι αντίγραφο του ριζικού
|
||
συστήματος αρχείων. Η διαδικασία εκκίνησης θα χρησιμοποιήσει ωστόσο
|
||
μόνο ένα από αυτά τα αντίγραφα για να βρει τον κώδικα εκκίνησης και
|
||
όλα τα αρχεία, μέχρι να γίνει τελικά η προσάρτηση του ριζικού
|
||
συστήματος αρχείων από τον ίδιο τον πυρήνα. Κάθε μοναδικός υποδίσκος
|
||
μέσα σε αυτά τα plex, θα χρειαστεί να διαθέτει τη δική του
|
||
ψευτο-κατάτμηση <literal>"a"</literal> ώστε η συσκευή να είναι
|
||
εκκινήσιμη. Δεν είναι απαραίτητο κάθε μια από αυτές τις
|
||
ψευτο-κατατμήσεις να βρίσκεται στην ίδια θέση μέσα στην συσκευή,
|
||
σε σχέση με άλλες συσκευές που περιέχουν plex με ριζικό σύστημα
|
||
αρχείων. Είναι όμως γενικά καλή ιδέα να δημιουργήσετε τους τόμους
|
||
του Vinum με τέτοιο τρόπο, ώστε οι συσκευές mirror που προκύπτουν να
|
||
είναι συμμετρικές για να αποφύγετε τη σύγχυση.</para>
|
||
|
||
<para>Για να δημιουργηθούν αυτές οι τύπου <literal>"a"</literal>
|
||
κατατμήσεις για κάθε συσκευή που θα περιέχει τμήματα του ριζικού
|
||
τόμου, θα πρέπει να γίνουν τα ακόλουθα:</para>
|
||
|
||
<procedure>
|
||
<step>
|
||
<para>Θα πρέπει να εξετάσετε τη θέση (την απόσταση από την αρχή της
|
||
συσκευής) και το μέγεθος της συσκευής υποδίσκου η οποία θα είναι
|
||
μέρος του ριζικού τόμου, χρησιμοποιώντας την εντολή:</para>
|
||
|
||
<screen>&prompt.root; <userinput>gvinum l -rv root</userinput></screen>
|
||
|
||
<para>Σημειώστε ότι στο Vinum οι θέσεις και τα μεγέθη μετρούνται
|
||
σε bytes. Θα πρέπει να διαιρέσετε αυτούς τους αριθμούς με το 512
|
||
για να βρείτε τους αριθμούς μπλοκ που θα χρησιμοποιήσετε στην
|
||
εντολή <command>bsdlabel</command>.</para>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Εκτελέστε την εντολή:</para>
|
||
|
||
<screen>&prompt.root; <userinput>bsdlabel -e <replaceable>devname</replaceable></userinput></screen>
|
||
|
||
<para>για κάθε συσκευή που συμμετέχει στο ριζικό τόμο.
|
||
Το <replaceable>devname</replaceable> θα πρέπει να είναι είτε το
|
||
όνομα του δίσκου (για παράδειγμα <devicename>da0</devicename>)
|
||
για δίσκους χωρίς slices (χωρίς δηλ. κατατμήσεις fdisk), ή το
|
||
όνομα του slice (για παράδειγμα,
|
||
<devicename>ad0s1</devicename>).</para>
|
||
|
||
<para>Αν υπάρχει ήδη μια κατάτμηση <literal>"a"</literal> στη
|
||
συσκευή (που πιθανώς περιέχει το ριζικό σύστημα αρχείων που ήταν
|
||
σε χρήση πριν χρησιμοποιηθεί το Vinum), θα πρέπει να μετονομαστεί
|
||
σε κάτι άλλο ώστε να εξακολουθεί να είναι προσβάσιμο
|
||
(σε περίπτωση ανάγκης), αλλά δεν θα χρησιμοποιείται πλέον από
|
||
προεπιλογή για την εκκίνηση του συστήματος. Σημειώστε ότι οι
|
||
ενεργές κατατμήσεις (όπως για παράδειγμα ένα ριζικό σύστημα
|
||
αρχείων το οποίο είναι ήδη προσαρτημένο) δεν μπορούν να
|
||
μετονομαστούν. Θα πρέπει να εκτελέσετε την εντολή
|
||
χρησιμοποιώντας την επιλογή <quote>Fixit</quote> του CD
|
||
εγκατάστασης, ή να ακολουθήσετε μια διαδικασία δύο βημάτων
|
||
(σε περίπτωση που έχετε mirror) ξεκινώντας από τον ένα δίσκο και
|
||
μετονομάζοντας τον άλλο.</para>
|
||
|
||
<para>Έπειτα θα πρέπει να προσθέσετε την απόσταση (offset, αν
|
||
υπάρχει) της κατάτμησης Vinum αυτής της συσκευής, με την απόσταση
|
||
του υποδίσκου του αντίστοιχου ριζικού τόμου της συσκευής. Η τιμή
|
||
που θα προκύψει θα είναι η απόσταση (<literal>"offset"</literal>)
|
||
για τη νέα κατάτμηση <literal>"a"</literal>. Μπορείτε να πάρετε
|
||
αυτούσια την τιμή <literal>"size"</literal> για αυτή την κατάτμηση
|
||
από τον υπολογισμό που κάνατε παραπάνω. Το
|
||
<literal>"fstype"</literal> θα πρέπει να είναι
|
||
<literal>4.2BSD</literal>. Οι τιμές των
|
||
<literal>"fsize"</literal>, <literal>"bsize"</literal>,
|
||
και <literal>"cpg"</literal> θα πρέπει να επιλεχθούν με τέτοιο
|
||
τρόπο ώστε να ταιριάζουν με το πραγματικό σύστημα αρχείων, αν και
|
||
δεν έχουν σημασία στη συγκεκριμένη περίπτωση.</para>
|
||
|
||
<para>Με αυτό τον τρόπο, θα δημιουργηθεί μια νέα κατάτμηση
|
||
<literal>"a"</literal> η οποία επικαλύπτει την κατάτμηση του
|
||
Vinum σε αυτή τη συσκευή. Σημειώστε ότι η εντολή
|
||
<command>bsdlabel</command> θα επιτρέψει αυτή την επικάλυψη μόνο
|
||
αν η κατάτμηση του Vinum έχει επισημανθεί κατάλληλα με fstype
|
||
<literal>"vinum"</literal>.</para>
|
||
</step>
|
||
|
||
<step>
|
||
<para>Αυτό είναι όλο! Υπάρχει πλέον μια ψευτο-κατάτμηση
|
||
<literal>"a"</literal> σε κάθε συσκευή η οποία έχει αντίγραφο του
|
||
ριζικού τόμου. Συνίσταται να επαληθεύσετε ξανά το αποτέλεσμα,
|
||
χρησιμοποιώντας μια εντολή όπως την παρακάτω:</para>
|
||
|
||
<screen>&prompt.root; <userinput>fsck -n /dev/<replaceable>devname</replaceable>a</userinput></screen>
|
||
</step>
|
||
</procedure>
|
||
|
||
<para>Θα πρέπει να θυμάστε ότι οι θέσεις των αρχείων που περιέχουν
|
||
πληροφορίες ελέγχου πρέπει να είναι σχετικές ως προς το ριζικό
|
||
σύστημα αρχείων που βρίσκεται στο τόμο του Vinum, και ο οποίος
|
||
(κατά την δημιουργία καινούριου ριζικού τόμου Vinum) μπορεί να μην
|
||
ταιριάζει με το ριζικό σύστημα αρχείων που είναι ενεργό τη δεδομένη
|
||
στιγμή. Θα πρέπει ιδιαίτερα να φροντίσετε τα αρχεία
|
||
<filename>/etc/fstab</filename> και
|
||
<filename>/boot/loader.conf</filename>.</para>
|
||
|
||
<para>Στην επόμενη επανεκκίνηση, ο κώδικας εκκίνησης θα πρέπει να
|
||
εντοπίσει τις κατάλληλες πληροφορίες ελέγχου από το νέο (Vinum)
|
||
ριζικό σύστημα αρχείων και να δράσει κατάλληλα. Στο τέλος της
|
||
διαδικασίας αρχικοποίησης του πυρήνα, και μετά την αναγγελία όλων
|
||
των συσκευών, το μήνυμα το οποίο δείχνει την επιτυχή λειτουργία
|
||
του εγχειρήματος μοιάζει με το παρακάτω:</para>
|
||
|
||
<screen>Mounting root from ufs:/dev/gvinum/root</screen>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Παράδειγμα Ρύθμισης Ριζικού Τόμου με Vinum</title>
|
||
|
||
<para>Μετά την ρύθμιση του ριζικού τόμου με το Vinum, η έξοδος της
|
||
εντολής <command>gvinum l -rv root</command> θα μοιάζει με την
|
||
παρακάτω:</para>
|
||
|
||
<screen>
|
||
...
|
||
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)
|
||
</screen>
|
||
|
||
<para>Οι τιμές που θα πρέπει να σημειώσετε είναι το
|
||
<literal>135680</literal> για την απόσταση (offset σε σχέση με την
|
||
κατάτμηση <filename class="devicefile">/dev/da0h</filename>). Αυτό
|
||
μεταφράζεται σε 265 block των 512 byte για την εντολή
|
||
<command>bsdlabel</command>. Παρόμοια, το μέγεθος του ριζικού τόμου
|
||
είναι 245760 μπλοκ των 512 byte. Το <filename
|
||
class="devicefile">/dev/da1h</filename>, το οποίο περιέχει το
|
||
δεύτερο αντίγραφο του ριζικού τόμου, έχει συμμετρική ρύθμιση.</para>
|
||
|
||
<para>Το bsdlabel για αυτές τις συσκευές θα μοιάζει με το
|
||
παρακάτω:</para>
|
||
|
||
<screen>
|
||
...
|
||
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*)</screen>
|
||
|
||
<para>Μπορείτε να παρατηρήσετε ότι η παράμετρος
|
||
<literal>"size"</literal> για την ψευτο-κατάτμηση
|
||
<literal>"a"</literal> ταιριάζει με την τιμή που δείξαμε παραπάνω,
|
||
ενώ η τιμή της παραμέτρου <literal>"offset"</literal> είναι το
|
||
άθροισμα της απόστασης ανάμεσα στην κατάτμηση Vinum
|
||
<literal>"h"</literal> και της απόστασης αυτής της κατάτμησης μέσα
|
||
στη συσκευή (ή το slice). Πρόκειται για μια τυπική ρύθμιση που είναι
|
||
απαραίτητη για να αποφευχθούν τα προβλήματα που περιγράφηκαν στο
|
||
<xref linkend="vinum-root-panic"/>. Μπορείτε επίσης να δείτε ότι
|
||
ολόκληρη η κατάτμηση <literal>"a"</literal> περιέχεται αυτούσια
|
||
μέσα στην <literal>"h"</literal> η οποία και περιέχει όλες τις
|
||
πληροφορίες Vinum της συσκευής.</para>
|
||
|
||
<para>Σημειώστε ότι στο παραπάνω παράδειγμα η συσκευή χρησιμοποιείται
|
||
εξ' ολοκλήρου από το Vinum, και δεν υπάρχει κάποιο κατάλοιπο ριζικής
|
||
κατάτμησης από παλιότερη χρήση. Αυτό συμβαίνει επειδή πρόκειται για
|
||
δίσκο που χρησιμοποιήθηκε από την αρχή ως μέρος ενός συστήματος
|
||
Vinum.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Αντιμετώπιση Προβλημάτων</title>
|
||
|
||
<para>Σε περίπτωση προβλήματος, θα χρειαστείτε κάποια μέθοδο
|
||
αντιμετώπισης. Η παρακάτω λίστα περιέχει μερικά από τα πιο
|
||
συνηθισμένα προβλήματα και τις λύσεις τους.</para>
|
||
|
||
<sect3>
|
||
<title>Ο Κώδικας Εκκίνησης Φορτώνεται, Αλλά το Σύστημα δεν
|
||
Εκκινεί</title>
|
||
|
||
<para>Αν για οποιοδήποτε λόγο το σύστημα δεν συνεχίζει την εκκίνηση,
|
||
θα πρέπει να διακόψετε την εκκίνηση μέσα στο χρονικό διάστημα των 10
|
||
δευτερολέπτων που εμφανίζεται ο φορτωτής εκκίνησης, πιέζοντας το
|
||
πλήκτρο <keycap>space</keycap>. Μπορείτε να εξετάσετε τις τιμές
|
||
των μεταβλητών του φορτωτή
|
||
(όπως η <literal>vinum.autostart</literal>), χρησιμοποιώντας την
|
||
εντολή <command>show</command>, και να τις αλλάξετε με τις εντολές
|
||
<command>set</command> ή <command>unset</command>.</para>
|
||
|
||
<para>Αν το μοναδικό πρόβλημα ήταν η απουσία του αρθρώματος
|
||
Vinum στη λίστα της αυτόματης φόρτωσης, αρκεί να δώσετε την
|
||
εντολή <command>load geom_vinum</command>.</para>
|
||
|
||
<para>Όταν είστε έτοιμος, η εκκίνηση μπορεί να συνεχιστεί με την
|
||
εντολή <command>boot -as</command>. Οι επιλογές
|
||
<option>-as</option> θα οδηγήσουν τον πυρήνα να ρωτήσει για το
|
||
ριζικό σύστημα αρχείων που πρόκειται να προσαρτηθεί
|
||
(<option>-a</option>), και η διαδικασία εκκίνησης θα σταματήσει σε
|
||
κατάσταση ενός χρήστη (single user, λόγω της επιλογής
|
||
<option>-s</option>), όπου η προσάρτηση του ριζικού συστήματος
|
||
είναι μόνο για ανάγνωση. Με τον τρόπο αυτό, ακόμα και αν έχει
|
||
προσαρτηθεί μόνο ένα plex ενός τόμου που αποτελείται από πολλά,
|
||
δεν υπάρχει κίνδυνος να δημιουργηθεί ασυνέπεια δεδομένων μεταξύ
|
||
των plex.</para>
|
||
|
||
<para>Στην προτροπή που εμφανίζεται για το ριζικό σύστημα αρχείων που
|
||
πρόκειται να προσαρτηθεί, μπορείτε να εισάγετε οποιαδήποτε
|
||
συσκευή περιέχει ένα έγκυρο ριζικό σύστημα αρχείων. Αν το
|
||
<filename>/etc/fstab</filename> έχει ρυθμιστεί σωστά, η προεπιλογή
|
||
θα είναι κάτι σαν <literal>ufs:/dev/gvinum/root</literal>.
|
||
Μια τυπική εναλλακτική τοποθεσία θα μπορούσε να είναι το
|
||
<literal>ufs:da0d</literal>, μια υποθετική κατάτμηση
|
||
που περιέχει το παλιό (πριν το Vinum) ριζικό σύστημα αρχείων.
|
||
Αν πρόκειται να χρησιμοποιήσετε μια
|
||
από τις τύπου <literal>"a"</literal> ψευτο-κατατμήσεις που είναι
|
||
στην πραγματικότητα υποδίσκοι της ριζικής συσκευής του Vinum, θα
|
||
πρέπει να είστε προσεκτικός, γιατί αν χρησιμοποιείτε mirror θα
|
||
γίνει προσάρτηση μόνο του ενός τμήματος της συσκευής.
|
||
Αν πρόκειται να προσαρτήσετε αυτή τη συσκευή αργότερα με
|
||
δυνατότητα εγγραφής-ανάγνωσης, είναι απαραίτητο να αφαιρέσετε τα
|
||
υπόλοιπα plex του ριζικού τόμου του Vinum, καθώς αυτά θα περιέχουν
|
||
δεδομένα που δεν είναι σε συγχρονισμό με την κατάτμηση που έχετε
|
||
ήδη προσαρτήσει.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>Φορτώνει Μόνο ο Βασικός Κώδικας Εκκίνησης</title>
|
||
|
||
<para>Αν η φόρτωση του <filename>/boot/loader</filename> δεν είναι
|
||
επιτυχής, αλλά ο βασικός κώδικας εκκίνησης (primary bootstrap)
|
||
φορτώνεται (κάτι που μπορείτε να διαπιστώσετε ελέγχοντας αν
|
||
εμφανίζεται μια παύλα στην πάνω αριστερή γωνία της οθόνης κατά το
|
||
αρχικό στάδιο εκκίνησης), μπορείτε να προσπαθήσετε να διακόψετε
|
||
τη βασική εκκίνηση σε αυτό το σημείο χρησιμοποιώντας το πλήκτρο
|
||
<keycap>space</keycap>. Με αυτό τον τρόπο, η εκκίνηση θα
|
||
σταματήσει στο στάδιο δύο (δείτε το <xref linkend="boot-boot1"/>).
|
||
Μπορείτε εδώ να προσπαθήσετε να εκκινήσετε από μια εναλλακτική
|
||
κατάτμηση, π.χ. την κατάτμηση που περιείχε το ριζικό σύστημα
|
||
αρχείων που μετακινήσατε από το <literal>"a"</literal> όταν
|
||
ξεκινήσατε να χρησιμοποιείτε το Vinum.</para>
|
||
</sect3>
|
||
|
||
<sect3 id="vinum-root-panic">
|
||
<title>Δεν Γίνεται Καμιά Εκκίνηση, ο Κώδικας Εκκίνησης Προκαλεί
|
||
Panic</title>
|
||
|
||
<para>Αυτό μπορεί να συμβεί αν ο κώδικας εκκίνησης καταστραφεί
|
||
από την εγκατάσταση του Vinum. Δυστυχώς, το Vinum την τρέχουσα
|
||
στιγμή αφήνει μόνο 4 KB ελεύθερα στην αρχή της κατάτμησης του
|
||
πριν αρχίσει να γράφει τις πληροφορίες της επικεφαλίδας του.
|
||
Ωστόσο τα στάδια ένα και δύο καθώς και το bsdlabel που
|
||
ενσωματώνεται ανάμεσα τους, χρειάζονται 8 KB. Έτσι, αν μια
|
||
κατάτμηση Vinum ξεκίναγε στην θέση 0 μέσα σε ένα slice ή δίσκο που
|
||
προορίζονταν για εκκίνηση, η εγκατάσταση του Vinum θα κατέστρεφε
|
||
τον κώδικα εκκίνησης.</para>
|
||
|
||
<para>Με τον ίδιο τρόπο, αν η παραπάνω κατάσταση επιδιορθωθεί για
|
||
παράδειγμα ξεκινώντας από ένα CD <quote>Fixit</quote> και
|
||
επανεγκαθιστώντας τον κώδικα εκκίνησης με τη βοήθεια της εντολής
|
||
<command>bsdlabel -B</command> (όπως περιγράφεται στο <xref
|
||
linkend="boot-boot1"/>), ο κώδικας εκκίνησης θα καταστρέψει την
|
||
επικεφαλίδα του Vinum, το οποίο δεν θα μπορεί πλέον να εντοπίσει
|
||
τους δίσκους του. Αν και το παραπάνω δεν καταστρέφει τα δεδομένα
|
||
ρυθμίσεων ή τα πραγματικά δεδομένα που υπάρχουν στους τόμους (και
|
||
η ανάκτηση τους είναι δυνατή αν δώσετε ξανά ακριβώς τις ίδιες
|
||
ρυθμίσεις στο Vinum με τις αρχικές σας), η κατάσταση διορθώνεται
|
||
αρκετά δύσκολα. Θα πρέπει να μετακινήσετε ολόκληρη την κατάτμηση
|
||
του Vinum τουλάχιστον κατά 4 KB ώστε να μην υπάρχει σύγκρουση
|
||
μεταξύ της επικεφαλίδας του Vinum και του κώδικα εκκίνησης.</para>
|
||
</sect3>
|
||
</sect2>
|
||
</sect1>
|
||
</chapter>
|