Jak przerwać resynchronizację raidu oprogramowania?

50

Chcę przerwać trwającą operację resynchronizacji podczas nalotu na oprogramowanie wyciskania Debiana. (Jest to regularna zaplanowana ponowna synchronizacja porównania. W takim przypadku tablica rajdowa jest nadal czysta. Nie myl tego z odbudową po awarii dysku i jego wymianie).

Jak zatrzymać tę zaplanowaną operację ponownej synchronizacji podczas jej działania? Kolejna tablica rajdowa jest „w trakcie resynchronizacji”, ponieważ wszystkie są sprawdzane tego samego dnia (w niedzielę wieczorem) jeden po drugim. Chcę całkowitego zatrzymania tej niedzielnej nocy ponownej synchronizacji.

[Edytuj: sudo kill -9 1010nie zatrzymuje go, 1010 to PID procesu md2_resync]

Chciałbym również wiedzieć, w jaki sposób mogę kontrolować odstępy między ponownymi synchronizacjami i pozostały czas do następnego.

[Edit2: To, co teraz zrobiłem, to spowolnienie resynchronizacji, aby nie przeszkadzało:

sudo sysctl -w dev.raid.speed_limit_max=1000

pobrane z http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html

W nocy przywrócę wysoką wartość, aby ponowna synchronizacja mogła się zakończyć.

To obejście jest odpowiednie w większości sytuacji, niemniej interesujące byłoby wiedzieć, czy to, o co prosiłem, jest możliwe. Na przykład wydaje się, że nie jest możliwe wyhodowanie tablicy, gdy jest ona resynchronizowana lub resynchronizowana „w toku”]

Adam5
źródło
Nie sądzę, że mam piłki do anulowania ponownej synchronizacji. Obawiam się, że to może się nigdy nie rozpocząć
Tom O'Connor,
1
@Tom: jest to tylko normalna ponowna synchronizacja, która sprawdza w każdą niedzielę, czy wszystko się zgadza. jeśli zostanie zatrzymany (np. przez wyłączenie komputera), będzie kontynuowany przy następnym uruchomieniu.
Adam5
No dobrze W porządku
Tom O'Connor,

Odpowiedzi:

48

Jeśli twoja tablica jest md0wtedyecho "idle" > /sys/block/md0/md/sync_action

„bezczynność” zatrzyma aktywną ponowną synchronizację / odzyskiwanie itp. Nie ma gwarancji, że kolejna ponowna synchronizacja / odzyskiwanie może nie zostać automatycznie uruchomiona ponownie, chociaż pewne zdarzenie będzie potrzebne do jej uruchomienia.

http://www.mjmwired.net/kernel/Documentation/md.txt#477

Mark Wagner
źródło
Mógłbym zaktualizować plik tekstowy po zmianie jego uprawnień, ale zawartość tego pliku jest ponownie zmieniana na „resynchronizuj” od tyłu w tym samym przypadku. Ponowna synchronizacja jest kontynuowana w drugiej tablicy (poprzednio „w toku”). Kiedy piszę „bezczynny” do pliku drugiej tablicy, zamienia się ponownie, ale nigdy się nie zatrzymuje.
Adam5
2
Jeśli masz wiele nalotów: echo bezczynne | sudo tee / sys / block / md * / md / sync współdziałanie
Ole Tange
W rzeczywistości „bezczynność” wstrzymuje tylko sprawdzanie. Następne „sprawdzenie” będzie kontynuowane od /sys/block/md0/md/sync_min’. To reset this write 0 do tego pliku.
rudimeier
33

Chciałem zwolnić lub wstrzymać proces resynchronizacji, aby zapisać niektóre operacje we / wy, aby wykonać kopię zapasową niektórych rzeczy na innym komputerze. Ten wątek pomógł mi, ale znalazłem inne rozwiązanie.

Na moim Debianie Lennym:

  • echo "idle" > /sys/block/md0/md/sync_action działa, ale proces resynchronizacji jest natychmiast ponownie uruchamiany.

  • checkarray -x --all : działa, ale ten sam wynik: proces ponownej synchronizacji jest natychmiast ponownie uruchamiany.

Więc używam tej metody: echo 0 > /proc/sys/dev/raid/speed_limit_max

mały
źródło
1
Ciekawe podejście Odkryłem, że musisz również zmniejszyć wartość w speed_limit_min.
Diomidis Spinellis,
1
Musiałem także ustawić speed_limit_minna 0, aby całkowicie wstrzymać resynchronizację.
njahnke
12

Możesz anulować trwającą resynchronizację tablicy, używając następującej sekwencji poleceń (jako root):

echo frozen > /sys/block/md0/md/sync_action
echo none > /sys/block/md0/md/resync_start
echo idle > /sys/block/md0/md/sync_action

Pamiętaj, że może to pozostawić tablicę w niespójnym stanie . Nie rób tego, chyba że masz pewność, że tablica jest w dobrej formie, i ponownie uruchom synchronizację później.

(Kredyt, w którym należy się kredyt: znalazł to zaklęcie w tym wątku .)

