Το προφίλ μας στο Google Plus
0

Προχωρημένη χρήση του LVM και πάντρεμα με RAID

Στο άρθρο μας περί storage virtualization παρουσιάζεται ο Logical Volume Manager του Linux κι επιδεικνύεται η δημιουργία ενός LVM array αποτελούμενου από τρεις φυσικούς δίσκους. Η ευελιξία και η δύναμη του LVM γίνονται φανερές ήδη από εκείνο το άρθρο, ωστόσο νομίζουμε ότι αξίζει να προχωρήσουμε μερικά ακόμα βήματα παραπέρα και να δούμε πώς ο ενιαίος, αποθηκευτικός χώρος του LVM array μας είναι δυνατό να μεγαλώνει δυναμικά κι απεριόριστα – εννοείται χωρίς την παραμικρή απώλεια δεδομένων. Αναφορικά με το φλέγον ζήτημα της ασφάλειας, φέρνουμε στο προσκήνιο και την τεχνολογία του RAID και χτίζουμε έναν fileserver με χαρακτηριστικά και δυνατότητες που συναντάμε *μόνο* σε πανάκριβα, εμπορικά συστήματα!

Αποθηκευτικοί χώροι που μεγαλώνουν δυναμικά χωρίς απώλεια δεδομένων, RAID arrays και παντρέματα με τεχνολογίες storage virtualization: Μήπως όλα αυτά επιτυγχάνονται ευκολότερα με το κατάλληλο hardware; Η απάντηση είναι θετική, ωστόσο δεν υπάρχει κανένας λόγος να μπαίνετε σε (μεγάλα) έξοδα. Βλέπετε, ο πυρήνας του Linux έρχεται με τις σχετικές τεχνολογίες ενσωματωμένες και προσφέρει δυνατότητες σαν τις προαναφερθείσες σε επίπεδο software – συχνά χωρίς την παραμικρή επίπτωση στις επιδόσεις! Το μόνο που θα χρειαστείτε για να στήσετε τον ευέλικτο κι ασφαλή fileserver σας είναι η διανομή Linux της προτίμησής σας -εμάς μας αρέσει το Ubuntu Server- καθώς κι ένα τυπικό PC με δύο ή περισσότερους δίσκους. Αν τώρα το motherboard του PC σας έχει τους ελεγκτές και τις βάσεις για να δεχτεί τέσσερις ή περισσότερους δίσκους, τότε ακόμα καλύτερα! Πάντως εμείς για τις ανάγκες της παρουσίασής μας συνεχίζουμε να δουλεύουμε με το VMware VM που παρουσιάσαμε σ’ αυτό το post (Παρεμπιπτόντως, αν δεν το ‘χετε διαβάσει ακόμα, μάλλον πρέπει να το κάνετε τώρα.)

Αλλαγή μεγέθους LV
Ας υποθέσουμε ότι θέλουμε να μεγαλώσουμε το χώρο του Logical Volume (LV) με όνομα /dev/datavg/videolv, π.χ., επειδή το project της μετατροπής σε μορφή MKV όλων των ταινιών που έχουμε σε DVD απαιτεί περισσότερο χώρο απ’ όσο αρχικά είχαμε υπολογίσει. Φταίει βλέπετε και το γεγονός ότι δεν κάνουμε εκπτώσεις στην ποιότητα εικόνας, οπότε μ’ αυτά και με τ’ άλλα το 1TB που ‘χαμε διαθέσει στο LV τώρα αποδεικνύεται λίγο! Πριν αποφασίσουμε πόσο θα μεγαλώσουμε το LV πρέπει πρώτα να μάθουμε πόσος είναι ο διαθέσιμος χώρος στο Volume Group (VG) όπου ανήκει. Αν θυμόσαστε είχαμε φτιάξει μόνο ένα VG, το datavg, επομένως αρκεί να δώσουμε

sub0@ubuntu-srv-testbed:~$ sudo vgdisplay

και να δούμε τ’ αποτελέσματα:

  --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               2.51 TiB
  PE Size               4.00 MiB
  Total PE              657916
  Alloc PE / Size       428544 / 1.63 TiB
  Free  PE / Size       229372 / 895.98 GiB
  VG UUID               oafoNH-wosh-0lJn-qVZV-kRwK-ZcTa-8Ykdju

