wtorek, 19 października 2010

Dodanie nowego dysku do macierzy RAID 1, po awarii jednego z dysków

Co zrobić gdy wypadnie nam jeden dysk z RAID'u.

Mam skonfigurowany na maszynie wirtualnej RAID z następującym układem partycji:
/dev/md2 6,3G 1,1G 5,0G 18% /
/dev/md0 992M 40M 902M 5% /boot
tmpfs 292M 0 292M 0% /dev/shm


Miałem skonfigurowany RAID 1 (odbicie lustrzane pierwszego dysku na dysku drugim).
Usunąłem drugi dysk twardy z maszyny wirtualnej i dodałem trzeci dysk (konfiguracja tak, jakby była awaria drugiego dysku i dołożyłbym po prostu inny dysk).

Wynik wykonania polecenia cat /proc/mdstat:
Personalities : [raid1]
md0 : active raid1 hda1[0]
1048704 blocks [2/1] [U_]

md1 : active raid1 hda2[0]
524096 blocks [2/1] [U_]

md2 : active raid1 hda3[0]
6815488 blocks [2/1] [U_]



Jak widać każda partycja jest dodana do RAID'u (/, /boot, tmpfs).
Informacje widoczne w nawiasie [U_] oznaczają awarię dysku drugiego a w szczególności znak "_" przez niektórych nazywany podkreślnikiem .

Sprawdzam za pomocą fdisk -l czy nowo dodany dysk jest widoczny i jakie ma przypisane oznaczenia.
w moim przypadku jest to hdd
kopiuje układ partycji z hda na hdd:
sfdisk -d /dev/hda | sfdisk /dev/hdd
Checking that no-one is using this disk right now ...
OK

Disk /dev/hdd: 16644 cylinders, 16 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/hdd: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
/dev/hdd1 * 63 2097647 2097585 fd Linux raid autodetect
/dev/hdd2 2097648 3145967 1048320 fd Linux raid autodetect
/dev/hdd3 3145968 16777151 13631184 fd Linux raid autodetect
/dev/hdd4 0 - 0 0 Empty
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)

Przystępuję do odbudowania macierzy:
mdadm /dev/md0 -a /dev/hdd1
mdadm: added /dev/hdd1

Sprawdzam czy wszystkiego nie popsułem:
cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hdd1[2] hda1[0]
1048704 blocks [2/1] [U_]
[===============>.....] recovery = 76.7% (806528/1048704) finish=0.1min speed=36660K/sec

md1 : active raid1 hda2[0]
524096 blocks [2/1] [U_]

md2 : active raid1 hda3[0]
6815488 blocks [2/1] [U_]

Jak widać, wszystko wydaje się przebiegać pomyślnie.
Po chwili jeszcze raz sprawdzam czy wszystko ok:
cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hdd1[1] hda1[0]
1048704 blocks [2/2] [UU]

md1 : active raid1 hda2[0]
524096 blocks [2/1] [U_]

md2 : active raid1 hda3[0]
6815488 blocks [2/1] [U_]

unused devices:



Teraz dodaję root'a czyli "/":
mdadm /dev/md2 -a /dev/hdd3
mdadm: added /dev/hdd3

Sprawdzam postęp odbudowy macierzy:
md0 : active raid1 hdd1[1] hda1[0]
1048704 blocks [2/2] [UU]

md1 : active raid1 hda2[0]
524096 blocks [2/1] [U_]

md2 : active raid1 hdd3[2] hda3[0]
6815488 blocks [2/1] [U_]
[==>..................] recovery = 13.5% (924736/6815488) finish=3.4min speed=28689K/sec


Po zakończeniu cat /proc/mdstat pokazuje następujące informacje:
Personalities : [raid1]
md0 : active raid1 hdd1[1] hda1[0]
1048704 blocks [2/2] [UU]

md1 : active raid1 hda2[0]
524096 blocks [2/1] [U_]

md2 : active raid1 hdd3[1] hda3[0]
6815488 blocks [2/2] [UU]

unused devices:

Pozostaje jeszcze dodać md1 czyli tmpfs do RAID'a:
mdadm /dev/md1 -a /dev/hdd2
mdadm: added /dev/hdd2


Pozostaje jeszcze sprawdzenie czy wszystko jest teoretycznie ok:
md0 : active raid1 hdd1[1] hda1[0]
1048704 blocks [2/2] [UU]

md1 : active raid1 hdd2[1] hda2[0]
524096 blocks [2/2] [UU]

md2 : active raid1 hdd3[1] hda3[0]
6815488 blocks [2/2] [UU]

unused devices:

Wygląda na to że się udało. Coś za łatwo poszło :/.
No to przeprowadzę jeszcze crash test, uruchomienie systemu z /dev/hdd, hda będzie odłączony całkowicie.

Lol wiedziałem, że coś za łatwo poszło, przy uruchomieniu z hdd pojawił się komunikat FATAL: No bootable medium found! System halted.

Najprawdopodobniej trzeba jeszcze zainstalować gruba (uruchamiam system z dwoma podłączonymi dyskami twardymi).
Zastosowałem do tego celu metodę delikatną (metoda mniej delikatna jest wykonywana za pomocą dd):
grub
root (hd1,0)
setup (hd1)

Pojawiło się kilka komunikatów, na końcu było succeeded więc, więc odłączam hda zostawiam hdd i sprawdzam co się będzie działo.

Tadam działa, system uruchomił się normalnie.

Sprawdzam czy faktycznie wykaże, że system został uruchomiony z drugiego dysku:
cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hda1[1]
1048704 blocks [2/1] [_U]

