RAID (Redundant Array of Independent Disks) sprzętowy lub programowy chroni nas przed utratą danych oraz unieruchomieniem systemu w momencie gdy jeden z dysków ulegnie uszkodzeniu.W naszym serwerze jest akurat RAID10 programowy składający się z 4 dysków. Uszkodzenie jednego dysku nie wpływa na pracę systemu tak więc jedyny ból jaki istnieje to na czas fizycznej wymiany dysku należy po prostu wyłączyć serwer. Wymiana trwa około minuty, no i start systemu…. Aby podłączyć wymieniony dysk do systemu należy wykonać poniższe kroki.
Zakładamy na nowym dysku partycje takie jak w uszkodzonym dysku… U nas akurat uszkodzonym dyskiem był /dev/sdb – aby nie zakładać na „piechotę” partycji użyję narzędzia sfdisk (partition table manipulator for Linux) z opcją -d (dump)
1 |
sfdisk -d /dev/sda | sfdisk /dev/sdb |
Jeśli pojawi się błąd z założeniem partycji to należy użyć dodatkowo opcji –force (sfdisk -d /dev/sda | sfdisk –force /dev/sdb). A jeżeli błąd jest spowodowany tablicą partycji GPT wówczas musimy użyć polecenia sgdisk z opcją -R .Po tej operacji na naszym czystym dysku jest utworzona tablica partycji tak jak na pozostałych dyskach będących w naszym RAID 🙂 Teraz po prostu musimy dodać nasze nowe partycje do macierzy, aby dane na dyskach się zreplikowały.
Żeby sprawdzić aktualny stan macierzy wyświetlamy sobie informacje z pliku /proc/mdstat i powinniśmy uzyskać coś podobnego do poniższego listingu :
1 2 3 4 5 6 7 8 9 10 11 12 |
~# cat /proc/mdstat Personalities : [raid10] md4 : active (auto-read-only) raid10 sda7[0] sdd7[3] sdc7[2] 7816192 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] md3 : active raid10 sda6[0] sdd6[3] sdc6[2] 1867572224 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] md2 : active raid10 sda5[0] sdd5[3] sdc5[2] 29291520 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] md1 : active raid10 sda2[0] sdd2[3] sdc2[2] 19528704 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] md0 : active raid10 sda1[0] sdd1[3] sdc1[2] 29291520 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] |
Jak widać w definicjach urządzeń mdX są dyski sda, sdc, sdd a na końcu linii [U_UU]. Macierz jest niekompletna…
Następnie musimy kolejno wykonać polecenia (u siebie będziesz musiał wykonać analogicznie w zależności od swoich partycji i ustawić)
1 2 3 4 5 6 7 8 9 10 |
~#mdadm --manage /dev/md0 --add /dev/sdb1 mdadm: added /dev/sdb1 ~#mdadm --manage /dev/md1 --add /dev/sdb2 mdadm: added /dev/sdb2 ~#mdadm --manage /dev/md2 --add /dev/sdb5 mdadm: added /dev/sdb5 ~#mdadm --manage /dev/md3 --add /dev/sdb6 mdadm: added /dev/sdb6 ~#mdadm --manage /dev/md4 --add /dev/sdb7 mdadm: added /dev/sdb7 |
Do podglądu stanu odbudowy macierzy używamy ponownie polecenia cat /proc/mdstat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
~#cat /proc/mdstat Personalities : [raid10] md4 : active raid10 sdb7[4] sda7[0] sdd7[3] sdc7[2] 7816192 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] md3 : active raid10 sdb6[4] sda6[0] sdd6[3] sdc6[2] 1867572224 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] [====................] recovery = 21.7% (203261824/933786112) finish=144.4min speed=84290K/sec md2 : active raid10 sdb5[4] sda5[0] sdd5[3] sdc5[2] 29291520 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] [=======.............] recovery = 37.4% (5492352/14645760) finish=1.5min speed=95495K/sec md1 : active raid10 sdb2[4] sda2[0] sdd2[3] sdc2[2] 19528704 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] [===============.....] recovery = 75.0% (7331840/9764352) finish=0.3min speed=119878K/sec md0 : active raid10 sdb1[4] sda1[0] sdd1[3] sdc1[2] 29291520 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] unused devices: none |
a jeśli chcemy się cieszyć na bieżąco odbudową naszej macierzy użyjmy polecenia watch -n[interwał w sek.]:
1 |
watch -n2 cat /proc/mdstat |
a wynik będzie nam się odświeżał co 2 sek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Every 2,0s: cat /proc/mdstat Fri Apr 5 12:29:14 2013 Personalities : [raid10] md4 : active raid10 sdb7[4] sda7[0] sdd7[3] sdc7[2] 7816192 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] md3 : active raid10 sdb6[4] sda6[0] sdd6[3] sdc6[2] 1867572224 blocks super 1.2 512K chunks 2 near-copies [4/3] [U_UU] [=====...............] recovery = 28.7% (268363776/933786112) finish=158.1min speed=70101K/sec md2 : active raid10 sdb5[4] sda5[0] sdd5[3] sdc5[2] 29291520 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] md1 : active raid10 sdb2[4] sda2[0] sdd2[3] sdc2[2] 19528704 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] md0 : active raid10 sdb1[4] sda1[0] sdd1[3] sdc1[2] 29291520 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU] unused devices: none |
Generalnie system ustawia sobie tak odbudowę macierzy aby nie zakłócać pracy innym użytkownikom. Jednak jeżeli wiemy że np w nocy nikt na naszym serwerze nie pracuje ani nie jest podłączony to możemy przyśpieszyć odbudowę macierzy modyfikując parametry /proc/sys/dev/raid/{speed_limit_min, speed_limit_max}, w których są zapisane domyślne prędkości w kb/s . W plikach tych są odpowiednio wartości 1000 i 100000 i są to czasy ustawione dla standardowej pracy macierzy jednak do odbudowy możemy te wartości podnieść i przyśpieszyć pracę macierzy np na 50000 i 150000 🙂