22.9. Χρήση του Vinum στο Ριζικό Σύστημα Αρχείων
Προηγ | Κεφάλαιο 22. Ο Διαχειριστής Τόμων Vinum | Επόμενο

## 22.9. Χρήση του Vinum στο Ριζικό Σύστημα Αρχείων

Σε ένα μηχάνημα στο οποίο έχει γίνει πλήρες mirror στα συστήματα αρχείων με τη χρήση του Vinum, είναι συνήθως επιθυμητό να γίνει mirror και στο ριζικό (root) σύστημα αρχείων. Η ρύθμιση αυτή δεν είναι τόσο απλή όσο σε ένα οποιοδήποτε σύστημα αρχείων, επειδή:

- Το ριζικό σύστημα αρχείων πρέπει να είναι διαθέσιμο από πολύ νωρίς κατά τη διαδικασία εκκίνησης, έτσι είναι απαραίτητο οι υποδομές του Vinum να είναι επίσης διαθέσιμες την ίδια στιγμή.

- Ο τόμος που περιέχει το ριζικό σύστημα αρχείων περιέχει επίσης και τον κώδικα εκκίνησης (bootstrap) και τον πυρήνα, ο οποίος θα πρέπει να είναι προσβάσιμος από βασικά προγράμματα του συστήματος (π.χ. το BIOS σε μηχανήματα τύπου PC), τα οποία δεν γνωρίζουν και δεν μπορούν να μάθουν τις λεπτομέρειες υλοποίησης του Vinum.

Στις επόμενες ενότητες, ο όρος &#x201C;ριζικός τόμος&#x201D; χρησιμοποιείται γενικά για να περιγράψει τον τόμο του Vinum που περιέχει το ριζικό σύστημα αρχείων. Είναι γενικά καλή ιδέα να χρησιμοποιείται το όνομα `"root"` για αυτό τον τόμο, αλλά αυτό δεν αποτελεί τεχνική απαίτηση. Όλα τα παραδείγματα εντολών στις παρακάτω ενότητες χρησιμοποιούν την παραπάνω παραδοχή.

### 22.9.1. Εκκίνηση του Vinum Αρκετά Νωρίς για το Ριζικό Σύστημα Αρχείων

Αυτό μπορεί να επιτευχθεί με διάφορους τρόπους:

- Το Vinum πρέπει να είναι διαθέσιμο στο πυρήνα κατά την εκκίνηση. Για το λόγο αυτό, η μέθοδος αυτόματης εκκίνησης που περιγράψαμε στο Τμήμα 22.8.1.1, &#x201C;Αυτόματη Εκκίνηση&#x201D; δεν μπορεί να χρησιμοποιηθεί σε αυτή την περίπτωση και η παράμετρος `start_vinum` δεν θα πρέπει να τεθεί όταν χρησιμοποιείται η παρακάτω διάταξη. Μια πιθανή επιλογή είναι να μεταγλωττίσετε στατικά το Vinum στον πυρήνα ώστε να είναι διαθέσιμο πάντα, αλλά αυτό συνήθως δεν είναι επιθυμητό. Υπάρχει μια ακόμα διαθέσιμη επιλογή, να ορίσετε να φορτώνεται το άρθρωμα του πυρήνα μέσω του `/boot/loader` (Τμήμα 13.3.3, &#x201C;Στάδιο Τρία, `/boot/loader`&#x201D;) πριν την εκκίνηση του ίδιου του πυρήνα. Αυτό μπορεί να επιτευχθεί με τη γραμμή:

  geom_vinum_load="YES"

  στο αρχείο `/boot/loader.conf`.

- Στο Gvinum, όλη η διαδικασία εκκίνησης γίνεται αυτόματα μετά την φόρτωση του αρθρώματος πυρήνα, έτσι η διαδικασία που περιγράψαμε παραπάνω είναι και η μόνη που απαιτείται.

### 22.9.2. Δημιουργία Ριζικού Τόμου Vinum με Δυνατότητα Πρόσβασης από τον Κώδικα Εκκίνησης (Bootstrap).