Παρατηρώντας την προτελευταία γραμμή βλέπουμε ότι το VG έχει περίπου 895GiB διαθέσιμα – μια χαρά! Αποφασίζουμε λοιπόν να μεγαλώσουμε το /dev/datavg/videolv κατά 500GiB κι ευχόμαστε να μη χρειαστεί να το μεγαλώσουμε περισσότερο, τουλάχιστον όχι σύντομα. Όχι δηλαδή ότι θα ‘χουμε πρόβλημα -το LVM δεν μασάει με τέτοια- αλλά να, προτιμούμε να ξοδεύουμε αλλού τον ελεύθερο χρόνο μας ;) Τέλος πάντων, πριν μεγαλώσουμε το LV οφείλουμε να το αποσυνδέσουμε (unmount) από τον αντίστοιχο κατάλογο (/mnt/video):

sub0@ubuntu-srv-testbed:~$ sudo umount /mnt/video

Κατόπιν μεγαλώνουμε το LV μας κατά 500GiB:

sub0@ubuntu-srv-testbed:~$ sudo lvextend -L +500G /dev/datavg/videolv
  Extending logical volume videolv to 1.49 TiB
  Logical volume videolv successfully resized

Σε κλάσματα του δευτερολέπτου το LV επεκτείνεται. Προσοχή όμως γιατί δεν έχει συμβεί το ίδιο και με το filesystem από πάνω του(τύπου Ext4). Δεν πειράζει, κανένα πρόβλημα! Τα εργαλεία που χρειαζόμαστε για την επέκταση ενός Ext4 filesystem είναι τα e2fsck και resize2fs (μην σας θορυβεί το ‘2’, βρίσκεται εκεί για ιστορικούς λόγους):

