"Linux plaintext" partition

Giorgos Keramidas keramida at ceid.upatras.gr
Mon May 29 12:45:26 EEST 2006


On 2006-05-28 21:00, Alexandros Kosiaris <alex at noc.ntua.gr> wrote:
> Ερώτηση πάνω στο τελευταίο γιατί αυτές τις μέρες το κοιτάω και
> με έχουν λίγο ζαλίσει αυτό και το geom(βαράει και ο ήλιος
> επίσης...). Από όσο είδα το vinum έχει γίνει droppped στο 6 ενώ
> στο 5 έχει γίνει rewritten για να χωρά κάτω από το geom.  Να
> ασχοληθώ με το vinum ή δεν αξίζει τον κόπο μια και από ότι
> κατάλαβα το αντικαθιστά το geom; Η κάπου κάτι έχασα και δεν
> κατάλαβα καλά;

Το VINUM ήταν μια software RAID υλοποίηση, που υπήρχε μέχρι και
το FreeBSD 4.X.  Η υλοποίησή του ήταν στενά μπλεγμένη με το VFS
layer και τη buffer-cache του πυρήνα, και ο κυρίως maintainer του
ήταν ο Greg Lehey.  Ο ίδιος ο Greg Lehey είχε γράψει και τον πιο
σύντομο, περιεκτικό οδηγό για το VINUM[1].

Ο τρόπος λειτουργίας του VINUM ήταν τέτοιος, που έκανε το VINUM
να κάθεται πάνω από το 'block & buffer layer' του πυρήνα.  Αυτό
ήταν επιτακτική ανάγκη, για να μπορεί το VINUM να διαχειρίζεται &
να ελέγχει πότε κάτι έχει γραφτεί στο δίσκο, με ποιά σειρά, κλπ.

Το GEOM είναι ένα block-device abstraction layer, το οποίο
ξεκίνησε να χρησιμοποιείται στο FreeBSD 5.X περίπου κατά το τέλος
του 2002.  Υπήρξε μια αρκετά μεγάλη περίοδος από bugfixes &
testing, αφού το RELENG_5 branch από το οποίο βγαίνουν οι 5.Χ
εκδόσεις ήταν για πολύ καιρό σε unstable, testing κατάσταση.
Τελικά, πριν το FreeBSD 6.X το GEOM θεωρήθηκε αρκετά σταθερό για
να φτιαχτεί με βάση αυτό το geom_vinum kernel module και το
gvinum εργαλείο διαχείρισης.

Η κυριότερη διαφορά που έχει το GEOM από το αρχικό VINUM είναι
ότι το πρώτο δεν είναι απλά ένα software RAID implementation.
Είναι ένα γενικό object-oriented μοντέλο για διαχείριση block
devices.  Η γενική ιδέα είναι ότι στο τελευταίο layer πριν τα raw
devices υπάρχει το 'block layer' και πάνω από αυτό μπορούν να
'συνδέονται' σε αλυσίδες από provider-consumer διάφορα kernel
modules.  Αυτά τα kernel modules μπορούν να μεταφράζουν, να
μεταφέρουν και να διαχειρίζονται τα block I/O requests με όποιο
τρόπο θέλουν.  Ετσι η εικόνα ενός τυπικού συστήματος είναι:

      +----------------------------+    +----------------------------+
      |           UFS              |	|           UFS              |
      +------------+---------------+	+------------+---------------+
                   |                                 |
              +----+-----+                      +----+-----+
              | ad0s1a   |		        | ad0s1a   |
              | provider |		        | provider |
              |          |		        |          |
              |          |		        |          |
              | ad0s1a   |		        | ad0s1a   |
              | consumer |		        | consumer |
              +----+-----+		        +----+-----+
                   |                                 |
                   +---------------------------------+
                   |
              +----+-----+                                          +----X-----+
              | ad0s1    |	                                    | ad0s1    |
              | provider |	                                    | provider |
              |          |	                                    |          |
              |          |	                                    |          |
              | ad0s1    |	                                    | ad0s1    |
              | consumer |	                                    | consumer |
              +----+-----+	                                    +----+-----+
                   |                                                     |
                   +-----------------------------------------------------+
                   |
              +----+-----+
              | ad0      |
              | provider |
              |          |
              |          |
              | ad0      |
              | consumer |
              +----+-----+
                   |
      +------------+-------------------------------------------------+
      | HARD DISK (antistoixo tou `hda' se Linux)                    |
      +--------------------------------------------------------------+

Το σημαντικό χαρακτηριστικό ενός GEOM chain από provider -
consumer(s) είναι ότι μπορεί να παρεμβάλλονται διάφορα άλλα
modules, που δίνουν επιπλέον χαρακτηριστικά σε ένα υπάρχον
σύστημα από block devices.  Ετσι για παράδειγμα, μπορεί κάποιος
να συνδέσει τους providers από δύο ή περισσότερα ad?s??
partitions κάτω από ένα geom_vinum translation layer, και να
υλοποιήσει RAID:

                         :
                         |
                    +----+-----+
                    | gvinum   |
                    | plex 0   |
                    |          |
                    |          |
                    | ad0s1    |
                    | consumer |
                    +----+-----+
                         |
         +---------------+---------------+
         |               |               |
    +----+-----+    +----+-----+    +----+-----+ ...
    | ad0s1a   |    | ad1s1a   |    | ad2s1a   |
    | provider |    | provider |    | provider |
    |          |    |          |    |          |
    |          |    |          |    |          |
    | ad0s1    |    | ad0s1    |    | ad0s1    |
    | consumer |    | consumer |    | consumer |
    +----+-----+    +----+-----+    +----+-----+
         |	         |               |
         :               :               :

Το gvinum consumer αναλαμβάνει να διαχειριστεί τα 'read' requests
που έρχονται από το gvinum provider και να φέρει το κατάλληλο
disk block από το κατάλληλο 'provider' από κάτω του.  Αυτά τα
providers εδώ είναι disk partitions, αλλά μπορούν άνετα να είναι
απλά block providers από κάποιο άλλο GEOM layer.  Το stacking των
modules ακολουθεί μια δομή κατευθυνόμενου γράφου, οπότε δεν έχει
περιορισμούς όπως π.χ. "υποστηρίζονται μόνο μέχρι 3 layers" ή
κάτι τέτοιο.

Ενα παράδειγμα από layer που δεν κάνει RAID stripping ή mirroring
είναι το encryption.  Μπορεί ο διαχειριστής ενός συστήματος να
παρεμβάλει ανάμεσα από το UFS και το ad0s1a provider ένα
'encryption' layer, με ένα από τα modules gbde (GEOM Based Disk
Encryption) ή geli(8) (ή και τα δύο μαζί, αν και δεν έχει
ιδιαίτερα νόημα μάλλον):

                          :
                          |
                    +-----+------+
                    | ad0s1a.eli |
                    | provider   |
                    |            |
                    |            |
                    | ad0s1.eli  |
                    | consumer   |
                    +-----+------+
                          |
                     +----+-----+
                     | ad1s1a   |
                     | provider |
                     |          |
                     |          |
                     | ad0s1    |
                     | consumer |
                     +----+-----+
          	          |
                          :

Για encrypted RAID support μπορεί, ας πούμε, κάποιος να κάνει τη
συνδεσμολογία που φαντάζεστε:

                    +----+-----+
                    |          |
                    |   UFS    |
                    |          |
                    +----+-----+
                         |
                +--------+----------+
                | gvinum/plex/0.eli |
                |    provider       |
                |                   |
                |                   |
                | gvinum/plex/0.eli |
                |    consumer       |
                +--------+----------+
                         |
                    +----+-----+
                    | gvinum   |
                    | plex 0   |
                    |          |
                    |          |
                    | ad0s1    |
                    | consumer |
                    +----+-----+
                         |
         +---------------+---------------+
         |               |               |
    +----+-----+    +----+-----+    +----+-----+ ...
    | ad0s1a   |    | ad1s1a   |    | ad2s1a   |
    | provider |    | provider |    | provider |
    |          |    |          |    |          |
    |          |    |          |    |          |
    | ad0s1    |    | ad0s1    |    | ad0s1    |
    | consumer |    | consumer |    | consumer |
    +----+-----+    +----+-----+    +----+-----+
         |	         |               |
         :               :               :

Δεν ξέρω πόσο βοηθάει αυτό να καταλάβει κανείς πως δουλεύει το
GEOM (για να το κάνω αυτό θα πρεπε να σας μεταφράσω όλο το
αντίστοιχο κεφάλαιο από το "The Design & Implementation of the
FreeBSD Operating System"[3], κάτι που σίγουρα δεν είναι εύκολο
να γίνει σε ένα mailing list post.  Ίσως θα 'πρεπε να αρχίσω να
σκέφτομαι σε κάποια από τα HELLUG meetings να κάνω καμιά
παρουσίαση, αν υπάρχει ενδιαφέρον :)

[1] http://www.freebsd.org/doc/en_US.ISO8859-1/articles/vinum/article.html

[2] Τα πρώτα commits στο GEOM από τον Poul-Henning Kamp μπήκαν
    στο CVS τον Νοέμβριο του 2002:

        # cd /usr/src/sys/geom
        # cvs -q log | logsort
        ...
        2002.03.11.21.42.35 geom.h 1.1 phk
        2002.03.11.21.42.35 geom_bsd.c 1.1 phk
        2002.03.11.21.42.35 geom_dev.c 1.1 phk
        2002.03.11.21.42.35 geom_disk.c 1.1 phk
        2002.03.11.21.42.35 geom_dump.c 1.1 phk
        2002.03.11.21.42.35 geom_event.c 1.1 phk
        2002.03.11.21.42.35 geom_io.c 1.1 phk
        2002.03.11.21.42.35 geom_kern.c 1.1 phk
        2002.03.11.21.42.35 geom_mbr.c 1.1 phk
        2002.03.11.21.42.35 geom_mbrext.c 1.1 phk
        2002.03.11.21.42.35 geom_slice.c 1.1 phk
        2002.03.11.21.42.35 geom_slice.h 1.1 phk
        2002.03.11.21.42.35 geom_subr.c 1.1 phk
        ...

[3] Marshall Kirk McKusick, George Neville-Neil.  "The Design and
    Implementation of the FreeBSD Operating System".  Addison
    Wesley Professional, Aug 2004.  ISBN: 0201702452
    <http://www.awprofessional.com/title/0201702452>




More information about the Linux-greek-users mailing list