RAID w Linux, czyli pakiet mdadm

W systemie Linux istnieje możliwość tworzenia na dyskach programowych macierzy RAID poziomów 0, 1, 4, 5, 6, 10, 01. Służy do tego celu usługa mdadm. W przeciwieństwie do macierzy RAID sprzętowych które wymagają specjalnego kontrolera dysków (dość drogiego), macierze RAID programowe zakłada się na dyskach podłączonych do zwykłego kontrolera IDE, SATA lub SCSI i całą obsługę przekazuje do odpowiedniego oprogramowania (np: mdadm).

Macierze możemy zakładać zarówno na całych dyskach, jak i na odpowiednio przygotowanych partycjach, przy czym zakładanie na partycjach daje więcej możliwości konfiguracji. Zarówno korzystając z całych dysków jak i partycji należy pamiętać o tym że najmniejsza partycja lub dysk decyduje o wielkości zakładanej macierzy (miejsce ponad jest tracone), dlatego też należy raczej korzystać z takich samych rozmiarów dysków lub partycji.

Poniżej zamieszczono listę i opis dostępnych rodzajów macierzy dla mdadm, w nawiasach podano nazwy parametrów programu:

  • RAID 0 (raid0, 0, stripe) - striping czyli połączenie dwóch dysków (partycji) z przeplotem danych, zwiększa się wydajność w porównaniu z pojedynczym dyskiem, obniża odporność na awarie dysków - awaria jednego dysku to utrata wszystkich danych.

  • RAID 1 (raid1, 1, mirror) - kopie lustrzane, dyski są w dwóch jednakowych kopiach, w przypadku awarii jednego drugi przejmuje role pierwszego. Wydajność tak jak pojedynczy dysk, duże bezpieczeństwo, wadą jest duża strata pojemności (n/2 - n-liczba dysków w macierzy)

  • RAID 4 (raid4, 4) - dane są rozpraszane na kolejnych dyskach a na ostatnim zapisywane są dane parzystości, zwiększone bezpieczeństwo danych przy zachowaniu dużej pojemności (n-1). Wymaga przynajmniej trzech dysków, wydajność ograniczona przez dysk parzystości

  • RAID 5 (raid5, 5) - rozpraszane są zarówno dane jak i informacje o parzystości na wszystkich dyskach, dzięki czemu wydajność jest wyższa niż w RAID 4; pojemność n-1, wymaga przynajmniej trzech dysków.

  • RAID 6 (raid6, 6) - jest to rzadko stosowana, rozbudowana macierz typu 5. Jedyną różnicą jest dwukrotne zapisanie sum kontrolnych. Dzięki temu macierz może bez utraty danych przetrwać awarię dwóch dysków. Wymaga minimum czterech dysków, jej pojemność to n-2.

  • Tryb liniowy (linear) - czyli połączenie dwóch dysków w jeden w ten sposób że koniec pierwszego jest początkiem drugiego, nie zapewnia absolutnie żadnego bezpieczeństwa a wręcz obniża odporność na awarie dysków.

Najczęściej stosuje się macierze RAID1 i RAID5, do specyficznych zastosowań używa się RAID0, pozostałe są rzadziej spotykane.

Przystępujemy do zakładania macierzy na partycjach za pomocą polecenia mdadm:

mdadm -C {$dev_RAID} --level={$rodzaj} --raid-devices={$ilość_urzadzen} {$urzadzenia}

 

  • -C, --create - utwórz nową macierz.

  • -l, --level - ustaw poziom RAID np: linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6; Jak możemy zauważyć niektóre opcje są synonimami. Przy opcji Building pierwsze mogą być użyte: raid0, raid1, raid4, raid5.

  • -n, --raid-devices - liczba aktywnych urządzeń (dysków) w macierzy

  • -x, --spare-devices - liczba zapasowych (eXtra) urządzeń w tworzonej macierzy. Zapasowe dyski można dodawać i usuwać także później.

  • -v --verbose - tryb "gadatliwy"

  • --auto=yes - automatyczne tworzenie urządzeń w /dev/ przez mdadm (stosowane zwykle przy użyciu UDEVa), więcej w Poradach na końcu rozdziału.

Przykłady tworzenia macierzy różnego typu:

  • RAID0 na dwóch partycjach - /dev/sda1 i /dev/sdb1 jako /dev/md0

    # mdadm -C -v /dev/md0 --level=0 -n 2 /dev/sda1 /dev/sdb1

  • RAID1 na dwóch partycjach - /dev/sdc1 i /dev/sdd1 jako /dev/md1

    # mdadm -C -v /dev/md1 --level=1 -n 2 /dev/sdc1 /dev/sdd1

  • RAID5 na 4 partycjach w tym jedna jako zapasowa (hot spare), jeśli nie podasz ile ma być zapasowych partycji domyślnie 1 zostanie zarezerwowana na zapasową

    # mdadm -C -v /dev/md2 --level=5 -n 4 --spare-devices=1 
    /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3



 

Dodawanie do macierzy dyski (raidhotadd)
# mdadm /dev/md0 --add /dev/sdc1

Ustawianie dysku w tryb fail i usuwanie go z macierzy:

# mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
Ciekawy sposób na monitorowanie macierzy:
# nohup mdadm --monitor --mail=sysadmin --delay=300 /dev/md0 &
 


 

Do tego jeszcze przydaje się jakiś program do obsługi partycji.

Istnieje  kilka  różnych programów *fdisk.  Każdy z nich ma swoje problemy i zalety. Prosimy wypróbować ich w następującej kolejności: cfdisk, fdisk, sfdisk.  (Istotnie, cfdisk jest pięknym programem, mającym surowe wymagania co do tablic  partycji,  które akceptuje,  tworzącym  tablice  partycji  wysokiej jakości.  Należy go używać, jeżeli tylko jest taka możliwość.  fdisk jest programem mającym wiele błędów, robiącym mętne rzeczy -- zazwyczaj zdarza mu się dać sensowne wyniki. Jego  pojedynczą  zaletą  jest obsługa  etykiet  dysków  typu  BSD  i innych nie-DOS-owych tablic partycji.  Należy go unikać, jeżeli tylko jest taka możliwość.

sfdisk jest programem tylko dla hakerów -- interfejs użytkownika jest  okropny,  ale  program  jest  poprawniejszy  od  fdiska  i potężniejszy od zarówno fdiska, jak i cfdiska. Co więcej, może być używany nieinterakcyjnie).

Ja polecam sfdisk:

sfdisk -d /dev/hda  > plik_z_ustawieniami

sfdisk /dev/hdb < pllik_z_ustawieniami

i mamy identycznie spartycjonowany drugi dysk.