Dlaczego należy zainicjować urządzenie RAID 10?

9

Tworząc urządzenie rajdowe z oprogramowaniem dla systemu Linux jako urządzenie raid10, jestem zdezorientowany, dlaczego należy go zainicjować. To samo pytanie dotyczy naprawdę raid1 lub raid0.

Ostatecznie większość ludzi umieściłaby na nim jakiś system plików i ten system plików nie powinien zakładać żadnego stanu danych na dysku. Każdy zapis wpłynie na oba dyski w konfiguracji raid10 lub raid1, do której zapisywane jest N mirrorów. Początkowo nie powinno być żadnego powodu, aby inicjować nalot10, ponieważ nastąpi to z czasem.

Rozumiem dlaczego dla konfiguracji RAID 5/6, w której istnieje wymóg parzystości, ale nawet wtedy wydaje się, że można to zrobić leniwie.

Czy to po to, żeby ludzie czuli się lepiej?

Michael Graff
źródło
1
Dobre pytanie. Możliwe jest pominięcie synchronizacji podczas tworzenia macierzy RAID, i natknąłem się na zalecenia, aby to zrobić, w przypadku gdy jedno lub więcej podstawowych urządzeń to dyski SSD. Nie wiem, czy istnieją scenariusze, w których synchronizacja jest konieczna do poprawnego działania.
kasperd

Odpowiedzi:

2

Konieczna jest wstępna synchronizacja, ponieważ wszelkie różnice między serwerami lustrzanymi pojawiałyby się jako błędy podczas okresowej kontroli.

I powinieneś robić okresowe kontrole.

Simon Richter
źródło
1
Rozumiem, dlaczego okresowe kontrole czytelności danych mogą być przydatne. Ale na czym polega okresowa kontrola identyczności replik? Takie kontrole mogą być przydatne, jeśli są wykonywane przez system plików, który sumuje dane. Ale w warstwie RAID bez wiedzy o systemie plików nie możesz wiedzieć, która z dwóch różnych replik jest dobra, nie możesz w pierwszej kolejności dowiedzieć się, jak rozbieżność się pojawiła, i nie możesz wiedzieć, który plik (jeśli w ogóle) ma wpływ. Wygląda więc na to, że alerty dotyczące niespójności na tej warstwie są w większości bezużyteczne, ponieważ administrator i tak nie może nic zrobić z alertami.
kasperd
Ponieważ i tak musisz odczytać dane, koszt ich porównania jest minimalny, ale może pokazać, że na jednym z dysków wystąpił problem, którego nie wykryto (np. Zła pamięć RAM we własnej pamięci podręcznej dysku). Administrator następnie podzieli tablicę, ręcznie sprawdzi różnice i wybierze dysk, który ma zostać zastąpiony.
Simon Richter
Powinieneś rozwinąć tę kwestię w swojej odpowiedzi.
kasperd
Wiem, że minęło wiele lat, ale to jedyny ważny powód, dla którego mogę to zobaczyć. Nie sądzę, żeby miało to inne znaczenie, jeśli dane nie są zsynchronizowane, ponieważ dane te z definicji nie są jeszcze zapisywane, więc system plików zastosowany do napędu RAID nigdy nie będzie czytał z tych bloków. Jednak upewniając się, że kontrole okresowe przechodzą od samego początku, jest to konieczne. Dzięki!
Michael Graff,
7

Rajd 1, będący lustrem, zależy od tego, czy wszystkie dyski w lustrze są dokładnie takimi samymi kopiami. Weź losowy dysk twardy i inny losowy dysk twardy, a prawdopodobnie masz tam inne dane, co narusza to domniemanie. Dlatego konieczna jest inicjalizacja. Po prostu kopiuje zawartość pierwszego dysku na inne. Zwróć uwagę, że w niektórych warunkach możesz uniknąć inicjalizacji dysków - zwykle fabrycznie nowe urządzenia mają już wszędzie zero, więc możesz to po prostu zignorować. mdadmOpcja --assume-cleanto robi, ale ostrzega:

   --assume-clean

