Laborator 4. Gestiunea scalabilă a dispozitivelor de stocare

Cunoștințe și abilități ce vor fi dobândite

  • Dispozitive, discuri și volume în Linux
  • Administrarea LVM (Logical Volume Manager)
  • Administrarea software RAID în Linux
  • Criptarea volumelor în Linux

Pregătire infrastructură de laborator

Vom rula o masină virtuală în cloud-ul facultății. Pentru a porni o astfel de masină urmăriți tutorialul de la această adresă. Când creați instanța de mașină virtuală (în fereastra “Launch instance”):

  • La opțiunea Availability zone să alegeți CI sau hp.
  • La opțiunea Instance Boot Source să alegeți Boot from Image.
  • La opțiunea Image Name (apărută după ce efectuați pasul de mai sus) să alegeți imaginea SAISP Template v1.

Pentru Size alegeti m1.medium sau c1.medium

Pentru a pregăti configurația de laborator, pe mașina virtuală folosiți comenzile următoare din contul utilizatorului student:

  • student@mjolnir:~/saisp$ cd saisp/
    student@mjolnir:~/saisp$ wget --user=user-curs --ask-password http://repository.grid.pub.ro/cs/saisp/laboratoare/lab-04.zip
    student@mjolnir:~/saisp$ unzip lab-04.zip

În urma dezarhivării rezultă mai multe fișiere imagine KVM și scripturi de pornire a mașinilor virtuale:

  • Imaginea de bază base.qcow2 este deja în directorul saisp/ și este baza pentru celelalte.
  • Fișierul lvm-main.qcow2 este obținut din base.qcow2 și este folosit pentru pornirea unei configurații pentru LVM.
  • Fișierele lvm-disk1.img și lvm-disk2 sunt fișiere ce reprezintă discuri suplimentare folosite în configurația pentru LVM.
  • Fișierul lvm-start-kvm este un script care va porni mașina virtuală KVM pentru configurația LVM.
  • Fișierul raid-main.qcow2 este obținut din base.qcow2 și este folosit pentru pornirea unei configurații pentru software RAID.
  • Fișierele raid-disk1.img, raid-disk2 și raid-disk3 sunt fișiere ce reprezintă discuri suplimentare folosite în configurația pentru LVM.
  • Fișierul raid-start-kvm este un script care va porni mașina virtuală KVM pentru configurația software RAID.

Vom porni după cum este necesar câte una dintre cele două mașini virtuale KVM. Pentru a porni mașina virtuală pentru LVM vom folosi comanda

student@mjolnir:~/saisp$ ./lvm-start-kvm

La fel, pentru a porni mașina virtuală pentru software RAID vom folosi comanda

student@mjolnir:~/saisp$ ./raid-start-kvm

După pornirea mașinii virtuale KVM, o accesa prin folosirea SSH către adresa IP aferentă. Vom folosi comanda

student@mjolnir:~/saisp$ ssh -l root 192.168.0.2

Detalii rulare masina virtuala KVM local

Detalii rulare masina virtuala KVM local

Pentru a pregăti configurația de laborator va trebui să descărcați pe mașina fizică (mjolnir), în directorul saisp/, arhiva laboratorului (base.qcow2 există deja):

student@mjolnir:~/saisp$ wget --user=user-curs --ask-password http://repository.grid.pub.ro/cs/saisp/laboratoare/base.qcow2
student@mjolnir:~/saisp$ wget --user=user-curs --ask-password http://repository.grid.pub.ro/cs/saisp/laboratoare/lab-04.zip
student@mjolnir:~/saisp$ unzip lab-04.zip

Puteți urma pașii de mai sus pentru a descărca infrastructura KVM pentru laborator pentru lucru acasă.

Exerciții

01. [10p] Investigare LVM

Dorim să investigăm o configurație existentă LVM. Pentru aceasta pornim mașina virtuală aferentă KVM:

student@mjolnir:~/saisp$ ./lvm-start-kvm

și ne conectăm peste SSH pentru a lucra în mașina virtuală:

