Szybka konfiguracja mdadm RAID z pustymi dyskami?

9

Odtworzę niektóre dyski RAID5 jako RAID6 z mdadm. Brakuje danych na dyskach, na których mi zależy.

Konfiguracja RAID zajmuje trochę czasu, aby ustawić kształt - akceptuję, że gdy istnieją dane, które muszą zostać rozłożone i obliczone parzystość, jednak w przypadku tych dysków są one puste - a przynajmniej chcę, aby były uważane za puste.

Czy jest więc sposób na pominięcie obliczania parzystości i powiedzenie mdadmowi, aby po prostu skonfigurował superbloki i zrobił, czy inaczej, na co dokładnie spędza cały ten czas, gdy nie ma danych do przenoszenia?

md3 : active raid6 sdf3[5] sde3[4] sdd3[3] sdc7[2] sdb3[1] sda3[0]
      1953114112 blocks super 1.2 level 6, 512k chunk, algorithm 2 [6/6] [UUUUUU]
      [>....................]  resync =  1.3% (6790144/488278528) finish=409.3min speed=19604K/sec

Zauważ, że nie mówię o tym, --assume-cleangdzie odbudowujesz tablicę z wcześniej istniejącego zestawu dysków, które zawierają macierz RAID, o której wiesz, że jest poprawna. Mówię o tablicy, którą należy uznać za pustą, a nie za poprawnie rozłożoną.

Powiedzmy więc, ze względu na to pytanie, że urządzenia zostały wstępnie wypełnione zerami.

Paweł
źródło

Odpowiedzi:

8

Możesz użyć, --assume-cleanale jeśli nie używasz raid5 (nie raid6), a dyski faktycznie są pełne zer, przy pierwszym uruchomieniu kontroli parzystości pojawią się błędy, które należy poprawić, więc nie powinieneś tego robić. Nie musisz czekać na zakończenie resynchronizacji, zanim zaczniesz używać tablicy; będzie się szarpać w tle, dopóki nie zostanie zrobione.

psusi
źródło
Dzięki psusi - to nie dotyczy pytania.
Paul
2
@Paul, umm .. tak, robi. Nie ma czegoś takiego jak „pusty”, tylko synchronizacja lub synchronizacja.
psusi
Nie odnosi się do pytania, które zadaję. Xor bloku zer wynosi zero. Więc gdybym mógł powiedzieć mdadm, że przestrzeń można uznać za pustą, mogłaby bardzo szybko stworzyć parzystość. Parzystość trzeba będzie poprawnie obliczyć tylko wtedy, gdy zapisany jest określony blok, w którym to momencie nie ma znaczenia, że ​​wcześniej był „zły”. Mógłbym nawet wyzerować dysk.
Paul
2
@Paul, znowu nie ma czegoś takiego jak „pusty”. Zasadniczo tak, nie będzie miało znaczenia, że ​​parzystość na paskach, które nigdy nie zostały zapisane, jest niewłaściwa, dlatego możesz wymyślić opcję -assume-clean, nawet jeśli dyski nie są pełne zer, ale zła parzystość być wykrywanym i poprawianym, gdy mdadm wykonuje kontrolę parzystości.
psusi
2
@Paul, znaczenie „pusty” nie jest dobrze zdefiniowane. Większość ludzi używa go w ten sposób, że nie umieścił żadnych plików ani systemu plików na urządzeniu i nie wie ani nie dba o to, co obecnie zawiera. Jeśli wiesz, że wszystkie dyski są pełne zer, to --assume-clean jest tym, czego chcesz. Wierzysz, że wszystkie dyski są wyzerowane i nie przeliczą parzystości, a jak wspominasz, parzystość zerowa będzie poprawna dla dysków danych wszystkich zer, przynajmniej dla raid5 (nie dla raid6).
psusi
2

Nie można tego zrobić za pomocą programowego lub sprzętowego RAID. Wszystkie sumy kontrolne muszą być zapisane na dyskach, co zajmuje dużo czasu. Możesz to zrobić później, ale wtedy części dysku, które nie są zapisane, będą musiały to zrobić, zanim będziesz mógł z nich korzystać.

Wynika to głównie z tego, że system RAID i systemy plików nic nie wiedzą o sobie. ZFS ma na to rozwiązanie, ale tam części RAID są głęboko zintegrowane z systemem plików. Podsystem RAID faktycznie wie, w których częściach dysków są używane do przechowywania danych, a które można wykorzystać później, a następnie zapisać na nich sumy kontrolne.

Możesz dodać prędkość przepływności do programowej macierzy RAID lub rozpocząć korzystanie z macierzy RAID przed zapisaniem wszystkich sum kontrolnych i pozwolić programowej macierzy RAID zająć się tym później. Czarownica jest tym, co napisał @psusi.

Anders
źródło
Rozumiem, jak działa RAID, staram się zrozumieć, co dzieje się z sumami kontrolnymi na pustym dysku. Sumy kontrolne należy obliczać za każdym razem, gdy coś jest zapisywane na dysku, więc obliczanie ich przed pojawieniem się jakichkolwiek danych nie ma większego sensu - „robienie tego później” jest sensowne, gdy nic tam nie ma. W tym scenariuszu nie ma systemu plików do rozważenia.
Paul
6
Jest zawsze obecny danych. Może to nie być ważne ani znaczące, ale każdy sektor ma zawsze wartość. (Zero też jest wartością!) Implementacja RAID nie wie, które sektory zawierają ważne dane, więc musi traktować je wszystkie jako ważne i obliczać ich parzystość.
Wyzard,