md1 : active raid1 hda2[1]
524096 blocks [2/1] [_U]

md2 : active raid1 hda3[1]
6815488 blocks [2/1] [_U]

Jak widać wykazuje, że wszystko jest ok brakuje pierwszego dysku.

Jeżeli będziecie kiedykolwiek komuś konfigurować RAID'a najlepiej jest od razu zainstalować grub'a na drugim dysku, oszczędzicie sobie sporo czasu w przyszłości gdy padnie dysk pierwszy.

sobota, 2 października 2010

uruchomienie raid 1 na CentOS'ie podczas instalacji systemu

Do niedawna nie miałem okazji zainstalować RAID'a na żadnym z moich komputerów.
Na szczęście praca wymusza przyśpieszenie nauki wielu interesujących zagadnień w najmniej odpowiednich momentach.

Poniżej opiszę proces uruchomienia RAID 1 na Linux'ie CentOS podczas instalacji systemu.

Podstawowe założenia dotyczące układu partycji (jest to podstawowy układ przeznaczony tylko do testów):

/boot 512MB
/swap 1GB
/ reszta (w moim przypadku było to 6 GB)

Większość osób pisze w różnego rodzaju manualach, że partycja boot nie powinna mieć rozmiaru większego niż 100 MB. Ogólnie rzecz biorąc to mógłbym się z tym zgodzić ... , ale tak do końca nie jest, ponieważ jeżeli jesteście osobą, która nie porządkuje systemu regularnie i nie usuwa starych kerneli to przestrzeń na tej partycji może się skończyć.
W domu nie usuwam nic z boot'a bo mam wystarczającą ilość miejsca, ale gdybym ustawił 100 MB to już bym się z jakimiś problemami musiał borykać:
du -hs /boot
116M /boot

Dyski są obecnie coraz tańsze, więc jak chcecie mieć święty spokój na partycję boot można przeznaczyć więcej miejsca np. 512 MB.

Wracając do instalacji systemu to:
- na pierwszym oknie klikam po prostu enter (w linux text pobawię się później),
- wybór języka - wedle uznania, pojawia się informacja dotycząca inicjacji dysków twardych, klikamy na ok dla obu dysków wirtualnych,
- pojawia się komunikat wyszukiwanie, instalacji systemu CentOS, czekam, czekam i jeszcze trochę czekam.
- wybieram raid, następnie wybieram utwórz urządzenie raid.
- punkt montowania /boot, system plików ext3, Urządzenia raid: md0, poziom raid: tu do wyboru ja na początek zapodałem raid 1 (tzw. mirroring - to samo na obu dyskach, jeden padnie z drugiego uruchamiam), w składniki raid zaznaczam hda1 i hdb1
- to samo robię dla hda2 i hdb2 z tym, że typ systemu plików zmieniam na swap i brak punktu montowania + zaznaczam drugą partycję na obu dyskach (oczywiście zaznaczam raid1),
- to samo dla hda3 i hdb3 punkt montowania /, raid 1 i zaznaczam na obu dyskach trzecią partycję.
- klikam dalej, wybieram Program startowy GRUB zostanie zainstalowany na /dev/md0 i klikam dalej,
- na konfiguracji sieci klikam dalej, w domu mam wszystko po dhcp (na serwerze oczywiście należy ustawić statyczny adres IP),
- wpisuje hasło root'a. potwierdzam,
- wybieram składniki systemu,
- wybieram podstawową instalację, bez żadnych dodatkowych składników.

Pojawia się ekran z zwartością CentOS Community ENTerprise Operating System i czekam (a miałem się dzisiaj wcześniej spać położyć).


Później pozostaje tylko uruchomienie ponowne i oglądanie jak się macierz buduje przez watch "cat /proc/mdstat" dla partycji 6GB zajmuje to około 10-20 minut.


Kilka uwag dotyczących instalacji macierzy softwarowej:
- w powyższych punktach mogłem coś namieszać ponieważ testowałem to około tydzień temu, ale cały proces jest bardzo intuicyjny,
- wcześniej próbowałem być cwaniakiem i nie bawić się w tworzenie po kolei partycji na obu dyskach tylko uruchomiłem CentOS'a w trybie linux rescue stworzyłem układ partycji na jednym dysku i skopiowałem go na drugi dysk (sfdisk -d /dev/sda/ | sfdisk /dev/sdb) - oczywiście bycie cwaniakiem się nie opłaciło - graficzny instalator odmówił wykorzystania wcześniej utworzonych partycji jako raid'a (prawdopodobnie jakoś się to da zrobić ale późno już było i literki zaczynały być nieostre),
- powyższa instalacja była przeprowadzona na maszynie wirtualnej Virtualbox, która na moim komputerze spisuje się rewelacyjnie - wystarczy do jednej maszyny wirtualnej podłączyć dwa dyski.

Ogólnie rzecz biorąc instalacja raid 1 programowego nie jest taka straszna i na domowym komputerze/serwerze można go z powodzeniem stosować.
Prawdopodobieństwo, że umrą nam dwa dyski jednocześnie jest niskie, ale takie przypadki u mnie w pracy już miały miejsce.
W takich sytuacjach dysk A mówi do dysku B "mi się już nie chce", a drugi mu na to "mi też" i oba jednocześnie padają :) - albo prawie jednocześnie (zostajemy wówczas ze stertą bezużytecznych danych, których nie da się odczytać no chyba że mamy raid 6)
Więc jeżeli jeden dysk Wam wypadnie to ... pamiętajcie zawsze o tym, żeby dołożyć od razu drugi i odbudować macierz.