Software RAID

Co to jest RAID? Według definicji, którą podaje serwis Wikipedia, jest to sposób wykorzystywania w systemie komputerowym min. dwóch dysków twardych, które współpracują ze sobą.

Konfiguracje RAID znane są już od bardzo dawna. Podłączenie kilku dysków (min. 2) w jedną całość zapewnia: – Zwiększenie odporności na awarie, – Przyśpieszenie transmisji, – Zwiększenie przestrzeni, dostępnej jako jedna całość.

Bez względu na to jakie dyski wykorzystujemy RAID możemy podzielić na dwie kategorie tzn. sprzętowe i softwarowe.

Różnice miedzy tymi dwoma kategoriami są ogólnodostępne np. w Wikipedii, znajdziemy tam również informację na temat poziomu RAID tzn, RAID 0, 1, 2, 3, 4, 5, 6 czy też RAID 0+1,1+0, 50, 60.

Ja natomiast zajmę się omówieniem RAIDu softwarowego na przykładzie systemu operacyjnego Linux Centos 7.x.

Zaczynamy od instalacji pakietu mdadm, a więc:

yum -y install mdadm

Pakiet zostanie zainstalowany. Zaczynamy od utworzenia pierwszego RAIDu softwarowego. Załóżmy, że zakładamy RAID1 składający się z dwóch dysków. Najpierw sprawdzamy jakie dyski posiadamy w systemie:

fdisk -l

otrzymujemy wynik

root@localhost ~]# fdisk -l

Dysk /dev/sda: 94.5 GB, bajtów: 94483545600, sektorów: 184538175
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x0003fe20

Urządzenie Rozruch   Początek      Koniec   Bloków   ID  System
/dev/sda1   *        2048    31459327    15728640   83  Linux
/dev/sda2        31459328    35653631     2097152   82  Linux swap / Solaris
/dev/sda3        35653632    67110911    15728640   83  Linux
/dev/sda4        67110912   184537087    58713088    5  Extended
/dev/sda5        67112960    71307263     2097152   82  Linux swap / Solaris

Dysk /dev/sdb: 107.4 GB, bajtów: 107368857088, sektorów: 209704799
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512


Dysk /dev/sdc: 106.6 GB, bajtów: 106595475968, sektorów: 208194289
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512


Jak widzimy posiadamy dwa dyski twarde /dev/sdb o pojemności 107,4 GB oraz drugi dysk /dev/sdc o pojemności 106,6 GB. Oba dyski są puste i nie posiadają nawet układu partycji. Zwróćmy uwagę, że dyski nieznacznie różnią się pojemnością.

Teraz zaczynamy tworzyć nowa partycję. Niech to będzie dla dysku /dev/sdc partycja 1 (/dev/sdc1) o maksymalnej pojemności oraz dla dysku /dev/sdb partycja o pojemności nowo utworzonej partycji /dev/sdc1.

fdisk /dev/sdc

otrzymujemy ekran

Witamy w programie fdisk (util-linux 2.23.2).

Zmiany pozostaną tylko w pamięci do chwili ich zapisania.
Przed użyciem polecenia zapisu prosimy o ostrożność.
Urządzenie nie zawiera żadnej znanej tablicy partycji
Tworzenie nowej etykiety dysku DOS-a z identyfikatorem dysku 0x8548dfc6.

Polecenie (m wyświetla pomoc): m

wybieramy 'm’ następnie 'n’ w celu utworzenie nowej partycji

Polecenie
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Polecenie (m wyświetla pomoc): n

wybór potwierdzamy klawiszem enter. Określamy typ partycji

Typ partycji:
   p   główna (głównych: 0, rozszerzonych: 0, wolnych: 4)
   e   rozszerzona
Wybór (domyślne p): p

niech będzie to partycja główna – klawisz p Następnie podajemy kolejno – Numer partycji: 1, pierwszy sektor, oraz ostatni sektor.

Numer partycji (1-4, domyślnie 1): 1
Pierwszy sektor (2048-208194288, domyślnie 2048): 
Przyjęto wartość domyślną 2048
Ostatni sektor, +sektorów lub +rozmiar{K,M,G} (2048-208194288, domyślnie 208194288): 
Przyjęto wartość domyślną 208194288
Partycja 1 typu Linux o rozmiarze 99,3 GiB ustawiona

Jak widzimy partycja została utworzona. Teraz należy jej jeszcze nadać odpowiedni typ oraz zapisać zmiany w całym układzie partycji na dysku twardym.

