|
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.
Instalacja
Instalujemy następujące pakiety:
A jeśli zaplanowaliśmy umieszczenie głównego systemu plików
(/) na macierzy, musimy dodatkowo zainstalować pakiet
mdadm-initrd:
oraz możemy opcjonalnie dla dysków ATA przy korzystaniu z
device-mapera zainstalować dodatkowo:
Planowanie macierzy
Dosyć popularnym rozwiązaniem jest utworzenie identycznego zestawu
partycji na każdym z dysków, a następnie spięcie odpowiednich partycji
w macierze. Aby ułatwić sobie zadanie możemy najpierw podzielić jeden z dysków,
a na następne urządzenia skopiować układ tablicy partycji np.:
# sfdisk -d /dev/sdc | sfdisk /dev/sdd |
jak się łatwo domyśleć w powyższym przykładzie kopiujemy z dysku
/dev/sdc na /dev/sdd.
Garść porad:
-
Kernel może być ładowany wyłącznie z macierzy RAID 1, jeśli więc będziemy
chcieli używać np. RAID5 na głównym systemie plików to musimy umieścić
gałąź /boot na osobnej, niewielkiej macierzy RAID1.
Opis konfiguracji bootloadera do obsługi macierzy znajduje się w dalszej
części artykułu.
-
Należy oprzeć się pokusie umieszczenia obszaru wymiany (swap) na RAID0,
gdyż awaria jednego z dysków może doprowadzić do załamania systemu.
-
Urządzenia, z
których składamy macierz powinny być równej wielkości,
w przeciwnym razie wielkość macierzy będzie
wyznaczana przez najmniejszą partycję.
Więcej informacji o podziale na partycje i planowaniu miejsca na dysku
zdobędziemy w tym dokumencie.
Tworzenie macierzy RAID
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 |
Konfiguracja
Po utworzeniu macierzy postępujemy z nią dalej jak z partycją,
czyli zakładamy system plików i odwołujemy się do niej np: jako
/dev/md0 np.:
Teraz możemy dokonać odpowiednich wpisów w pliku
/etc/fstab.
Aby macierz była automatycznie składana przy starcie systemu
musimy dodać odpowiednie wpisy do pliku
/etc/mdadm.conf. Na początek dodajemy wiersz, w którym
wymieniamy listę urządzeń z których budowane są macierze (można używać
wyrażeń regularnych):
DEVICE /dev/sd[abcd][123] |
Następnie dodajemy definicje macierzy, możemy to zrobić automatem:
# mdadm --detail --scan >> /etc/mdadm.conf: |
lub samodzielnie, poprzez dodanie następujących wierszy:
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1
ARRAY /dev/md1 devices=/dev/sdc1,/dev/sdd1
ARRAY /dev/md2 devices=/dev/sda3,/dev/sdb3,/dev/sdc3,/dev/sdd3 |
Macierze (inne niż rootfs) są składane przez
rc-skrypt /etc/rc.d/rc.sysinit,
na podstawie powyższych wpisów konfiguracyjnych, zatem po restarcie
maszyny będziemy już z nich korzystać.
Jeśli mamy macierz z głównym systemem plików, to musimy
jeszcze przygotować initrd i bootloader (poniżej).
Przy ręcznym składaniu macierzy przydane może być polecenie
skanujące urządzenia blokowe w poszukiwaniu istniejących macierzy:
# mdadm --examine --scan -v |
Initrd
Jeśli główny system plików ma być na macierzy to musimy
wygenerować obraz initrd z modułami,
które pozwolą na złożenie macierzy.
Na początek musimy mieć zainstalowany
pakiet mdadm-initrd. Generowanie takiego initrd przebiega
dokładnie tak samo jak dla zwykłego urządzenia blokowego,
musimy się tylko upewnić, że do obrazu trafiły dodatkowo
moduły: md-mod, odpowiednio raid0, raid1... i ewentualnie
xor. Generowanie obrazu initrd szczegółowo zostało opisane
w tym dokumencie.
Bootloader
Jeśli na raidzie ma się znaleźć główny system plików (bez
/boot), to konfiguracja jest identyczna
jak w przypadku klasycznych urządzeń blokowych.
Jeśli gałąź /boot
ma się znaleźć na macierzy (wyłącznie RAID1) to powinniśmy
zainstalować bootloader na każdym z dysków wchodzących w
skład macierzy, dzięki czemu będziemy mogli
uruchomić system mimo awarii jednego z dysków.
RAID0 i RAID2-5 nie są obsługiwane przez
LILO\GRUB
W LILO w pliku /etc/lilo.conf
należy podać odpowiednie
urządzenie dla opcji root i boot:
boot=/dev/md0
raid-extra-boot=mbr-only
image=/boot/vmlinuz
label=pld
root=/dev/md0
initrd=/boot/initrd |
Opcja w opcji raid-extra-boot wskazuje urządzenia
na których ma zostać zainstalowany bootloader (urządzenia wchodzące
w skład /dev/md0). Po zmodyfikowaniu
konfiguracji musimy zaktualizować bootloader
poleceniem lilo.
Jeśli używamy Grub-a wywołujemy
z powłoki:
następnie szukamy gdzie znajdują sie pliki bootloadera,
grub>find /boot/grub/stage1 | jeśli
/boot jest oddzielną partycją to
/grub/stage1 i otrzymujemy wynik, np:
(hd0,0)
(hd1,0)
Now you want to make sure that grub gets installed into the master boot
record of your additional raid drives so that if id0 is gone then the next
drive has a mbr loaded with grub ready to go. Systems will automatically go
in drive order for both ide and scsi and use the first mbr and active
partitions it finds so you can have multiple drives that have mbr's as well
as active partitions and it won't affect your system booting at all.
So using what was shown with the find above and already knowing that hd0
already has grub in mbr, we then run:
Grub>device (hd0)/dev/sda (/dev/hda for ide)
Grub>root (hd0,0)
Grub>setup (hd0) |
i to samo dla dysku drugiego czyli:
Grub>device (hd1) /dev/sdb (/dev/hdb for ide)
Grub>root (hd1,0)
Grub>setup (hd1)
Grub will then spit out all the commands it runs in the background of setup
and will end with a successful embed command and then install command and
end with .. succeeded on both of these commands and then Done returning to
the grub> prompt.
Notice that we made the second drive device 0. Why is that you ask?
Because device 0 is going to be the one with mbr on the drive so passing
these commands to grub temporarily puts the 2nd mirror drive as 0 and will
put a bootable mbr on the drive and when you quit grub you still have the
original mbr on sda and will still boot to it till it is missing from the
system.
You have then just succeeded in installing grub to the mbr of your other
mirrored drive and marked the boot partition on it active as well. This
will insure that if id0 fails that you can still boot to the os with id0
pulled and not have to have an emergency boot floppy. |
Bootloadery szczegółowo opisaliśmy w tym dokumencie.
Diagnostyka
Skrócone informacje o macierzy:
Poniżej podałem przykłady dwóch poleceń, które pozwalają odczytać
dokładne dane macierzy i jej stan:
# mdadm --detail /dev/md0 |
Porady
-
Mając dwie macierze RAID1 np: /dev/md0 i
/dev/md1, możemy utworzyć macierz RAID10 (strip dwóch mirrorów)
jako /dev/md2
# mdadm -C -v /dev/md2 --level=1 -n 2 /dev/md0 /dev/md1 |
analogicznie RAID01 tworzymy mając dwie macierze RAID0.
-
Aby samemu złożyć macierz (z np: PLD Live CD)
wydajemy polecenie, które może wyglądać następująco:
# mdadm -A /dev/md0 /dev/hda /dev/hdb |
-
Jeśli macierz jest składana w trakcie startu systemu
to automatycznie tworzony jest plik urządzenia /dev/mdX.
W trakcie tworzenia macierzy, lub gdy macierz nie startuje wraz z systemem,
możemy skorzystać z gotowych urządzeń w /dev (pakiet dev)
lub samemu je utworzyć (pakiet udev).
Udev nie tworzy urządzeń /dev/md0,
więc musimy w tym celu użyć parametru --auto=yes
w wywołaniach programu mdadm, lub utworzyć je poleceniem
mknod. Urządzeniu nadajemy
major o wartości 9 i kolejny, niepowtarzalny
numer minor.
Nie musimy się martwić o moduły, są on ładowane automatycznie przez mdadm lub
initrd. Więcej o UDEV w tym dokumencie.
-
Wraz z pakietem mdadm dostarczany jest rc-skrypt uruchamiający mdadm
w trybie monitorowania (jako demona). Więcej szczegółów w dokumentacji
programu mdadm.
-
Migracja z pojedynczego dysku na RAID1
Instalacja linuksa na raid1
Naprawa zdegradowanej macierzy
Dodatki
Literatura:
|
|