student@mjolnir:~/saisp$ ssh -l root 192.168.0.2

Mașina virtuală conține o configurație LVM; pachetul lvm2, necesar configurării, este instalat. Pentru a o investiga listăm volumele fizice, grupurile de volume și volumele logice folosind, respectiv comenzile pvs, vgs, lvs:

root@lvm:~# pvs
  PV         VG      Fmt  Attr PSize    PFree
  /dev/sdb1  azeroth lvm2 a--  1020.00m    0
  /dev/sdc1  azeroth lvm2 a--  1020.00m    0
root@lvm:~# vgs
  VG      #PV #LV #SN Attr   VSize VFree
  azeroth   2   3   0 wz--n- 1.99g    0
root@lvm:~# lvs
  LV        VG      Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  arathor   azeroth -wi-a----- 700.00m
  dalaran   azeroth -wi-a----- 840.00m
  lordaeron azeroth -wi-a----- 500.00m

Detalii aflăm folosind comenzile pvdisplay, vgdisplay și lvdisplay:

root@lvm:~# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb1
  [...]
  --- Physical volume ---
  PV Name               /dev/sdc1
  [...]
root@lvm:~# vgdisplay
  --- Volume group ---
  VG Name               azeroth
  [...]
root@lvm:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/azeroth/lordaeron
  [...]
 
  --- Logical volume ---
  LV Path                /dev/azeroth/arathor
  [...]
 
  --- Logical volume ---
  LV Path                /dev/azeroth/dalaran
  [...]

Observăm că în cadrul infrastructurii LVM există două volume fizice (physical volumes): /dev/sdb1 și /dev/sdc1. Aceste două volume fizice sunt angrenate într-un grup de volume denumit azeroth, care este partiționat în trei volume logice denumite arathor, dalaran și lordaeron.

Căile către volumele logice sunt, respectiv /dev/azeroth/arathor, /dev/azeroth/dalaran și /dev/azeroth/lordaeron. Calea către fiecare volum cuprinde numele grupului de volume și apoi numele volumului logic. Acestea sunt, de fapt, link-uri simbolice către fișiere de tip dispozitiv direct din /dev:

root@lvm:~# ls -l /dev/azeroth/lordaeron
lrwxrwxrwx 1 root root 7 Mar 16 16:57 /dev/azeroth/lordaeron -> ../dm-0

02. [10p] Creare entități LVM

Mai avem încă două partiții fizice pe care le putem folosi: /dev/sdb2 și /dev/sdc2. Le vom folosi pentru a crea un nou grup de volum și apoi noi volume logice.

Vom crea grupul de volume kalimdor și volumele logice durotar, ashenvale și tanaris cu dimensiunile respectiv de 1G, 500M, 500M.

Pentru început marcăm volumele fizice ca viitoare componente LVM:

root@lvm:~# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created
root@lvm:~# pvcreate /dev/sdc2
  Physical volume "/dev/sdc2" successfully created

Investigăm crearea acestora folosind comenzile pvs și pvdisplay:

root@lvm:~# pvs
  PV         VG      Fmt  Attr PSize    PFree
  /dev/sdb1  azeroth lvm2 a--  1020.00m    0 
  /dev/sdb2          lvm2 a--     1.00g 1.00g
  /dev/sdc1  azeroth lvm2 a--  1020.00m    0 
  /dev/sdc2          lvm2 a--     1.00g 1.00g
root@lvm:~# pvdisplay
  [...]

Observăm că, pe moment, volumele logice /dev/sdb2 și /dev/sdc2 nu fac parte din nici un volum.

Acum creăm volumul kalimdor din cele două volume fizice:

root@lvm:~# vgcreate kalimdor /dev/sdb2 /dev/sdc2
  Volume group "kalimdor" successfully created

Urmărim configurația grupului de volume nou creat folosind comenzile vgs, respectiv vgdisplay:

root@lvm:~# vgs kalimdor
  VG       #PV #LV #SN Attr   VSize VFree
  kalimdor   2   0   0 wz--n- 1.99g 1.99g
