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