Καθώς ο τρέχοντας κώδικας εκκίνησης του FreeBSD έχει μέγεθος μόνο 7.5 KB, και είναι ήδη επιφορτισμένος με την ανάγνωση αρχείων (όπως το `/boot/loader`) από το σύστημα αρχείων UFS, είναι πρακτικά αδύνατο να γνωρίζει και τις απαιτούμενες εσωτερικές δομές του Vinum ώστε να μπορεί να ερμηνεύσει τις αντίστοιχες πληροφορίες ρύθμισης και να μάθει τις λεπτομέρειες του τόμου εκκίνησης. Για το λόγο αυτό, χρειάζεται να χρησιμοποιήσουμε κάποια τεχνάσματα ώστε να δώσουμε στον κώδικα εκκίνησης την ψευδαίσθηση ύπαρξης μιας κανονικής κατάτμησης `"a"` που να περιέχει το ριζικό σύστημα αρχείων.

Για να καταστεί αυτό δυνατό, θα πρέπει να πληρούνται ταυτόχρονα όλες οι παρακάτω προϋποθέσεις όσο αφορά τον τόμο εκκίνησης:

- Ο τόμος εκκίνησης δεν θα πρέπει να είναι stripe ή RAID-5.

- Ο τόμος εκκίνησης δεν θα πρέπει να περιέχει περισσότερους από ένα συνενωμένους υποδίσκους ανά plex.

Σημειώστε ότι είναι συνήθως επιθυμητό και δυνατό να υπάρχουν πολλαπλά plex, καθένα από τα οποία να είναι αντίγραφο του ριζικού συστήματος αρχείων. Η διαδικασία εκκίνησης θα χρησιμοποιήσει ωστόσο μόνο ένα από αυτά τα αντίγραφα για να βρει τον κώδικα εκκίνησης και όλα τα αρχεία, μέχρι να γίνει τελικά η προσάρτηση του ριζικού συστήματος αρχείων από τον ίδιο τον πυρήνα. Κάθε μοναδικός υποδίσκος μέσα σε αυτά τα plex, θα χρειαστεί να διαθέτει τη δική του ψευτο-κατάτμηση `"a"` ώστε η συσκευή να είναι εκκινήσιμη. Δεν είναι απαραίτητο κάθε μια από αυτές τις ψευτο-κατατμήσεις να βρίσκεται στην ίδια θέση μέσα στην συσκευή, σε σχέση με άλλες συσκευές που περιέχουν plex με ριζικό σύστημα αρχείων. Είναι όμως γενικά καλή ιδέα να δημιουργήσετε τους τόμους του Vinum με τέτοιο τρόπο, ώστε οι συσκευές mirror που προκύπτουν να είναι συμμετρικές για να αποφύγετε τη σύγχυση.

Για να δημιουργηθούν αυτές οι τύπου `"a"` κατατμήσεις για κάθε συσκευή που θα περιέχει τμήματα του ριζικού τόμου, θα πρέπει να γίνουν τα ακόλουθα:

1. Θα πρέπει να εξετάσετε τη θέση (την απόσταση από την αρχή της συσκευής) και το μέγεθος της συσκευής υποδίσκου η οποία θα είναι μέρος του ριζικού τόμου, χρησιμοποιώντας την εντολή:

   `#` `gvinum l -rv root`

   Σημειώστε ότι στο Vinum οι θέσεις και τα μεγέθη μετρούνται σε bytes. Θα πρέπει να διαιρέσετε αυτούς τους αριθμούς με το 512 για να βρείτε τους αριθμούς μπλοκ που θα χρησιμοποιήσετε στην εντολή `bsdlabel`.