root@lvm:~# vgdisplay kalimdor
  --- Volume group ---
  VG Name               kalimdor

Ulterior creăm și cele trei volume logice:

root@lvm:~# lvcreate -n durotar -L 1G kalimdor 
  Logical volume "durotar" created
root@lvm:~# lvcreate -n ashenvale -L 500m kalimdor 
  Logical volume "ashenvale" created
root@lvm:~# lvcreate -n tanaris -L 500m kalimdor 
  Logical volume "tanaris" created

Apoi folosim comenzile lvs și lvdisplay pentru a afișa informații despre volumele logice create:

root@lvm:~# lvs
  LV        VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  arathor   azeroth  -wi-a----- 700.00m
  dalaran   azeroth  -wi-a----- 840.00m
  lordaeron azeroth  -wi-a----- 500.00m
  ashenvale kalimdor -wi-a----- 500.00m
  durotar   kalimdor -wi-a-----   1.00g
  tanaris   kalimdor -wi-a----- 500.00m
root@lvm:~# lvdisplay
  [...]

În final am folosit patru partiții fizice (/dev/sdb1, /dev/sdc1, /dev/sdb2, /dev/sdc2) pentru a crea două grupuri de volume (azeroth și kalimdor) și trei volume logice pe fiecare grup de volume.

03. [15p] Actualizare volume

Dorim să renunțăm la al doilea grup de volume (kalimdor). Ștergeți acest grup de volume și apoi extindeți grupul de volume azeroth pentru a cuprinde parțiile fizice /dev/sdb2 și /dev/sdc2.

Pentru a extinde un grup de volume folosiți comanda vgextend.

Extindeți dimensiunile volumelor logice de pe grupul azeroth pentru a acoperi întreaga dimensiune a acestuia.

Pentru a extinde un volum logic folosiți comanda lvextend.

04. [10p] Investigare RAID

Dorim să investigăm o configurație existentă RAID. Pentru aceasta pornim mașina virtuală aferentă KVM:

student@mjolnir:~/saisp$ ./raid-start-kvm

și ne conectăm peste SSH pentru a lucra în mașina virtuală:

student@mjolnir:~/saisp$ ssh -l root 192.168.0.2

Mașina virtuală conține o configurație RAID; pachetul mdadm, necesar configurării, este instalat. Pentru a o investiga listăm partițiile RAID aferente urmărim fișierul /proc/mdstat:

root@raid:~# cat /proc/mdstat 
Personalities : [raid0] 
md0 : active raid0 sdd1[2] sdc1[1] sdb1[0]
      3139584 blocks super 1.2 512k chunks
 
unused devices: <none>

Apoi folosimd comanda mdadm cu opțiunile aferent:

root@raid:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Mar 16 19:40:32 2014
     Raid Level : raid0
     Array Size : 3139584 (2.99 GiB 3.21 GB)
   Raid Devices : 3
  Total Devices : 3
 
    [...]
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
 
root@raid:~# mdadm --examine /dev/sdb1
[...]
root@raid:~# mdadm --examine /dev/sdc1
[...]
root@raid:~# mdadm --examine /dev/sdd1
[...]

Avem așadar în array-ul software RAID (/dev/md0) care se bazează pe o trei partiții fizice (/dev/sdb1, /dev/sdc1, /dev/sdd1). Tipul RAID folosit este raid0.

05. [10p] Creare array RAID0

Ne propunem să mai facem, temporar, un array RAID0 care conține două partiții fizice; array-ul se va numi /dev/md1 și va conține partițiile /dev/sdb2 și /dev/sdc2. Ulterior vom șterge configurația.

Creăm array-ul de tip RAID0 conținând cele două partiții:

root@raid:~# mdadm --create /dev/md1 --level=0 --raid-devices=2 /dev/sdb2 /dev/sdc2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

Urmărim configurația creată prin intermediul fișierului /proc/mdstat:

root@raid:~# cat /proc/mdstat
Personalities : [raid0]
md1 : active raid0 sdc2[1] sdb2[0]
      2095104 blocks super 1.2 512k chunks
 