sub0@ubuntu-srv-testbed:~$ sudo e2fsck -f /dev/datavg/videolv
e2fsck 1.41.11 (14-Mar-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Video: 12/67108864 files (0.0% non-contiguous), 4262937/268435456 blocks

sub0@ubuntu-srv-testbed:~$ sudo resize2fs /dev/datavg/videolv
resize2fs 1.41.11 (14-Mar-2010)
Resizing the filesystem on /dev/datavg/videolv to 399507456 (4k) blocks.
The filesystem on /dev/datavg/videolv is now 399507456 blocks long.

(δώστε man e2fsck και μετά man resize2fs για περισσότερες πληροφορίες). Η αλλαγή μεγέθους του filesystem θα χρειαστεί λίγο χρόνο, ωστόσο κάποια στιγμή θα ολοκληρωθεί. Πληκτρολογήστε

sub0@ubuntu-srv-testbed:~$ sudo mount /mnt/video

για να συνδέσετε ξανά το νέο, μεγαλωμένο partition. Αν θέλετε, δώστε κι ένα

sub0@ubuntu-srv-testbed:~$ df -hT

ώστε να σιγουρευτείτε για την αλλαγή. Άλλη μια επαλήθευση θα πάρετε εξετάζοντας και το VG. Θα δείτε ότι αντί για 895GiB πλέον έχει περίπου 395GiB ελεύθερα. Αν χρειαστεί, παρόμοια μπορούμε να μεγαλώσουμε εκ νέου το /dev/datavg/videolv ή/και κάποιο από τα υπόλοιπα LVs.

Το εργαλείο lvextend που μόλις χρησιμοποιήσαμε είναι αρκετά πιο ευέλικτο απ’ όσο αρχικά δείχνει. Υποθέστε, π.χ., ότι έχουμε μεγαλώσει κι άλλα LVs του VG και τώρα θέλουμε να μεγαλώσουμε το /dev/datavg/backuplv ώστε να πιάσει όλον τον εναπομείναντα χώρο του VG. Κατά τα γνωστά, ξεκινάμε αποσυνδέοντας το filesystem με

sub0@ubuntu-srv-testbed:~$ sudo umount /mnt/backup

Κατόπιν “μεγιστοποιούμε” το LV χωρίς να καθόμαστε και να υπολογίζουμε πόσα ελεύθερα megabyte, gigabyte κ.λπ. έχει το VG από κάτω:

sub0@ubuntu-srv-testbed:~$ sudo lvextend -l +100%FREE /dev/datavg/backuplv
  Extending logical volume backuplv to 805.98 GiB
  Logical volume backuplv successfully resized

(Στο σημείο αυτό κάτι μας λέει ότι θα πληκτρολογήσετε man lvextend. Κάντε το. Αξίζει το διάβασμα.) Τέλος, δεν ξεχνάμε να επεκτείνουμε και το filesystem (Ext4) πάνω από το LV και μετά να προσαρτήσουμε:

sub0@ubuntu-srv-testbed:~$ sudo e2fsck -f /dev/datavg/backuplv
e2fsck 1.41.11 (14-Mar-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Backup: 11/32768000 files (0.0% non-contiguous), 2107224/131072000 blocks

sub0@ubuntu-srv-testbed:~$ sudo resize2fs /dev/datavg/backuplv
resize2fs 1.41.11 (14-Mar-2010)
Resizing the filesystem on /dev/datavg/backuplv to 211283968 (4k) blocks.
The filesystem on /dev/datavg/backuplv is now 211283968 blocks long.

sub0@ubuntu-srv-testbed:~$ sudo mount /mnt/backup

Αντικατάσταση δίσκου από μεγαλύτερο
Είχαμε δεν είχαμε, με τα παραδείγματά μας μεγαλώσαμε όσο παίρνει τα LV και δεν έμεινε καθόλου χώρος στο VG:

sub0@ubuntu-srv-testbed:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               2.51 TiB
  PE Size               4.00 MiB
  Total PE              657916
  Alloc PE / Size       657916 / 2.51 TiB
  Free  PE / Size       0 / 0   
  VG UUID               oafoNH-wosh-0lJn-qVZV-kRwK-ZcTa-8Ykdju

(παρατηρήστε την προτελευταία γραμμή). Φυσικά, κάτι παρόμοιο ενδέχεται να συμβεί και σε αληθινά σενάρια χρήσης. Κι όταν πράγματι συμβεί κι αργότερα αρχίσουμε να βλέπουμε τον ελεύθερο αποθηκευτικό χώρο του LVM array να μειώνεται, τι μπορούμε να κάνουμε; Κάτι που μπορούμε να κάνουμε είναι ν’ αντικαταστήσουμε ένα Physical Volume (PV, ουσιαστικά έναν σκληρό δίσκο) με κάποιο μεγαλύτερης χωρητικότητας. Προφανώς, είναι προτιμότερο ν’ αντικαταστήσουμε το πιο μικρό PV (ουσιαστικά τον πιο μικρό δίσκο).

Κατ’ αρχάς κλείνουμε τον υπολογιστή και σε μια ελεύθερη υποδοχή της μητρικής προσθέτουμε το νέο δίσκο. Κατόπιν τον ανοίγουμε και πάλι. Αν πειραματίζεστε σε VM, εργαστείτε ομοίως: Κλείστε το, προσθέστε του άλλον έναν εικονικό δίσκο με χωρητικότητα μεγαλύτερη από εκείνη του δίσκου που πρόκειται ν’ αντικαταστήσετε και ξεκινήστε το πάλι. Για τη συνέχεια υποθέτουμε ότι ο νέος δίσκος έχει χωρητικότητα 1,5ΤΒ.

Αφού ξεκινήσουμε τον fileserver -εικονικός ή φυσικός δεν έχει καμία σημασία για την παρουσίασή μας- βρίσκουμε το device file του νέου δίσκου πληκτρολογώντας

sub0@ubuntu-srv-testbed:~$ sudo fdisk -l

Εμάς ήταν το /dev/sde:

Disk /dev/sde: 1610.6 GB, 1610612736000 bytes
255 heads, 63 sectors/track, 195812 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sde doesn't contain a valid partition table

Προετοιμάζουμε το δίσκο για προσθήκη στο LVM array μας, αρχικά με το fdisk (τονισμένο με κίτρινο το input του χρήστη):

sub0@ubuntu-srv-testbed:~$ sudo fdisk /dev/sde
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x0d88384c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-195812, default 1): [Enter]
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-195812, default 195812): [Enter] 
Using default value 195812

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sde: 1610.6 GB, 1610612736000 bytes
255 heads, 63 sectors/track, 195812 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0d88384c

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1      195812  1572859858+  8e  Linux LVM

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

Calling ioctl() to re-read partition table.
Syncing disks.

Φτιάχνουμε το νέο PV, το προσθέτουμε στο υπάρχον VG (με όνομα datavg) κι ελέγχουμε τ’ αποτελέσματα:

sub0@ubuntu-srv-testbed:~$ sudo pvcreate /dev/sde1
  Physical volume "/dev/sde1" successfully created