W programie fdisk powinno nadal wyświetlać się pole z oczekiwaniem na polecenie.

Polecenie (m wyświetla pomoc): t

wybieramy 't’ aby określić rodzaj partycji.

system prosi nas o kod szesnastkowy który określa typ partycji. Całą listę możemy podejrzeć nacisnąć klawisz L i potwierdzając klawiszem Enter. Wyświetli nam się cała lista dostępnych kodów.Typ Linux RAID autodetect jest pod kodem 'fd’ i taką wartość wpisujemy

Kod szesnastkowy (L wyświetla listę wszystkich kodów): fd

system zakomunikuje zmianę:

Zmieniono typ partycji 'Linux' na 'Linux raid autodetect'

dla pewności możemy jeszcze sprawdzić listę zmian wpisując 'p’ w polu:

Polecenie (m wyświetla pomoc): p

całość zapisujemy wpisując literkę 'w’.

W tej chwili po wydaniu polecenia fdisk -l układ dysków prezentuje się w następujący sposób

root@localhost ~]# fdisk -l

Dysk /dev/sda: 94.5 GB, bajtów: 94483545600, sektorów: 184538175
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x0003fe20

Urządzenie Rozruch   Początek      Koniec   Bloków   ID  System
/dev/sda1   *        2048    31459327    15728640   83  Linux
/dev/sda2        31459328    35653631     2097152   82  Linux swap / Solaris
/dev/sda3        35653632    67110911    15728640   83  Linux
/dev/sda4        67110912   184537087    58713088    5  Extended
/dev/sda5        67112960    71307263     2097152   82  Linux swap / Solaris

Dysk /dev/sdb: 107.4 GB, bajtów: 107368857088, sektorów: 209704799
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512


Dysk /dev/sdc: 106.6 GB, bajtów: 106595475968, sektorów: 208194289
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x8548dfc6

Urządzenie Rozruch   Początek      Koniec   Bloków   ID  System
/dev/sdc1            2048   208194288   104096120+  fd  Linux raid autodetect

Jak widzimy została utworzona partycja /dev/sdc1 o startowym bloku 2048 i końcowym 208194288. Ponieważ dyski /dev/sdb i /dev/sdc różnią się pojemnością. Dla dysku /dev/sdb należy przeprowadzić podobną operację z tą różnicą, że w pytaniu o sektor startowy i końcowy należy podać odpowiednio liczby: 2048 i 208194288.

Na tych dwóch dyskach układ jest dość prosty (jest tylko 1 partycja). Ale czasami partycji może być więcej (samych dysków zresztą też). Aby ułatwić sobie zadanie wystarczy skorzystać z oprogramowania sfdisk, a on przekopiuje za nas cały układ partycji uwzględniając sektory początkowe i końcowe. I tak jeżeli chcemy przekopiować układ partycji z dysku /dev/sdc do /dev/sdb należy wydać polecenie:

sfdisk -d /dev/sdc | sfdisk /dev/sdb

W ten sposób mamy już dwie partycje o takich samych wielkościach.

Urządzenie Rozruch   Początek      Koniec   Bloków   ID  System
/dev/sdb1            2048   208194288   104096120+  fd  Linux raid autodetect

Urządzenie Rozruch   Początek      Koniec   Bloków   ID  System
/dev/sdc1            2048   208194288   104096120+  fd  Linux raid autodetect

W tym momencie możemy przejść do właściwego momentu i zaczynamy tworzyć RAID softwarowy. Wystarczy wydać polecenie :

mdadm --create /dev/md0 --level 1 --raid-devices=2  /dev/sdb1 /dev/sdc1

gdzie –create – wydajemy informację że tworzymy nowy RAID /dev/md0 – urządzenie / partycja macierzy RAID –level 1 – oznacza poziom RAIDu czyli RAID 1 (mirroring) /dev/sdb1 /dev/sdc1 – do wykonania RAIDU wykorzystujemy właśnie te dwie partycję.

W tej chwili RAID jest tworzony i następuje synchronizacja dysków. Można ją podejrzeć wydając polecenie:

cat /proc/mdstat

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdc1[1] sdb1[0]
      104030528 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.5% (618560/104030528) finish=8.3min speed=206186K/sec

Jak widzimy synchronizacja danych zostanie zakończona za ok 8 min. Co ciekawe partycja md0 jest już dostępna w systemie i można ją swobodnie sformatować.

Dysk /dev/md0: 106.5 GB, bajtów: 106527260672, sektorów: 208061056
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512

Leave a comment