Powiedz mdadm, że tablica istniała wcześniej i wiadomo, że jest czysta. Może to być przydatne podczas próby przywrócenia sprawności po poważnej awarii, ponieważ możesz mieć pewność, że nie wpłynie to na dane, o ile nie zapiszesz w tablicy. Można go również używać podczas tworzenia RAID1 lub RAID10, jeśli chcesz uniknąć początkowej ponownej synchronizacji, jednak ta praktyka - choć zwykle bezpieczna - nie jest zalecana. Użyj tego tylko, jeśli naprawdę wiesz, co robisz.

Jeśli tego nie zrobisz, istnieje rozbieżność między dyskami i jest on odczytywany, nie wiadomo, co dysk będzie czytał. Powinieneś być całkiem bezpieczny z systemem plików (ale uwaga poniżej), ponieważ najprawdopodobniej napiszesz zanim przeczytasz cokolwiek z tego urządzenia, a potem wszystko będzie jasne.

Zauważ, że przynajmniej Linux mdadmzainicjuje tablicę w tle. Możesz szczęśliwie stworzyć FS na nim w pierwszej sekundzie. Wydajność będzie cierpieć do momentu zakończenia inicjalizacji, ale to wszystko.

Ale:

a) Podczas wykonywania mkfsniektórych narzędzi sprawdź, czy coś już jest na tym dysku. Chociaż dotyka to tylko kilku dobrze znanych regionów jazdy, odczytuje przed napisaniem czegokolwiek, zagrażając w ten sposób.

b) W przypadku okresowej ponownej synchronizacji macierzy urządzenie RAID nie wie nic o twoim systemie FS. Po prostu odczytuje każdy blok z każdego urządzenia i porównuje je. A jeśli nie używasz FS kopiowania przy zapisie (np. ZFS lub BTRFS) i nigdy nie wypełniasz FS, jest całkiem prawdopodobne, że blok pozostanie niezainicjowany z perspektywy FS przez lata.

Dlaczego resynchronizacja z urządzeniami RAID1?

Z tego samego powodu resynchronizujesz z urządzeniami RAID5 lub dowolnym innym poziomem (oprócz RAID0). Odczytuje wszystkie dane i porównuje / weryfikuje sumy kontrolne RAID (w RAID 5 lub 6). Jeśli bit został w jakikolwiek sposób odwrócony (ponieważ pamięć HD dostała spontaniczne odwrócenie, ponieważ telefony komórkowe ciebie i twoich 5 sąsiadów przypadkowo ingerowały w ten konkretny region talerza, cokolwiek), wykryje niespójność, ale nie będzie w stanie pomóc Ci. Jeśli, OTOH, jeden z dysków twardych po prostu zgłosi „Nie mogę odczytać tego bloku”, co jest bardziej prawdopodobne w przypadku awarii dysku, oznacza to, że po prostu wykryłeś awarię wcześnie i skróciłeś czas pracy w trybie awaryjnym (licząc od awaria napędu, nie od momentu, gdy go zauważysz). Raid nie pomoże ci, jeśli jeden dysk ulegnie awarii, a miesiąc później drugi ulegnie awarii, jeśli nie

RAID10

Teraz, dla RAID10, wszystkie powyższe blokady są ważne. W końcu RAID10 to po prostu sprytny sposób na powiedzenie: „Umieszczam moje dwa urządzenia RAID1 w parze RAID0”.

Zastrzeżenie:

To wszystko jest niezdefiniowane zachowanie. Dlaczego sprawdziłem w systemie Linux, używając mdadminnych implementacji programowych macierzy RAID może zachowywać się inaczej. Inne wersje jądra i / lub mdadmnarzędzi Linuksa niż te, których używam, mogą również zachowywać się inaczej.

