RAID mdadm

Michał Panasiewicz wolvverine w tarchomin.pl
Sob, 16 Kwi 2005, 04:16:55 CEST


-- 
Michał Panasiewicz
jabber: wolvverine [ at ] chrome [ dot ] pl 
e-mail: wolvverine [ at ] tlen [ dot ] pl , wolvverine [ at ] pld-linux [ dot ] org
http://gielda.linux.pl - chcesz pomóc, przyłącz się :)
-------------- następna część ---------
W systemie linux istnieje możliwość tworzenia na dyskach programowych macierzy RAID poziomów 0-5,10,01. Służy do tego usługa mdadm.
W przeciwieństwie do macierzy RAID sprzętowych które wymagają specjalnego kontrolera macierzowego RAID, macierze RAID programowe zakłada się na dyskach podłączonych do zwykłego kontrolera IDE, SATA lub SCSI.
Różnica polega na tym że w macierzy sprzętowej macierz zakładana jest na dyskach, natomiast w programowej na partycjach dysków.


Instalacja
Instalujemy następujące pakiety za pomocą poldka:

poldek -i mdadm mdadm-initrd

oraz dla dysków ATA przy korzystaniu z device-mapera dodatkowo:

poldek -i dmraid

Tworzenie
Zaczynamy od założenia na każdym dysku który ma wchodzić w skład macierzy RAID takich samych równych partycji, 1 lub kilku na każdym dysku którego chcemy użyć.
na przykład:
mamy 4 dyski podłączone do interfejsu SATA

fdisk /dev/sda
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
p
Selected partition (1-4)
1

podajemy rozmiar pierwszej i tak dla kazdej nastepnej (mogą być 4 partycje primary )
po skończeniu dajemy:

Command (m for help): p
      Device Boot      Start         End   
/dev/sda1               1         382     
/dev/sda2             383        3326   
/dev/sda3            3327        3737   
/dev/sda4            3737        8700   

zapisujemy sobie podział według cylindrów (start i end) potem już wpisujemy tylko przy zakładaniu nastepnych partycji numer 1 cylindra i ostatniego (partycje powinny być równe gdyż i tak w przeciwnym razie wielkość macierzy będzie wyznaczana przez najmniejszą partycję i najlepiej na)
dajemy:

Command (m for help): w

nastepuje zapisanie tablicy partycji na dysk

i tak dla kazdego pozostałego dysku który chcemy użyć do stworzenia macierzy.

przystępujemy do zakładania RAID na partycjach za pomocą polecenia mdadm
z kilkoma opcjami:

-C, --create - Create a new array.
-l, --level= - Set raid level. Options are: linear, raid0, 0, stripe, raid1, 1, mirror, raid5, 4, raid5, 5, multipath, mp. Obviously some of these are synonymous. Only the first 4 are valid when Building.
-n, --raid-devices= number of active devices in array.
-x, --spare-devices= number of spare (eXtra) devices in initial array. Spares can be added and removed later.
-v --verbose - 

macierz RAID0 na dwóch partycjach - /dev/sda1 i /dev/sdb1 jako /dev/md0
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

macierz RAID1 na dwóch partycjach - /dev/sdc1 i /dev/sdd1 jako /dev/md1
mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1

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

mdadm --create --verbose /dev/md2 --level=1 --raid-devices=4 --spare-devices=1 /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3

następnie musimy dodać odpowiednie wpisy w /etc/mdadm.conf np. dla utworzonego wyżej RAID5 i RAID1:

DEVICE /dev/sd[abcd][123]
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

 Czyli: 
- pierwszy wpis definiuje jakie partycje wchodzą do kolejnych raidów
- kolejne definiują macierze /dev/mdx



mając dwie macierze RAID0 np: /dev/md0 i /dev/md1, możemy utworzyć macierz RAID10 jako /dev/md2 

mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/md0 /dev/md1

analogicznie RAID01 tworzymy mając dwie macierze RAID1


po utworzeniu macierzy postępujemy z nią dalej jak z partycją czyli zakładamy system plików i odwołujemy sie do niej np: jako /dev/md0



 jeśli chcemy by system startował z macierzy musimy  dodatkowo do lilo.conf dopisać:
 # cat /etc/lilo.conf:
 boot=/dev/md0
 raid-extra-boot="/dev/sda,/dev/sdb"
 
 image=/boot/vmlinuz
     label=pld
     root=/dev/md0
     initrd=/boot/initrd





Więcej informacji o liście dyskusyjnej pld-doc