md0 : active raid0 sdb1[0] sdd1[2] sdc1[1]
      3139584 blocks super 1.2 512k chunks
 
unused devices: <none>

Array-ul /dev/md1 este un array de tip RAID0.

Ca să revenim în configurația inițială, vom șterge array-ul și vom anula configurația de pe cele două partiții folosind comenzile de mai jos:

root@raid:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@raid:~# mdadm --zero-superblock /dev/sdb2
root@raid:~# mdadm --zero-superblock /dev/sdc2

În acest moment array-ul a fost dezactivat și putem folosi partițiile /dev/sdb2 și /dev/sdc2.

06. [5p] Creare array RAID5

Ne propunem să creăm un array RAID5 numit /dev/md2. Folosiți partițiile /dev/sdb2, /dev/sdc2 și /dev/sdd2 pentru a realiza acest lucru.

La crearea array-ului RAID5 va dura ceva până când vor fi sincronizate cele trei partiții. Puteți urmări acest lucru prin intermediul comenzi:

root@raid:~# cat /proc/mdstat

07. [10p] Refacere array RAID5

Simulați căderea partiției /dev/sdb2 din array-ul RAID5 /dev/md2. Apoi refaceți array-ul.

Folosiți opțiunile --fail și --remove pentru a dezactiva o partiție. Apoi folosiți opțiunea -add pentru a readăuga partiția în array.

08. [15p] Construire LVM peste RAID

Peste cele două array-uri RAID /dev/md0 și /dev/md2 contruiți un grup de volume LVM. Peste grupul de volume construiți patru volume logice. Formatați primele două volum logice create cu ext4 și montați-le în subdirectoare din /mnt.

Pachetul lvm2 este instalat, necesar pentru configurarea LVM.

09. [15p] Criptare volum LVM

Vrem să criptăm un modul LVM folosind LUKS (Linux Unified Key System). Vom folosi al treilea volum logic creat anterior.

Pachetul cryptsetup, necesar acestui exercițiu este instalat.

Puteți urmări pașii de aici.

Pentru început formatăm volumele cu suport de criptare:

root@raid:~# cryptsetup -v luksFormat /dev/antagarich/tatalia
 
WARNING!
========
This will overwrite data on /dev/antagarich/tatalia irrevocably.
 
Are you sure? (Type uppercase yes): YES
Enter passphrase:
Verify passphrase:
Command successful.

Acolo unde se cere parolă introduceți parola corespunzătoare.

Apoi “deschidem” partiția și furnizăm parola:

root@raid:~# cryptsetup luksOpen /dev/antagarich/tatalia crypto-tatalia
Enter passphrase for /dev/antagarich/tatalia:

Acum avem creat dispozitivul /dev/mapper/crypto-tatalia pe care îl putem folosi. Formatăm dispozitivul cu ext4:

root@raid:~# mkfs.ext4 /dev/mapper/crypto-tatalia

Montăm dispozitivul în /mnt/crypto-tatalia:

root@raid:~# mkdir /mnt/crypto-tatalia
root@raid:~# mount /dev/mapper/crypto-tatalia /mnt/crypto-tatalia
root@raid:~# ls /mnt/crypto-tatalia
lost+found

Ca să încheiem folosirea dispozitivului, întâi îl vom demonta:

root@raid:~# umount /mnt/crypto-tatalia

iar apoi vom “închide” partiția. O nouă deschidere va necesita reintroducerea parolei:

root@raid:~# cryptsetup luksClose crypto-tatalia

Aplicați pașii de mai sus pentru a cripta în mod similar al patrulea volum logic.

10. [BONUS - 10p] Montare automată volum LVM criptat

Configurați fișierele /etc/fstab și /etc/crypttab astfel încât cele două volume logice LVM criptate anterior să fie montate la pornirea sistemului.

Urmăriți indicațiile de aici.

Al patrulea (ultimul) argument din fișierul /etc/crypttab trebuie să fie șirul luks.

saisp/labs/04.txt · Last modified: 2016/03/28 16:27 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0