Ένα παράδειγμα διαμόρφωσης LVM σε RAID
Το συγκεκριμένο παράδειγμα εξηγεί πως να στήσουμε ένα σύστημα με 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 θα μας πείσει ότι όλα δουλεύουν όπως πρέπει.
Active forum topics
- Wake up from suspend mode failed
- Οργάνωση στις μεταφράσεις των ελληνικών στο Debian.
- απορια σχετικα με nvidia440
- πρόβλημα εγκατάστασης nvidia driver GTS250.
- kernel 2.6.38 για squeeze
- Gnome3
- 2 μήνες σπασμένο το upgrade σε unstable [SOLVED]
- Οι χρήστες του Internet Explorer είναι χαζοί;
- Debian Lenny + Nvidia drivers
- εγκατασταση usb cosmote
New forum topics
Νέοι χρήστες
- kountp
- Adonthegreat
- giorgos_m
- prodromos
- airmaik
Οι πιο πρόσφατες καταχωρίσεις blog.
- Fosscomm 2012
- armhf officially into Debian!
- back from UDS/Linaro Connect...
- FTF is over, Linaro Interview
- straight from FTF 2011, San Antonio...
- Όσο μεγαλώνεις μαθαίνεις...
- Emdebian 2011 Sprint report, Genesi Europe store goes online...
- Θεσσαλονίκη - open source ERP workshop
- Χρήσιμο URL για Flash Cards και Linux filesystems
- Cambridge, UK, ARM HQ for Emdebian 2011 Sprint