149 γραμμές
18 KiB
Markdown
149 γραμμές
18 KiB
Markdown
|
+++
|
|||
|
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)
|
|||
|
|