sub0@ubuntu-srv-testbed:~$ sudo vgextend datavg /dev/sde1
  Volume group "datavg" successfully extended
sub0@ubuntu-srv-testbed:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  12
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               3.97 TiB
  PE Size               4.00 MiB
  Total PE              1041914
  Alloc PE / Size       657916 / 2.51 TiB
  Free  PE / Size       383998 / 1.46 TiB
  VG UUID               oafoNH-wosh-0lJn-qVZV-kRwK-ZcTa-8Ykdju

Τέλεια! Το πρώην γεμάτο VG τώρα έχει 1,46TiB διαθέσιμο χώρο! Βέβαια σε λίγα λεπτά θα ‘χει λιγότερο διαθέσιμο χώρο, αφού είναι καιρός ν’ αποσύρουμε σιγά σιγά τον παλιό, μικρό δίσκο. Όχι τίποτε άλλο, αλλά πιάνει άδικα χώρο μέσα στο κουτί. Προς τούτο, φροντίζουμε πρώτα ώστε να μεταφέρουμε όλα τα περιεχόμενα του “παλιού” PV στο καινούργιο. Στο παράδειγμά μας, ο υπό αντικατάσταση δίσκος είναι ο /dev/sdb (μέγεθος 320GB), επομένως μεταφέρουμε δίνοντας

sub0@ubuntu-srv-testbed:~$ sudo pvmove /dev/sdb1 /dev/sde1
  /dev/sdb1: Moved: 1.4%
  /dev/sdb1: Moved: 2.8%
  /dev/sdb1: Moved: 4.0%
  /dev/sdb1: Moved: 5.5%
  /dev/sdb1: Moved: 6.9%
  [...]
  /dev/sdb1: Moved: 94.6%
  /dev/sdb1: Moved: 96.1%
  /dev/sdb1: Moved: 97.5%
  /dev/sdb1: Moved: 98.9%
  /dev/sdb1: Moved: 100.0%

Η διαδικασία θα πάρει λίγη ώρα, αλλά αυτό δεν θα πρέπει να σας ανησυχήσει. Αμέσως μετά, με τη βοήθεια του εργαλείου vgreduce αφαιρούμε το PV /dev/sdb1 από το VG ονόματι datavg κι ελέγχουμε το αποτέλεσμα με το vgdisplay:

sub0@ubuntu-srv-testbed:~$ sudo vgreduce datavg /dev/sdb1
  Removed "/dev/sdb1" from volume group "datavg"
sub0@ubuntu-srv-testbed:~$ sudo vgdisplay
  --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  17
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               3.66 TiB
  PE Size               4.00 MiB
  Total PE              959995
  Alloc PE / Size       657916 / 2.51 TiB
  Free  PE / Size       302079 / 1.15 TiB
  VG UUID               oafoNH-wosh-0lJn-qVZV-kRwK-ZcTa-8Ykdju

Μετά την απομάκρυνση του PV από το VG, ο διαθέσιμος αποθηκευτικός χώρος περιορίζεται στα 1,26 περίπου terabyte (ισχύει 1TB = 0,9095TiB). Πλέον, ακολουθώντας τα βήματα που δείξαμε προηγουμένως μπορούμε να μεγεθύνουμε αναλόγως ένα ή περισσότερα LVs. Πριν αρχίσουμε να χρησιμοποιούμε το /dev/sdb ως έναν τυπικό δίσκο ή πριν τον απομακρύνουμε (φυσικώς) από το κουτί, οφείλουμε πρώτα να τον αποχαρακτηρίσουμε ως Physical Volume:

sub0@ubuntu-srv-testbed:~$ sudo pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped

sub0@ubuntu-srv-testbed:~$ sudo pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               datavg
  PV Size               750.00 GiB / not usable 1.96 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              191999
  Free PE               0
  Allocated PE          191999
  PV UUID               x8JDcH-aKZV-FfZz-GHfC-1JmL-723W-HXwTrY
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               datavg
  PV Size               1.46 TiB / not usable 3.96 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              383998
  Free PE               0
  Allocated PE          383998
  PV UUID               sPvv5N-nHy4-FP94-S5kL-YmG8-F7WU-oWuweA
   
  --- Physical volume ---
  PV Name               /dev/sde1
  VG Name               datavg
  PV Size               1.46 TiB / not usable 3.96 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              383998
  Free PE               302079
  Allocated PE          81919
  PV UUID               EbyWyz-1Ugg-1vgR-djbg-AoNL-aIO3-cOMxur