2. Εκτελέστε την εντολή:

   `#` `bsdlabel -e `devname``

   για κάθε συσκευή που συμμετέχει στο ριζικό τόμο. Το `devname` θα πρέπει να είναι είτε το όνομα του δίσκου (για παράδειγμα `da0`) για δίσκους χωρίς slices (χωρίς δηλ. κατατμήσεις fdisk), ή το όνομα του slice (για παράδειγμα, `ad0s1`).

   Αν υπάρχει ήδη μια κατάτμηση `"a"` στη συσκευή (που πιθανώς περιέχει το ριζικό σύστημα αρχείων που ήταν σε χρήση πριν χρησιμοποιηθεί το Vinum), θα πρέπει να μετονομαστεί σε κάτι άλλο ώστε να εξακολουθεί να είναι προσβάσιμο (σε περίπτωση ανάγκης), αλλά δεν θα χρησιμοποιείται πλέον από προεπιλογή για την εκκίνηση του συστήματος. Σημειώστε ότι οι ενεργές κατατμήσεις (όπως για παράδειγμα ένα ριζικό σύστημα αρχείων το οποίο είναι ήδη προσαρτημένο) δεν μπορούν να μετονομαστούν. Θα πρέπει να εκτελέσετε την εντολή χρησιμοποιώντας την επιλογή &#x201C;Fixit&#x201D; του CD εγκατάστασης, ή να ακολουθήσετε μια διαδικασία δύο βημάτων (σε περίπτωση που έχετε mirror) ξεκινώντας από τον ένα δίσκο και μετονομάζοντας τον άλλο.

   Έπειτα θα πρέπει να προσθέσετε την απόσταση (offset, αν υπάρχει) της κατάτμησης Vinum αυτής της συσκευής, με την απόσταση του υποδίσκου του αντίστοιχου ριζικού τόμου της συσκευής. Η τιμή που θα προκύψει θα είναι η απόσταση (`"offset"`) για τη νέα κατάτμηση `"a"`. Μπορείτε να πάρετε αυτούσια την τιμή `"size"` για αυτή την κατάτμηση από τον υπολογισμό που κάνατε παραπάνω. Το `"fstype"` θα πρέπει να είναι `4.2BSD`. Οι τιμές των `"fsize"`, `"bsize"`, και `"cpg"` θα πρέπει να επιλεχθούν με τέτοιο τρόπο ώστε να ταιριάζουν με το πραγματικό σύστημα αρχείων, αν και δεν έχουν σημασία στη συγκεκριμένη περίπτωση.

   Με αυτό τον τρόπο, θα δημιουργηθεί μια νέα κατάτμηση `"a"` η οποία επικαλύπτει την κατάτμηση του Vinum σε αυτή τη συσκευή. Σημειώστε ότι η εντολή `bsdlabel` θα επιτρέψει αυτή την επικάλυψη μόνο αν η κατάτμηση του Vinum έχει επισημανθεί κατάλληλα με fstype `"vinum"`.

3. Αυτό είναι όλο! Υπάρχει πλέον μια ψευτο-κατάτμηση `"a"` σε κάθε συσκευή η οποία έχει αντίγραφο του ριζικού τόμου. Συνίσταται να επαληθεύσετε ξανά το αποτέλεσμα, χρησιμοποιώντας μια εντολή όπως την παρακάτω:

   `#` `fsck -n /dev/`devname`a`

Θα πρέπει να θυμάστε ότι οι θέσεις των αρχείων που περιέχουν πληροφορίες ελέγχου πρέπει να είναι σχετικές ως προς το ριζικό σύστημα αρχείων που βρίσκεται στο τόμο του Vinum, και ο οποίος (κατά την δημιουργία καινούριου ριζικού τόμου Vinum) μπορεί να μην ταιριάζει με το ριζικό σύστημα αρχείων που είναι ενεργό τη δεδομένη στιγμή. Θα πρέπει ιδιαίτερα να φροντίσετε τα αρχεία `/etc/fstab` και `/boot/loader.conf`.

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

Mounting root from ufs:/dev/gvinum/root