duskwuff
źródło
8

Jak wspomniano powyżej, w systemach Debian / Ubuntu /etc/cron.d/mdadmskrypt wywołuje /usr/share/mdadm/checkarrayskrypt w celu zainicjowania kontroli ponownej synchronizacji.

Ten skrypt ma opcję anulowania wszystkich uruchomionych kontroli synchronizacji:

/usr/share/mdadm/checkarray -x --all
Jason Hildebrand
źródło
3

Nie jestem pewien, jak anulować ponowną synchronizację, ale harmonogram jest kontrolowany przez /etc/cron.d/mdadmsystemy Debian / Ubuntu.

Skrypt /usr/share/mdadm/checkarraymoże rzucić nieco światła na drugą część twojego pytania, ponieważ tak nazywa się cron.

Zoredache
źródło
3

Jeśli urządzeniem md jest md0 i chcesz zatrzymać ponowne zapisywanie, napisz:

echo "idle" > /sys/block/md0/md/sync_action
Zwycięzca
źródło
3

Możliwe rozwiązanie tego problemu zajęło trochę czasu, aby zapoznać się ze szczegółami.

Mój system: CentOS 6.5 mdadm v3.3.2

Stałe kontrole co tydzień, chciałem zatrzymać jedną z nich, RAID jest czysty, kontrola została wywołana za pomocą skryptu /etc/cron.d/raid-check, który jest uruchamiany co tydzień.

Aby anulować czek, użyj funkcji --misc --action. Zakładając, że urządzeniem RAID jest / dev / md0 i jest to tylko cotygodniowa kontrola spójności, a nie awaria urządzenia, jako root:

mdadm --misc --action = idle / dev / md0

Podobnie, aby rozpocząć sprawdzanie spójności

mdadm --misc --action = check / dev / md0

bill.rookard
źródło
2
echo "idle" > /sys/block/md0/md/sync_action

Nie działa, gdy / sys / block / md * / md / sync współdziała jest „resynchronizowany” (w przeciwieństwie do tego, że jego stan to „sprawdź” lub „napraw”. Możesz echo „bezczynności” w pliku synchronizacji, jednak nie wpływa to na . postęp ten plik jądra dokumentacja tu błędnie twierdzi, że to będzie działać, ale nigdy nie pracował dla mnie:

„bezczynność” zatrzyma aktywną ponowną synchronizację / odzyskiwanie itp. Nie ma gwarancji, że kolejna ponowna synchronizacja / odzyskiwanie może nie zostać automatycznie uruchomiona ponownie, chociaż pewne zdarzenie będzie potrzebne do jej uruchomienia.

Brian
źródło
1
Możesz jednak wpływać na szybkość „resynchronizacji” za pomocą / sys / block / md * / md / sync_speed_max w tym stanie. Nie jestem pewien, dlaczego dokumentacja jest nieprawidłowa, może nikt nie wie
brian
Poświęć chwilę na zapoznanie się ze składnią wyceny Stack Exchange ( meta.serverfault.com/editing-help )
Sven
0

Wiem, że to 4-letni post, ale możesz to również zrobić (zakładając, że md0 jest tablicą, a sdb4 jako „dyskiem” resynchronizującym):

    mdadm /dev/md0 --fail /dev/sdb4 && mdadm /dev/md0 --remove /dev/sdb4

To polecenie udaje, że sdb4 jest dyskiem uszkodzonym i dlatego kopie go z tablicy, zatrzymując resynchronizację. Jeśli podczas akcji resync-stop nie wystąpił błąd, polecenie to usunie także sdb4 z tablicy md0. Jeśli wystąpił błąd, dysk pozostaje w stanie awarii, ale pozostaje w tablicy.

Jeśli dysk ulegnie awarii w dowolnym miejscu mdadm, ustawiono go logicznie jako awarię . Jeśli tablica była czysta (nie zdegradowana), dysk pozostaje spójny i można go bez obaw dodawać ponownie --add << dysk >> --assume-clean. Jeśli po odłączeniu pojawiła się jakakolwiek akcja (np. Resynchronizacja, odbudowa, a nawet zapis), to --assume-clean prawdopodobnie zawiedzie i natychmiast rozpocznie akcję resynchronizacji.

Zmiana raid.speed_limit_mini raid.speed_limit_maxjest w pewnym sensie złym pomysłem, ponieważ wpływa nie tylko na szybkość resynchronizacji / odbudowy, ale także na normalne prędkości działania i prawdopodobnie stracisz dużo wydajności uzyskanej dzięki zastosowaniu macierzy RAID.

et
źródło
5
Myślę, że usunięcie zdrowego dysku z RAID jest złym pomysłem. Przez większość czasu nie może powodować żadnych problemów, ale za każdym razem, gdy to zrobisz, istnieje ryzyko utraty lub uszkodzenia danych.
kasperd
1
Nigdy tego nie rób. Jeśli dodasz dysk --assume-cleanw systemie na żywo, a na pozostałym dysku zdarzyły się jakieś zapisy , poprosisz o kłopoty.
sanmai