Ένα παράδειγμα διαμόρφωσης LVM σε RAID

Εικόνα: hoo2
Submitted by hoo2 on Τετ, 20/05/2009 - 23:18

Το συγκεκριμένο παράδειγμα εξηγεί πως να στήσουμε ένα σύστημα με RAID και LVM μαζί. Αυτού του είδους το configuration είναι πολύ χρήσιμο για servers.
Ο στόχος μας είναι να δημιουργήσουμε ένα RAID5 array από τρεις άδειους δίσκους. Πάνω σε αυτούς θα δημιουργήσουμε ένα LVM group με 3 partiotion(web1, web2, web3). Αυτό μας δίνει τα εξής πλεονεκτήματα:
- Το RAID 5 παρέχει σημαντικό πλεόνασμα δεδομένων. Αν κάποιο δίσκος παρουσιάσει σφάλμα, τα δεδομένα μας θα παραμείνουν άθικτα και σε αντίθεση με το RAID4 δεν έχει σημασία ποιος δίσκος θα είναι αυτός.
- Χάρη στο LVM, τα partitions είναι μεταβλητού μεγέθους. Αν κάποιος ενθουσιώδεις web-master/designer γεμίσει το web1 μπορούμε να "κλέψουμε" μέγεθος από τα άλλα και να του δώσουμε χώρο να "παίζει"
- Αν ακόμα χρειαστούμε παραπανίσιο χώρο μπορούμε να προσθέσουμε χώρο στο RAID5 και μετά να μεγαλώσουμε το LVM και τα partitions που αυτό περιέχει.

Μόλις δείξουμε το αρχικό configuration, θα περιγράψουμε πως να χειριστούμε δίσκους με σφάλματα και πως να αλλάξουμε μέγεθος σε LVM partitions.

Για το παράδειγμά μας έχουμε 4 sata δίσκους

# fdisk -l

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0000b0e7

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1824    14651248+  83  Linux
/dev/sda2            1825        1958     1076323+  82  Linux swap / Solaris

Disk /dev/sdb: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sdc: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sdd: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

mdadm part
----------------
Ο πρώτος δίσκος περιέχει το λειτουργικό σύστημα (/, swap ). Οι άλλοι τρεις δίσκοι (sdb, sdc, sdd) δεν έχουν partition tables.
Πάμε λοιπόν να κάνουμε από ένα primary partiotion σε κάθε δίσκο που θα καταναλώσει όλο τον ελεύθερο χώρο.


# fdisk /dev/sdb
...
Command (m for help): new
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1958, default 1): <Enter>
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1958, default 1958): <Enter>
Using default value 1958

Command (m for help): type
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): write
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
...
[..ξεδιάντροπη λογοκρισία..]
...

Αφού ολοκληρωθεί αυτή η διαδικασία μπορούμε να μπούμε στα "βαθιά" και να φτιάξουμε το RAID array. Οι περισσότερες διανομές έχουν κάποια έκδοση του mdadm. Σε περίπτωση που αυτή λείπει από το σύστημά σας (κακώς) εγκαταστήστε την. Σε debian/ubuntu θα χρειαστείτε κάτι σαν το:

# aptitude install mdadm

Η παρακάτω εντολή δημιουργεί το array:

# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

Όσο "χτίζεται" το array μπορούμε να δούμε την πρόοδό του κάπως στο αρχείο /proc/mdstat

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
31454976 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[===>.................]  recovery = 15.2% (2402292/15727488) finish=18.4min speed=12049K/sec

unused devices: <none>
...
[..some time..]
...
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[2] sdc1[1] sdb1[0]
31454976 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

Αυτό το αρχείο μας δείχνει την κατάσταση του RAID όπως την αντιλαμβάνεται ο πυρήνας μας. Είναι καλή τακτική να ρίχνουμε ένα μάτι σε αυτό το αρχείο αν αντικαταστήσουμε κάποιο δίσκο ή αν προσθέσουμε έναν.

Μόλις δημιουργηθεί το array "λογικά" θα έχει γίνει και active. Αυτό είναι κάτι που το πραγματοποιεί η εντολή δημιουργίας του array. Το mdadm δεν χρειάζεται configuration αρχείο. Παρόλα αυτά θα χρησιμοποιήσει ένα αν αυτό υπάρχει  (/etc/mdadm/mdadm.conf). Προτείνετε ανεπιφύλαχτα να χρησιμοποιήσουμε ένα. Αυτό γιατί με αυτόν τον τρόπο καταγράφετε το RAID μας και οι administrators έχουν ένα μέρος να κοιτάξουν για πληροφορίες σχετικά με το array. Ένας τρόπος να δημιουργήσουμε το conf αρχείο είναι αφού έχουμε ενεργοποιήσει την συσκευή (/dev/md0). Το mdadm --detail --scan είναι κάτι που βοηθάει σε αυτήν την περίπτωση. πχ:

# echo DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 > /etc/mdadm/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# cat /etc/mdadm/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=276e481c:f663bd22:1073651c:0c2a5fa7

Ένας άλλος τρόπος είναι να ανοίξουμε το αρχείο με έναν editor πχ το vi :D  και να προσθέσουμε με το χέρι τις εγγραφές:

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=276e481c:f663bd22:1073651c:0c2a5fa7

To mdadm πλέον μπορεί να διαβάζει αυτό το αρχείο στο shutdown και στο startup για να διαχειρίζεται το array. Για να ενεργοποιήσουμε το array μπορούμε να δώσουμε

# mdadm -As /dev/md0

και για να το σταματήσουμε:

mdadm -S /dev/md0

LVM part
----------------