### 22.9.3. Παράδειγμα Ρύθμισης Ριζικού Τόμου με 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). Πρόκειται για μια τυπική ρύθμιση που είναι απαραίτητη για να αποφευχθούν τα προβλήματα που περιγράφηκαν στο Τμήμα 22.9.4.3, &#x201C;Δεν Γίνεται Καμιά Εκκίνηση, ο Κώδικας Εκκίνησης Προκαλεί Panic&#x201D;. Μπορείτε επίσης να δείτε ότι ολόκληρη η κατάτμηση `"a"` περιέχεται αυτούσια μέσα στην `"h"` η οποία και περιέχει όλες τις πληροφορίες Vinum της συσκευής.

Σημειώστε ότι στο παραπάνω παράδειγμα η συσκευή χρησιμοποιείται εξ' ολοκλήρου από το Vinum, και δεν υπάρχει κάποιο κατάλοιπο ριζικής κατάτμησης από παλιότερη χρήση. Αυτό συμβαίνει επειδή πρόκειται για δίσκο που χρησιμοποιήθηκε από την αρχή ως μέρος ενός συστήματος Vinum.

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

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

#### 22.9.4.1. Ο Κώδικας Εκκίνησης Φορτώνεται, Αλλά το Σύστημα δεν Εκκινεί

Αν για οποιοδήποτε λόγο το σύστημα δεν συνεχίζει την εκκίνηση, θα πρέπει να διακόψετε την εκκίνηση μέσα στο χρονικό διάστημα των 10 δευτερολέπτων που εμφανίζεται ο φορτωτής εκκίνησης, πιέζοντας το πλήκτρο space. Μπορείτε να εξετάσετε τις τιμές των μεταβλητών του φορτωτή (όπως η `vinum.autostart`), χρησιμοποιώντας την εντολή `show`, και να τις αλλάξετε με τις εντολές `set` ή `unset`.

Αν το μοναδικό πρόβλημα ήταν η απουσία του αρθρώματος Vinum στη λίστα της αυτόματης φόρτωσης, αρκεί να δώσετε την εντολή `load geom_vinum`.

Όταν είστε έτοιμος, η εκκίνηση μπορεί να συνεχιστεί με την εντολή `boot -as`. Οι επιλογές `-as` θα οδηγήσουν τον πυρήνα να ρωτήσει για το ριζικό σύστημα αρχείων που πρόκειται να προσαρτηθεί (`-a`), και η διαδικασία εκκίνησης θα σταματήσει σε κατάσταση ενός χρήστη (single user, λόγω της επιλογής `-s`), όπου η προσάρτηση του ριζικού συστήματος είναι μόνο για ανάγνωση. Με τον τρόπο αυτό, ακόμα και αν έχει προσαρτηθεί μόνο ένα plex ενός τόμου που αποτελείται από πολλά, δεν υπάρχει κίνδυνος να δημιουργηθεί ασυνέπεια δεδομένων μεταξύ των plex.

Στην προτροπή που εμφανίζεται για το ριζικό σύστημα αρχείων που πρόκειται να προσαρτηθεί, μπορείτε να εισάγετε οποιαδήποτε συσκευή περιέχει ένα έγκυρο ριζικό σύστημα αρχείων. Αν το `/etc/fstab` έχει ρυθμιστεί σωστά, η προεπιλογή θα είναι κάτι σαν `ufs:/dev/gvinum/root`. Μια τυπική εναλλακτική τοποθεσία θα μπορούσε να είναι το `ufs:da0d`, μια υποθετική κατάτμηση που περιέχει το παλιό (πριν το Vinum) ριζικό σύστημα αρχείων. Αν πρόκειται να χρησιμοποιήσετε μια από τις τύπου `"a"` ψευτο-κατατμήσεις που είναι στην πραγματικότητα υποδίσκοι της ριζικής συσκευής του Vinum, θα πρέπει να είστε προσεκτικός, γιατί αν χρησιμοποιείτε mirror θα γίνει προσάρτηση μόνο του ενός τμήματος της συσκευής. Αν πρόκειται να προσαρτήσετε αυτή τη συσκευή αργότερα με δυνατότητα εγγραφής-ανάγνωσης, είναι απαραίτητο να αφαιρέσετε τα υπόλοιπα plex του ριζικού τόμου του Vinum, καθώς αυτά θα περιέχουν δεδομένα που δεν είναι σε συγχρονισμό με την κατάτμηση που έχετε ήδη προσαρτήσει.