Όπως βλέπουμε και στο αποτέλεσμα του pvdisplay, ο δίσκος /dev/sdb δεν συμπεριλαμβάνεται πλέον στη λίστα με τα PV. Μπορούμε τώρα να τον απομακρύνουμε από το PC ή να του αλλάξουμε τύπο με το fdisk, να τον διαμορφώσουμε σε όποιο filesystem θέλουμε και να τον χρησιμοποιούμε ως έναν απλό, βαρετό δισκάκο ;-)

Προσθήκη δίσκου στη συστοιχία LVM
Μετά απ’ όσα έχουμε δει, νομίζουμε ότι η απλή προσθήκη ενός νέου PV (νέος δίσκος στο μηχάνημα) στο VG είναι πανεύκολη υπόθεση. Δείτε λοιπόν επί τροχάδην τα βήματα για τον ερχομό ενός νέου δίσκου με χωρητικότητα 2TB (ναι, φορές γινόμαστε αχόρταγοι):

sub0@ubuntu-srv-testbed:~$ sudo fdisk -l 
[...]
Disk /dev/sdb: 2147.5 GB, 2147483648000 bytes *** ο νέος δίσκος είναι ο /dev/sdb ***
255 heads, 63 sectors/track, 261083 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table
[...]

sub0@ubuntu-srv-testbed:~$ sudo fdisk /dev/sdb
[...]
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261083, default 1): [Enter]
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261083, default 261083): [Enter] 
Using default value 261083

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

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

Calling ioctl() to re-read partition table.
Syncing disks.

sub0@ubuntu-srv-testbed:~$ sudo pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
sub0@ubuntu-srv-testbed:~$ sudo vgextend datavg /dev/sdb1
  Volume group "datavg" successfully extended

sub0@ubuntu-srv-testbed:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  18
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               5.62 TiB
  PE Size               4.00 MiB
  Total PE              1471994
  Alloc PE / Size       657916 / 2.51 TiB
  Free  PE / Size       814078 / 3.11 TiB
  VG UUID               oafoNH-wosh-0lJn-qVZV-kRwK-ZcTa-8Ykdju

Στο αποτέλεσμα του προγράμματος vgdisplay, παρατηρήστε τη γραμμή VG Size: 5,62TiB στη διάθεσή μας, το απολύτως ελάχιστο για τις ανάγκες μας :D Επεκτείνετε τα LVs σας χωρίς άγχος κι απολαύστε!

LVM σε συνδυασμό με RAID 1
Όλα καλά μέχρι εδώ – και κάτι μας λέει ότι έχετε αρχίσει τα σχέδια για το δικό σας LVM setup, στον δικό σας fileserver. Πριν αφήσετε το VM κι αρχίσετε να δουλεύετε με αληθινό hardware, αξίζει να εξετάσετε και την περίπτωση του RAID. Για την ακρίβεια, αντί να βάζετε “σκέτα” Physical Volumes στο Volume Group είναι προτιμότερο -από την πλευρά της προστασίας των δεδομένων- να προσθέτετε PVs που αποτελούνται από δύο δίσκους σε διάταξη mirroring (RAID 1, βλ. και δεύτερο σχήμα αυτού του άρθρου). Ουσιαστικά, με δύο δίσκους σε διάταξη RAID 1, ό,τι γράφεται στον έναν γράφεται και στον άλλον. Aν ένας δίσκος παρουσιάσει βλάβη μπορείτε να τον απομακρύνετε από τη διάταξη και να προσθέσετε έναν άλλον (ίδιας) χωρητικότητας. Το array θα αναδημιουργηθεί αυτόματα κι εσείς δεν θα χάσετε ούτε ένα bit. Το μόνο μειονέκτημα του RAID 1 είναι ότι χάνετε σε χωρητικότητα: Αν σε μια συστοιχία RAID 1 συμμετέχουν k στο πλήθος δίσκοι της ίδιας χωρητικότητας, τότε ο χώρος που σας απομένει είναι το 1/k του συνολικού. Για παράδειγμα, οργανώνοντας δύο δίσκους του 2ΤΒ σ’ ένα RAID 1 array, παίρνετε μια αποθηκευτική μονάδα των 2TB. Αν πάντως η ασφάλεια των δεδομένων στον fileserver σας είναι το Α και το Ω, τότε μάλλον θα ‘ναι δύσκολο να γυρίσετε την πλάτη στο RAID 1. Ευτυχώς, ο πυρήνας του Linux παρέχει υποστήριξη για διάφορα επίπεδα RAID, ενώ κάθε διανομή Linux συνοδεύεται κι από τα σχετικά εργαλεία για τη διαχείριση των συστοιχιών RAID.