Μέχρι στιγμής έχουμε δημιουργήσει ένα array σε RAID5. Τώρα είναι καιρός να ορίσουμε πάνω του λογικά group τόμων (logical volume groups) τα οποία μπορούμε να μεγεθύνουμε και να συρρικνώνουμε κατά βούληση. Η δημιουργία LVM προϋποθέτει τα παρακάτω βήματα:
- Δημιουργία και αρχικοποίηση φυσικών τόμων (physical volumes)
- Προσθήκη φυσικών τόμων σε κάποιο group (volume group)
- Δημιουργία λογικών τόμων (logical volums) μέσα στο group

Όλα τα παραπάνω μπορούμε να τα επιτύχουμε με το εργαλείο LVM2. Αν δεν είναι εγκατεστημένο σε debian/ubuntu μπορoύμε να το εγκαταστήσουμε δίνοντας:

# aptitude install lvm2

Μόλις το εγκαταστήσετε ρίξτε μια ματιά (λέμε τώρα) στο man page (man lvm). Είναι μια πάρα πολύ καλή αρχή για να συνηθίσετε αυτά τα εργαλεία.

Για την ορολογία που χρησιμοποιεί το lvm "φυσικοί τόμοι"(physical volumes) είναι αυτό που συναθροίζεται για να σχηματίσει "ομάδες τόμων"(volume groups). Ο όρος "φυσικός τόμος" είναι κάπως παραπλανητικός γιατί οι φυσικοί τόμοι δεν έχουν άμεση σχέση σε το υλικό(hardware) και τις φυσικές-πραγματικές συσκευές. Μπορούν να είναι δίσκοι, partition δίσκων, ή όπως και στο δικό μας παράδειγμα υψηλού επιπέδου αντικείμενα πχ RAID arrays που έχουν τη δική τους δομή και λειτουργία.
Οι εντολές που χρησιμοποιούνται στα εργαλεία lvm αρχίζουν με γράμματα που "προδίδουν" το level στο οποίο αναφέρονται. Ποιο συγκεκριμένα εντολές που ξεκινάνε με pv αναφέρονται στο φυσικό επίπεδο και χειρίζονται φυσικούς τόμους (physical volumes). Οι εντολές που ξεκινούν με vg αναφέρονται στα volume groups και αυτές που ξεκινούν με lv αναφέρονται στα logical volumes.
Κάποιες παλιότερες εκδόσεις του lvm απαιτούσαν να τρέξουμε την εντολή vgscan σαν αρχικό στάδιο, αλλά αυτό δεν είναι πλέον αναγκαίο. Αντί για αυτό εμείς μπορούμε να αρχικοποιήσουμε την φυσική μας συσκευή δίνοντας pvcreate. Για το συγκεκριμένο παράδειγμα θα χρησιμοποιήσουμε το array /dev/md0 που μόλις δημιουργήσαμε.


# pvcreate /dev/md0

Αυτή η εντολή καταστρέφει όλα τα δεδομένα στις συσκευές και τα partitions οπότε πρέπει να είμαστε προσεκτικοί. Αν και το lvm μας επιτρέπει να δημιουργήσουμε παραπάνω από ένα physical device για κάποιο group, εμείς θα χρησιμοποιήσουμε μόνο ένα για το συγκεκριμένο παράδειγμα. Επομένως μπορούμε πλέον να δημιουργήσουμε και το group volume.

# vgcreate LVM1 /dev/md0

Μπορούμε να δούμε λεπτομέρειες για το group που μόλις δημιουργήσαμε δίνοντας vgdisplay.

# vgdisplay LVM1
--- Volume group ---
VG Name               LVM1
System ID             
Format                lvm2
Metadata Areas        1
Metadata Sequence No  1
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                0
Open LV               0
Max PV                0
Cur PV                1
Act PV                1
VG Size               30.00 GB
PE Size               4.00 MB
Total PE              7679
Alloc PE / Size       0 / 0   
Free  PE / Size       7679 / 30.00 GB
VG UUID               1x6kpp-Rv45-ShWx-38ey-dLli-lmzU-kAZJ92

Το τελευταίο στάδιο είναι να δημιουργήσουμε λογικούς τόμους (logical volumus) μέσα στο group LVM1. Εδώ μπορούμε να διαλέξουμε τα partitions να έχουν όσο μέγεθος θέλουμε. Για το συγκεκριμένο παράδειγμα μια τιμή 5GB είναι μια χαρά. Για να το επιτύχουμε αυτό θα χρειαστούμε την εντολή lvcreate.

# lvcreate -L 5G -n web1 LVM1
# lvcreate -L 5G -n web2 LVM1
# lvcreate -L 5G -n web3 LVM1

Μπορούμε τώρα να δημιουργήσουμε file systems μέσα στα νέα μας partitions και να τα κάνουμε mount στο σύστημά μας.

# mkfs.ext3 -L web1 /dev/LVM1/web1
...snip
# mkfs.ext3 -L web2 /dev/LVM1/web2
...snip
# mkfs.ext3 -L web2 /dev/LVM1/web3
...snip

# mkdir /web1 /web2 /web3

#mount /dev/LVM1/web1 /web1
#mount /dev/LVM1/web2 /web2
#mount /dev/LVM1/web3 /web3

Να σημειώσουμε εδώ ότι μπορούμε να μεταβάλουμε το μέγεθος από αυτά τα partitions χωρίς να χάσουμε δεδομένα πολύ εύκολα.

Αυτό ήταν!!! Μπορούμε πλέον να δούμε τα partition μας και ακόμα να προσθέσουμε εγγραφές στο /etc/fstab ώστε να γίνετε αυτόματα το mount στην εκκίνηση του συστήματός μας. Ένα reboot θα μας πείσει ότι όλα δουλεύουν όπως πρέπει.

0
Your rating: None