
Dzisiaj uporamy się z problemem wymiany dysków w software'owej macierzy RAID1. Sytuacja przedstawia się tak, iż nowe dyski są decydowanie większe od tych, które aktualnie pracują w raidzie. Co więcej chcemy wykonać wszystko on-line, tj. bez wyłączania serwera. Jeżeli w twoim przypadku podłączanie dysków hot-swap nie działa ok, będziesz musiał wyłączyć serwer co najmniej dwa razy w celu podmiany dysków. Jeszcze jedna bardzo ważna sprawa: system plików którego używam to ReiserFS... system ten pozwala na rozszerzanie partycji online. W przypadku ext2/3 problem jest nieco trudniejszy, i nie będzie ujęty w tym artykule.
Ok zaczynamy. Sytuacja z dyskami przedstawia się następująca: raid /dev/md0 tworzą dyski /dev/sda2 oraz /dev/sdb2, raid /dev/md1 dyski /dev/sda3 oraz /dev/sdb3. Partycje /dev/sda1 oraz /dev/sdb1 nie są zraidowane i służą jako swap. Na początek podmieniamy dysk /dev/sdb na nowy większy.
Odłączam dysk /dev/sdb od systemu:
# swapoff /dev/sdb1 # mdadm --manage /dev/md0 --fail /dev/sdb2 # mdadm --manage /dev/md1 --fail /dev/sdb3 # mdadm --manage /dev/md0 --remove /dev/sdb2 # mdadm --manage /dev/md1 --remove /dev/sdb3
Teraz odłączam dysk przez hotswap lub wyłączam serwer i podmieniam dysk na większy. Po ponownym uruchomieniu serwera lub podłączeniu nowego dysku należy dodać go do RAIDa. Najpierw jednak należy go podzielić na partycje.
# cfdisk /dev/sdb
- dodaję partycję swap /dev/sdb1
- dodaję bootowalną partcję /dev/sdb2 (analogicznie tak jak to mam na dysku /dev/sda) typu Linux raid autodetect co najmniej tej wielkości co partycja /dev/sda2, ja powiększyłem moją z 80GB na 250GB.
- dodaję partcję /dev/sdb3 typu Linux raid autodetect
- zapisuję tablicę partycji i wychodzę z programu.
Teraz podłączę nowy dysk do systemu:
# mkswap /dev/sdb1 # swapon /dev/sdb1 # mdadm --manage /dev/md0 --add /dev/sdb2 # mdadm --manage /dev/md1 --add /dev/sdb3
Teram chwila przerwy, gdyż musimy poczekać raid się zsynchronizuje. Więc kawka, snikers, papieros, piwo czy playstation mile widziane. Możemy obserwować postęp synchronizacji przez wydanie polecenia watch -n 1 'cat /proc/mdstat'
Jak synchronizacja się skończy odłączamy pozostałe dyski RAIDa. Aha. Jeżeli używasz lilo wydaj polecenie aktualizacji wpisów mbr (gdyż nowy dysk takiego wpisu nie posiada).
# swapoff /dev/sda1 # mdadm --manage /dev/md0 --fail /dev/sda2 # mdadm --manage /dev/md1 --fail /dev/sda3 # mdadm --manage /dev/md0 --remove /dev/sda2 # mdadm --manage /dev/md1 --remove /dev/sda3
Jeżeli posiadasz więcej redundentnych dysków wykonaj powyższy krok dla każdego z nich. Analogicznie jak za pierwszym razem odłączam i podmieniam dysk na nowy. Partycjonuje go dokładnie tak samo jak nowy dysk /dev/sdb, i przyłączam do systemu (jak? patrz wyżej).
OK. Teraz należy rozszerzyć tablicę macierzy.
# mdadm --grow /dev/md0 --size=max # mdadm --grow /dev/md1 --size=max
Po tej operacje urządzenia blokowe /dev/md0 i /dev/md1 powinny mieć rozmiar najmniejszego dysku wchodzącego w ich skład. Teraz należy poinformować system plików, aby korzystał z całej tej przestrzeni. Dla systemu ReiserFS można to zrobić on-line prostym pleceniem:
# resize_reiserfs /dev/md0 # resize_reiserfs /dev/md1
Każde z nich będzie się chwilkę wykonywać bez żądnej informacji dla użytkownika... ale bez stresu... nic się nie zawiesiło, po prostu chwilkę to trwa.
Na koniec użytkownicy lilo wydają poleceni lilo aby odświeżyć rekordy mbr na każdym z nadmiarowych dysków. I to tyle. jeszcze warto poczekać aż cała macierz "dojdzie do siebie" obserwując /proc/mdstat przy pomocy watch -n 1 'cat /proc/mdstat'
No i to tyle... można cieszyć się dużym dyskiem df -h