Torinthiel
źródło
1
Podaj cytat za If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Uważam, że to stwierdzenie jest nieprawidłowe. Przynajmniej podaj przykład komunikatu o błędzie, aby można było skonsultować się ze źródłem w celu sprawdzenia, w jakich okolicznościach jest on generowany.
kasperd
1
Tak lepiej Czy zweryfikowałeś stwierdzenie dotyczące pisania zer? Myślę, że nie zapisuje zer, ale raczej kopiuje jeden z dysków na drugi.
kasperd
1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.W niebezpieczeństwie czego? Zdaję sobie sprawę, że odczyt może spowodować cokolwiek, ale dlaczego miałoby to stanowić pewne zagrożenie dla użytkownika, jeśli (a) czytana informacja nie zostanie nigdzie użyta i (b) nastąpi zapis?
Vegard
1
@kasperd masz rację, kopiuje pierwsze urządzenie na drugie. Test na urandomzainicjowanym urządzeniu z Linuksem mdadm pokazuje, że pierwsze 80k pozostaje inne, a ostatnie 48k. Ten ostatni prawdopodobnie wynika z zaokrąglenia rozmiaru RAID do rozmiaru bloku. Nie testowałem z różnymi rozmiarami urządzeń, ale 80 + 48 to dokładnie różnica w wielkości między urządzeniem RAID a podstawowym urządzeniem blokowym.
Torinthiel
1
Jedną rzeczą do rozważenia jest to, że zwykle podczas inicjowania system rajdowy ZAWSZE odczytuje dysk A i kopiuje go na dysk B. Dlaczego? Ponieważ podczas inicjowania można użyć dysku, być może zapisano dane w bloku 100 000. Gdy inicjujący nalot dotrze do tego bloku, zarówno A, jak i B są już identyczne, więc nic się nie dzieje. Gdyby zamiast tego zerował bloki, wymazałby dobre dane. Tak więc po raz kolejny widzę dwa powody, dla których bloki są identyczne: „zawsze tak było” i „abyś mógł później sprawdzić” - wątpię również w przydatność tego czeku. Czytanie jest dobre, porównywanie? niepewny.
Michael Graff
5

Pamiętaj, że RAID 1 to lustro, a RAID 10 to pasek lusterek.

Pytanie brzmi, na którym dysku w każdym lustrze dane są prawidłowe? W świeżo utworzonej tablicy nie jest to znane, ponieważ dyski mogą mieć różne dane.

Pamiętaj również, że RAID działa na bardzo niskim poziomie; nic nie wie o systemach plików ani żadnych danych przechowywanych na dysku. Może nawet nie być w użyciu system plików.

Zatem inicjalizacja w tych macierzach polega na tym, że dane z jednego dysku w każdym lustrze są kopiowane w stanie obecnym na drugi dysk.

Oznacza to również, że tablica jest bezpieczna w użyciu od momentu jej utworzenia i może być inicjowana w tle; większość kontrolerów RAID (i Linux mdraid) ma taką opcję lub robi to automatycznie.

Michael Hampton
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Michael Hampton
1

Mówiąc najprościej, ponieważ dwa nowe dyski od samego początku nie będą lustrzanymi kopiami.

Muszą zostać zamienione w doskonałe kopie.

Ponadto inicjalizacja obejmuje także skonfigurowanie superbloku metadanych z informacjami o konfiguracji macierzy.

Plik / proc / mdstat powinien informować, że urządzenie zostało uruchomione, że rekonstruowane jest dublowanie, oraz ETA zakończenia rekonstrukcji. Rekonstrukcja odbywa się przy użyciu bezczynnej przepustowości we / wy. Twój system powinien nadal reagować, chociaż diody LED dysku będą również wykazywać dużą aktywność.

Proces rekonstrukcji jest przezroczysty, więc możesz faktycznie korzystać z urządzenia, nawet jeśli lustro jest w trakcie rekonstrukcji.

HBruijn
źródło
2
Ale dlaczego muszą być doskonałymi kopiami siebie? Co mogłoby zerwać z niespójnością tych dwóch sektorów, które nigdy nie były używane przez system plików?
kasperd
@kasperd RAID jest implementowany na niższym poziomie niż jakikolwiek system plików. Powstaje więc pytanie, do jakiego „systemu plików” się odwołujesz.
Taemyr
@Taemyr Nie mam na myśli żadnego konkretnego systemu plików. Wybierz, co wolisz, i wyjaśnij, co by się zepsuło, używając go na macierzy RAID-1, gdzie repliki nie były zsynchronizowane przed zainicjowaniem systemu plików.
kasperd
@kasperd Nie ma żadnego systemu plików złamać na poziom RAID działa.
Taemyr
1
W moim przypadku, jako oryginalny plakat, nie dbam o to, jaki system plików. Nie znam systemów plików, które czytałyby sektory, w których nigdy nie zapisano, dlatego żaden nieokreślony stan tych niepisanych sektorów nie ma znaczenia.
Michael Graff