#### 22.9.4.2. Φορτώνει Μόνο ο Βασικός Κώδικας Εκκίνησης

Αν η φόρτωση του `/boot/loader` δεν είναι επιτυχής, αλλά ο βασικός κώδικας εκκίνησης (primary bootstrap) φορτώνεται (κάτι που μπορείτε να διαπιστώσετε ελέγχοντας αν εμφανίζεται μια παύλα στην πάνω αριστερή γωνία της οθόνης κατά το αρχικό στάδιο εκκίνησης), μπορείτε να προσπαθήσετε να διακόψετε τη βασική εκκίνηση σε αυτό το σημείο χρησιμοποιώντας το πλήκτρο space. Με αυτό τον τρόπο, η εκκίνηση θα σταματήσει στο στάδιο δύο (δείτε το Τμήμα 13.3.2, &#x201C;Το Στάδιο Ένα, `/boot/boot1`, και το Στάδιο Δύο, `/boot/boot2`&#x201D;). Μπορείτε εδώ να προσπαθήσετε να εκκινήσετε από μια εναλλακτική κατάτμηση, π.χ. την κατάτμηση που περιείχε το ριζικό σύστημα αρχείων που μετακινήσατε από το `"a"` όταν ξεκινήσατε να χρησιμοποιείτε το Vinum.

#### 22.9.4.3. Δεν Γίνεται Καμιά Εκκίνηση, ο Κώδικας Εκκίνησης Προκαλεί Panic

Αυτό μπορεί να συμβεί αν ο κώδικας εκκίνησης καταστραφεί από την εγκατάσταση του Vinum. Δυστυχώς, το Vinum την τρέχουσα στιγμή αφήνει μόνο 4 KB ελεύθερα στην αρχή της κατάτμησης του πριν αρχίσει να γράφει τις πληροφορίες της επικεφαλίδας του. Ωστόσο τα στάδια ένα και δύο καθώς και το bsdlabel που ενσωματώνεται ανάμεσα τους, χρειάζονται 8 KB. Έτσι, αν μια κατάτμηση Vinum ξεκίναγε στην θέση 0 μέσα σε ένα slice ή δίσκο που προορίζονταν για εκκίνηση, η εγκατάσταση του Vinum θα κατέστρεφε τον κώδικα εκκίνησης.

Με τον ίδιο τρόπο, αν η παραπάνω κατάσταση επιδιορθωθεί για παράδειγμα ξεκινώντας από ένα CD &#x201C;Fixit&#x201D; και επανεγκαθιστώντας τον κώδικα εκκίνησης με τη βοήθεια της εντολής `bsdlabel -B` (όπως περιγράφεται στο Τμήμα 13.3.2, &#x201C;Το Στάδιο Ένα, `/boot/boot1`, και το Στάδιο Δύο, `/boot/boot2`&#x201D;), ο κώδικας εκκίνησης θα καταστρέψει την επικεφαλίδα του Vinum, το οποίο δεν θα μπορεί πλέον να εντοπίσει τους δίσκους του. Αν και το παραπάνω δεν καταστρέφει τα δεδομένα ρυθμίσεων ή τα πραγματικά δεδομένα που υπάρχουν στους τόμους (και η ανάκτηση τους είναι δυνατή αν δώσετε ξανά ακριβώς τις ίδιες ρυθμίσεις στο Vinum με τις αρχικές σας), η κατάσταση διορθώνεται αρκετά δύσκολα. Θα πρέπει να μετακινήσετε ολόκληρη την κατάτμηση του Vinum τουλάχιστον κατά 4 KB ώστε να μην υπάρχει σύγκρουση μεταξύ της επικεφαλίδας του Vinum και του κώδικα εκκίνησης.

Προηγ | Πάνω | Επόμενο
22.8. Ρύθμιση του Vinum | Αρχή | Κεφάλαιο 23. Εικονικοποίηση

Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την <questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.