Για τις ανάγκες της παρουσίασής μας δουλεύουμε μ’ ένα VMware VM με Ubuntu Server, το οποίο φέρει πέντε δίσκους SATA: Έναν μικρό, στον οποίο είναι εγκατεστημένο λειτουργικό κι εφαρμογές και βρίσκονται τα home directories των χρηστών, καθώς κι άλλους τέσσερις, χωρητικότητας 1,5TB έκαστος. Οι μεγάλοι θα οργανωθούν ανά δύο σε RAID 1 και θ’ αποτελέσουν τα δύο PVs που θα συγκροτήσουν ένα VG, πάνω από το οποίο θα φτιάξουμε τα LVs μας κ.λπ. κ.λπ. Θα δημιουργήσουμε ένα μόνο VG με τη μέγιστη δυνατή χωρητικότητα, επομένως λόγω PVs σε RAID 1 το μέγεθός του θα ‘ναι 3TB. Αν φυσικά το απαιτήσουν οι ανάγκες, αργότερα θα μπορούμε να προσθέσουμε κι άλλα (mirrored) PVs στο VG ή να φτιάξουμε και δεύτερο VG, “πατώντας” πάνω σε νέους, “απλούς” δίσκους ή/και σε RAID 1 arrays. Ας αφήσουμε όμως τη φλυαρία.

Εγκαταστήστε το πακέτο mdadm, το οποίο παρέχει το ομώνυμο πρόγραμμα διαχείρισης των RAID arrays:

sub0@ubuntu-srv-testbed:~$ sudo apt-get install mdadm

Αν εμφανιστούν κάποια πλαίσια διαλόγου με ερωτήσεις για το postfix (προτεινόμενο πακέτο), δεχτείτε τα defaults πατώντας [Enter]. Αν δεν θέλετε την εγκατάσταση κανενός προτεινόμενου πακέτου -σίγουρα δεν το χρειαζόμαστε για την παρουσίασή μας-, εκτελέστε το προηγούμενο δίνοντας στο apt-get την παράμετρο –no-install-recommends:

sub0@ubuntu-srv-testbed:~$ sudo apt-get --no-install-recommends install mdadm

Αν χρειαστεί εγκαταστήστε το LVM (μπορεί, π.χ., να πειραματίζεστε μ’ ένα φρέσκο VM):

sub0@ubuntu-srv-testbed:~$ sudo apt-get install lvm2

Δείτε τα device files των δίσκων:

sub0@ubuntu-srv-testbed:~$ sudo fdisk -l
Disk /dev/sda: 85.9 GB, 85899345920 bytes
[...]

Disk /dev/sdb: 1610.6 GB, 1610612736000 bytes
[...]
Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdc: 1610.6 GB, 1610612736000 bytes
[...]
Disk /dev/sdc doesn't contain a valid partition table

Disk /dev/sdd: 1610.6 GB, 1610612736000 bytes
[...]
Disk /dev/sdd doesn't contain a valid partition table

Disk /dev/sde: 1610.6 GB, 1610612736000 bytes
[...]
Disk /dev/sde doesn't contain a valid partition table

Έχουμε λοιπόν τους δίσκους /dev/sdb, /dev/sdc, /dev/sdd και /dev/sde (ο /dev/sda είναι του λειτουργικού).

Σε κάθε έναν από τους /dev/sdb, /dev/sdc, /dev/sdd, /dev/sde φτιάξτε ένα primary partition με μέγεθος ίσο με τη μέγιστη επιτρεπόμενη χωρητικότητα και τύπο Linux RAID autodetect (partition type fd), ώστε τα partitions που προκύπτουν να ‘ναι έτοιμα για χρήση σε RAID arrays. Η δουλειά αυτή επιτυγχάνεται με χρήση του εργαλείου fdisk κι ένα παράδειγμα ειδικά για το δίσκο /dev/sdb φαίνεται παρακάτω. Όπως πάντα, τονισμένο με κίτρινο χρώμα είναι το input του χρήστη.

