+++
title = 'RAID στο Linux'
date = '1999-10-01T00:00:00Z'
description = ''
author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)'
issue = ['Magaz 18']
issue_weight = 5
+++

----------------------------------------------------------------------------------------------------------------------------------------------------------------

*Ποσο εύκολο, ή δύσκολο είναι να φτιάξουμε ένα software RAID στο Linuxάκι μας; Και, αλήθεια, υπάρχει πράγματι λόγος για κάτι τέτοιο; Που θα βρούμε εργαλεία, και
τι πρέπει να προσέξουμε; Όλες αυτές τις ερωτήσεις θα προσπαθήσουμε να απαντήσουμε, μέσα από αυτό το άρθρο-παρουσίαση μίας πραγματικής κατάστασης.*

----------------------------------------------------------------------------------------------------------------------------------------------------------------

Το τελευταίο διάστημα, ακούω συνέχεια γνωστούς και φίλους, να παραπονιούνται για δίσκους που χάλασαν (ακούς Βαγγέλη;). Και όλοι αυτοί οι γνωστοί και φίλοι, πάνε
κάθε λίγο και λιγάκι και περιμένουν τις αντιπροσωπείες, που δεν είναι και υποδείγματα εξυπηρέτησης, να τους αλλάξουν το δίσκο, και, αν βαρεθούν να περιμένουν
καμμία φορά, αγοράζουν καινούριο.\
Το να μείνεις χωρίς δίσκο για κάποιο διάστημα (και συνεπώς χωρίς υπολογιστή), σίγουρα δεν είναι το καλύτερο. Είναι όμως αρκετά καλύτερο από το να χάσεις κάποια
ευαίσθητα δεδομένα. Και, όλοι μας έχουμε δεδομένα που τα θεωρούμε ευαίσθητα. Άλλος το mail του, άλλος τα κείμενα που έχει γράψει, άλλος το βιογραφικό του (!!!)
άλλος κάποιο κώδικα που έχει γράψει για συγκεκριμένη δουλειά κλπ. Επειδή αγχώθηκα, και επειδή έχω την πτυχιακή μου αλλά και μαζεύω επί μήνες υλικό για το Magaz,
επειδή βαριέμαι να ξαναγράφω τα scripts που έχω γράψει, και επειδή, εν τέλει, είμαι πολύ τεμπέλης για να εφαρμόσω ένα σοβαρό σύστημα backup, αποφάσισα να
χρησιμοποιήσω RAID, τουλάχιστον για το partition /home στον υπολογιστάκο μου. Ούτως ή άλλως, ο παλιός μου δίσκος (2.1 Gb ο οποίος παροπλίστηκε όταν πλέον δεν με
χώραγε, και που αντικαταστάθηκε από έναν 6.5 Gb) χρησιμοποιείται για \"χύμα\" αποθήκευση αρχείων, συνεπώς δεν θα μου κόστιζε τίποτα παραπάνω :-) Αντίθετα, η
αγορά 5-6 zip-disks θα μου κόστιζε 10-15 χιλιάδες.\
Βέβαια, για να είμαι και πιο σωστός απεναντί σας, να σας τονίσω ότι πιστεύω ότι **ένα καλοσχεδιασμένο σύστημα-πρόγραμμα backup αποδυκνείεται *ΠΑΝΤΑ*
ανεκτίμητο.**

**1. Tι είναι το Raid;**
-----------------------------------------------

**2. Τι επιλογές έχουμε με το Linux;**
-------------------------------------------------------------

**3. Πως το χρησιμοποιούμε;**
----------------------------------------------------

**4. Επίλογος-βιβλιογραφία**
---------------------------------------------------


### [1. Tι είναι το Raid;]{#s1}

Raid σημαίνει Redundant Array of Inexpensive Disks και υποστηρίζεται από τον ίδιο τον πυρήνα του Linux (με κάποια εξωτερικά προγράμματα). Υπάρχει εδώ και χρόνια
ως υλοποίηση σε διάφορα Unix και με δύο διαφορετικούς τρόπους. Το Hardware Raid (όπου την όλη διαχείριση του RAID αναλαμβάνει ένας hardware controller) και το
Software Raid (όπου όλα γίνονται από το software). Το hardware raid γενικά θεωρείται καλύτερο και αποδοτικότερο (και ταχύτερο) από το software raid, αλλά είναι
πολύ ακριβότερο. Το Linux έχει υποστήριξη στον πυρήνα πάντως για ορισμένους hardware raid controllers. Το Linux επίσης παρέχει δυνατότητα να βρίσκεται σε

### [2. Τι επιλογές έχουμε με το Linux;]{#s2}Tο Linux παρέχει τα εξής επίπεδα software Raid:

-   Linear mode Σε αυτή την περίπτωση, δυο ή περισσότεροι δίσκοι ενώνονται λογικά για να δημιουργήσουν έναν μεγαλύτερο. Συνολικό μέγεθος του λογικού δίσκου, όσο
    το άθροισμα των δίσκων που το αποτελούν.
    -   Προτερήματα\
        Οι δίσκοι μπορούν να είναι εντελώς διαφορετικοί μεταξύ τους, εφόσον η ένωση γίνεται σειριακά (ο ένας \"κολλάει\" πίσω από τον άλλο) χωρίς απώλειες στην
        απόδοση. Έτσι μπορούμε απλά να ενώσουμε μερικούς παλιούς μικρούς δίσκους για να δημιουργήσουμε έναν νέο μεγαλύτερο (προφανώς, εφόσον οι EIDE controllers
        στα περισσότερα από τα μηχανήματά μας, υποστηρίζουν 2 δίσκους ο καθένας, αυτό αναφέρεται σε SCSI δίσκους).
    -   Μειονεκτήματα\
        Δεν υπάρχει κανενός είδους προστασία για απώλεια δεδομένων αλλά συνήθως ούτε καμία ιδιαίτερη αύξηση στην ταχύτητα.
-   Stripe mode (RAID 0) Στην υλοποίηση Raid τύπου 0, οι δίσκοι πάλι ενώνονται μεταξκύ τους όπως και στο Linear mode, αλλά αυτή το φορά οι εγγραφές δεν γίνονται
    σειριακά (πρώτα ο πρώτος δίσκος, μετά ο επόμενος κ.ο.κ) αλλά γίνονται ταυτόγχρονα σε όλους τους δίσκους.
    -   Προτερήματα\
        Η ταχύτητα του RAID 0 για Ν δίσκους μπορεί να είναι Ν-πλάσια από την ταχύτητα του κάθε δίσκου χωριστά. Αυτό βέβαια δεν επιτυγχάνεται ποτέ (είναι μόνο
        θεωρητικό) και πλησιάζεται μόνο με χρήση δίσκων που βρίσκονται σε διαφορετικούς controllers.
    -   Μειονεκτήματα\
        Πάλι δεν υπάρχει κανενός είδους προστασία για απώλεια δεδομένων. Αν χρησιμοποιηθούν δίσκοι πολύ διαφορετικών μεγεθών, μπορεί να παρατηρηθεί μειωμένη
        ταχύτητα (σε σχέση πάντα με ένα καλοστημένο RAID). Αν χρησιμοποιηθούν partitions του ίδιου δίσκου, ή δίσκοι στον ίδιο controller, η διαφορά στην απόδοση
        είναι ανάξια λόγου.
-   Mirroring (RAID 1) Επιτέλους, η πρώτη λύση RAID από όσες μελετάμε, που παρέχει ένα πραγματικό redundancy. Αυτή η μέθοδος, όπως λέει και το όνομά της,
    κρατάει ένα πλήρες αντίγραφο των δεδομένων του ενός δίσκου, στον άλλο (ή στους άλλους, αν χρησιμοποιήσουμε πολλούς δίσκους). Μπορούν επίσης να δηλωθούν και
    spare disks οι οποίοι θα γίνουν μέρος του mirrorset μόλις ένας χαλάσει.
    -   Προτερήματα\
        Παρέχει πάρα πολύ υψηλό επίπεδο redundancy. Μπορεί από ένα raidset να αφαιρεθούν όλοι οι δίσκοι εκτός από έναν, και το set να συνεχίσει να δουλεύει (υπό
        την έννοια ότι είναι διαθέσιμο για εγγραφή - ανάγνωση δεδομένων). Βέλτιστη απόδοση σε αναγνώσεις από τους δίσκους.
    -   Μειονεκτήματα\
        Πρέπει οι δίσκοι να είναι ίδιου μεγέθους (οποισδήποτε δίσκος μεγαλύτερος απλά χρησιμοποιείται ως μικρότερος. Ο υπερβάλλων χώρος δεν χρησιμοποιείται). Σε
        εγγραφές προς το δίσκο, παρατηρείται μία ελαφριά καθυστέρηση (αν και ίσως λογικά νομίζετε ότι θέλει Ν\*χρόνο για εγγραφές - όπου Ν ο αριθμός των
        δίσκων - με μία σωστή υλοποίηση, δηλαδή ξεχωριστοί δίσκοι σε ξεχωριστούς controllers, η καθυστέρηση είναι έως ανύπαρκτη).
-   RAID 4 Σε αυτή την περίπτωση, τα δεδομένα μοιράζονται σε πολλούς δίσκους (σαν το striping) αλλά υπάρχει ένας ακόμα δίσκος, ο οποίος κρατάει parity
    information. Έτσι υπάρχει redundancy, αλλά και μία μείωση στην ταχύτητα.
    -   Προτερήματα\
        Υψηλό redundancy, πιο αποδοτικό από απόδοσης χώρου, από το RAID 1.
    -   Μειονεκτήματα\
        Μεγάλη καθυστέρηση στην ανάγνωση και (κυρίως) στην εγγραφή. Θέλει σωστό σχεδιασμό για να μειωθεί αυτό το πρόβλημα (το bottleneck δημιουργείται προφανώς
        στον parity δίσκο, οπότε πρέπει εκεί να δοθεί ιδιαίτερη προσοχή).
-   RAID 5 Η πλέον χρησιμοποιούμενη υλοποίηση RAID είναι μία μετεξέλιξη του RAID 4, με την διαφορά ότι αντί να κρατάει το parity σε έναν δίσκο, μοιράζει και το
    parity στους επιμέρους δίσκους. Προφανώς παρέχει redundancy υψηλότερη από το RAID 4 (εφόσον εκεί υπάρχει ένα single point of failure, ο δίσκος με την parity
    πληροφορία).
    -   Προτερήματα\
        Υψηλό redundancy, αποδοτικότερο σε χώρο από το RAID 1, γρηγορότερο από το RAID 4.
    -   Μειονεκτήματα\
        Συνεχίζει βέβαια να υπάρχει πρόβλημα απόδοσης, αλλά όχι τόσο μεγάλο όσο στο RAID 4. Πρέπει οι δίσκοι να είναι ίδιας χωρητικότητας.


### [3. Πως το χρησιμοποιούμε;]{#s3}Μέσα από το configuration του πυρήνα πρέπει να έχουμε:

----------------------------------------------------------------------------------------------------------------------------------------------------------------

    Multiple devices driver support ->      CONFIG_BLK_DEV_MD
    Ανάλογα με την υλοποίηση που έχουμε διαλέξει,
    πρέπει να επιλέξουμε και την αντίστοιχη επιλογή στο configuration.
    Linear (append) mode            ->      CONFIG_MD_LINEAR
    RAID-0 (striping) mode          ->      CONFIG_MD_STRIPED
    RAID-1 (mirroring) mode         ->      CONFIG_MD_MIRRORING
    RAID-4/RAID-5 mode              ->      CONFIG_MD_RAID5
    Αν θέλετε να βάλετε τον boot δίσκο σε RAID (μόνο linear ή stripped)
    πρέπει να επιλέξετε και το:
    Boot support (linear, striped)  ->      CONFIG_MD_BOOT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

Θα χρειαστούμε και το software που διαχειρίζεται τα Multiple Devices (ο όρος που χρησιμοποιείται για το software raid) και το οποίο αν δεν το έχετε με το
distribution σας θα πρέπει να το κατεβάσετε από το <ftp://ftp.fi.kernel.org/pub/linux/daemons/raid/>. Προσέξτε γιατί εκεί υπάρχει έκδοση που δουλεύει με τους
stock πυρήνες, και έκδοση που χρειάζεται να περάσουμε patches στον πυρήνα για να δουλέψει. Διαβάστε καλά τα READMEs που υπάρχουν εκεί.

Μετά το reboot (για να δουλέψει ο νέος kernel) θα πρέπει να φτιάξουμε το md, με την εντολή mdadd. Σε αυτή την εντολή δίνουμε ως παραμέτρους τα devices που θα
ενωθούν για να δημιουργήσουν το multiple device, το όνομα του νέου device (/dev/mdX). Προσοχή. αν υπάρχουν δεδομένα σε κάποιον από τους δίσκους που θα
χρησιμοποιηθούν, μπορούν υπό προϋποθέσεις να μην χαθούν. Για άλλη μία φορά, διαβάστε το README. Τέλος, τρέχουμε την εντολή mdrun για να οριστεί το /dev/mdX ως
block device. Τότε δημιουργείται και το πολύ χρήσιμο /proc/mdstat το οποίο μας δίνει πληροφορίες για τα md devices που έχουμε στο σύστημά μας.

Με τα νέα utilities (που χρειάζονται patches στον kernel) το mdrun έχει αφαιρεθεί, και η διαχείριση γίνεται με λίγο διαφορετικό τρόπο.

Μετά από όλα αυτά, είμαστε έτοιμοι να κάνουμε mount το /dev/mdX όπου μας εξυπηρετεί. Για να γίνεται αυτόματα mount κατά το boot, πρέπει απλά να τρέξουμε από ένα
rc.\* script τις εντολές mdadd και mdrun (οι οποίες δαιβάζουν το αρχείο /etc/mdtab και ενεργοποιούν τα raid devices) πριν διαβαστεί το fstab.


### [4. Επίλογος-βιβλιογραφία]{#s4}

Αν και αυτό το άρθρο ξεκίνησα να το γράφω για να είναι ένας τυφλοσούρτης, στην πορεία αποφάσισα ότι είναι κακή ιδέα να παρέχεις τυφλοσούρτη για τόσο σημαντικά
θέματα. Γι αυτό και θα δείτε τόσες φορές μέσα στο άρθρο την φράση \"Διαβάστε το README\". Είναι εύκολο να στήσεις RAID σε Linux, αλλά συνάμα και επικίνδυνο. Σε
περίπτωση που υπάρχουν δεδομένα σε κάποιον από τους δίσκους που θα συμμετάσχει στο Raidset, πρέπει να γίνει backup πριν οποιαδήποτε διαδικασία. Σε ορισμένα RAID
modes μπορεί τα δεδομένα να διατηρηθούν, αλλά μην στηρίζεστε σε αυτό. Αν δεν το χρειάζεστε, μπορείτε προφανώς να το δοκιμάσετε (εξάλλου γι\' αυτό γράφεται αυτό
το άρθρο, αν το χρειάζεστε ξέρετε μάλλον καλύτερα από μένα τι να κάνετε), αλλά προσέξτε τα εξής:\
A) Διαβάστε καλά τα documents και καταλάβετέ τα.\
Β) Πάρτε σε backup τα αρχεία σας.\
Γ) Αφού διαβάσατε αυτό το άρθρο και είδατε ότι σε θέμα απόδοσης, το παν είναι ο σωστός σχεδιασμός, ξαναδιαβάστε το, και μαζί με αυτό και το
Software-RAID-Howto.\
Δ) Ξαναδιαβάστε τα documents και καταλάβετέ τα :-)\
Ε) Καλό raid-ing.

**Βιβλιογραφία**

[Generic RAID overview](http://www.dpt.com/uraiddoc.html)\
[General Linux RAID options](http://linas.org/linux/raid.html)\
[Linux Software RAID tools](ftp://ftp.fi.kernel.org/pub/linux/daemons/raid/)\
[Bootable RAID mini-HOWTO](http://www.linuxdoc.org/HOWTO/Root-RAID-HOWTO.html)\
[Software RAID HOWTO](http://www.linuxdoc.org/HOWTO/mini/Software-RAID.html)