sub0@ubuntu-srv-testbed:~$ sudo fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x121582fc.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-195812, default 1): [πατήστε Enter]
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-195812, default 195812): [πατήστε Enter] 
Using default value 195812

Command (m for help): t
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): p

Disk /dev/sdb: 1610.6 GB, 1610612736000 bytes
255 heads, 63 sectors/track, 195812 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x121582fc

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      195812  1572859858+  fd  Linux raid autodetect

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

Calling ioctl() to re-read partition table.
Syncing disks.

Προς το τέλος φαίνεται ότι πλέον έχουμε ένα partition τύπου Linux RAID autodetect, με μέγεθος όσο και η χωρητικότητα του δίσκου που το φιλοξενεί. Επαναλάβετε τη διαδικασία για καθέναν από τους άλλους τρεις, μεγάλους δίσκους. Μετά το πέρας της διαδικασίας πληκτρολογήστε

sub0@ubuntu-srv-testbed:~$ sudo fdisk -l

ώστε να βεβαιωθείτε ότι όλα είναι εντάξει (δώστε σημασία στα device names των partitions και στους τύπους τους).

Δημιουργήστε δύο συστοιχίες RAID 1. Η μία θα είναι η /dev/md0 και θ’ αποτελείται από τα διαμερίσματα /dev/sdb1 και /dev/sdc1, ενώ η άλλη θα είναι η /dev/md1 και θ’ αποτελείται από τα διαμερίσματα /dev/sdd1 και /dev/sde1:

sub0@ubuntu-srv-testbed:~$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: array /dev/md0 started.

sub0@ubuntu-srv-testbed:~$ sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1
mdadm: array /dev/md1 started.

Βεβαιωθείτε για την επιτυχή δημιουργία των δύο συστοιχιών:

sub0@ubuntu-srv-testbed:~$ cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sde1[1] sdd1[0]
      1572859776 blocks [2/2] [UU]
      [>....................]  resync =  0.0% (19456/1572859776) finish=6731.2min speed=3891K/sec
      
md0 : active raid1 sdc1[1] sdb1[0]
      1572859776 blocks [2/2] [UU]
      [>....................]  resync =  0.0% (163840/1572859776) finish=2879.4min speed=9102K/sec
      
unused devices: <none>

Από το λογαριασμό του root, κάντε μια απαραίτητη προσθήκη στο αρχείο /etc/mdadm/mdadm.conf ώστε τα δύο RAID arrays να ενεργοποιούνται αυτόματα κατά την εκκίνηση του λειτουργικού:

sub0@ubuntu-srv-testbed:~$ sudo su
[sudo] password for sub0: 
root@ubuntu-srv-testbed:/home/sub0# mdadm --examine --scan >> /etc/mdadm/mdadm.conf
root@ubuntu-srv-testbed:/home/sub0# exit
exit
sub0@ubuntu-srv-testbed:~$

Αν θέλετε να δείτε περισσότερες πληροφορίες για τις δύο συστοιχίες RAID, δώστε

sub0@ubuntu-srv-testbed:~$ sudo mdadm --detail /dev/md0 /dev/md1

Με βάση το άρθρο που δημοσιεύουμε εδώ, φτιάξτε PVs πάνω από τα RAID 1 arrays /dev/md0 και /dev/md1, δημιουργήστε ένα VG από τα δύο αυτά PVs, πάνω απ’ αυτό ορίστε όσα LVs θέλετε, φορμάρετέ τα σε όποιο ή όποια filesystems επιθυμείτε, συνδέστε (mount) τα σε συγκεκριμένους καταλόγους και τέλος ενημερώστε κατάλληλα το /etc/fstab, ώστε τα filesystems να συνδέονται αυτόματα κατά την εκκίνηση του συστήματος. Υπόδειξη: Πριν τα RAID 1 devices /dev/md0 και /dev/md1 χαρακτηριστούν ως PVs δεν χρειάζεται ν’ αποκτήσουν τον τύπο Linux LVM (partition type 8e). Κι ένα τελευταίο: Αν δοκιμάζετε για πρώτη φορά όλα τα παραπάνω, σας ζηλεύουμε :D

Σας άρεσε το άρθρο; Αν ναι, τι θα λέγατε για ένα tip στο PayPal;

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων