P: MDADM mismatch_cnt> 0. Jakikolwiek sposób na określenie, które bloki są niezgodne?

12

W porządku. Po rutynowym szorowaniu mój MDADM RAID5 zgłasza mismatch_cnt = 16. Jak rozumiem, oznacza to, że chociaż żadne urządzenie nie zgłosiło błędu odczytu, istnieje 16 bloków, dla których dane i parzystość się nie zgadzają.

Pytanie nr 1: Czy można uzyskać listę tych bloków?

Pytanie nr 2: Zakładając, że numer 1 jest możliwy, biorąc pod uwagę, że podstawowym systemem plików jest EXT4, czy istnieje sposób na określenie, które pliki są powiązane z tymi blokami?

Mam kopie zapasowe typu nearline i w idealnym świecie mógłbym po prostu różnicować macierz na żywo w stosunku do danych kopii zapasowej, aby zlokalizować wszelkie pliki, które zostały po cichu uszkodzone. Ale w rzeczywistości przypomina się, że 6 TB kopii zapasowych danych byłoby niewiarygodnie drogie i czasochłonne. Wiedza, gdzie szukać i co odzyskać, znacznie uprościłaby sprawę.

(Powinienem zauważyć, że uruchamiam szorowanie RAID tylko z opcją „sprawdź”. Szorowanie z opcją „naprawy” wydaje się strasznie niebezpieczne, ponieważ MDADM wie tylko, że dane lub parzystość są nieprawidłowe, ale nie wie, które. Wygląda więc na to, że istnieje 50% szansy, że MDADM zgadnie źle i odtworzy nieprawidłowe dane. Stąd moje pragnienie, aby wiedzieć, które pliki potencjalnie są zagrożone, aby w razie potrzeby móc je przywrócić z kopii zapasowej)

Wszelkie sugestie bardzo mile widziane!

arcasinky
źródło
sprawdź dmesgczy / var / log / syslog?
psusi
Cześć. Niemal, jak mogę stwierdzić, jedynymi wiadomościami zalogowanymi do syslog przez scrubber były komunikaty start i stop. Żadne wiadomości dotyczące niezgodności nie zostały zarejestrowane.
arcasinky,
Zobacz icheck+ ncheckw, debugfsaby znaleźć pliki na podstawie przesunięcia sektora.
sch
Próbowałem dodać rejestrowanie dla numeru sektora. Teraz próbuję wymyślić, co dalej: unix.stackexchange.com/questions/266432/...
Peter Cordes
2
Wiem, że nic nie mówi, że dyski są złe, ale sprawdź je. Skorzystaj z pakietu smartmontools, aby zrobić to dla każdego dysku (jak w smartctl -a /dev/sdai tak dalej), lub użyj dowolnej innej metody, aby uruchomić krótki test SMART na każdym dysku i wydrukować pełny raport. Jest bardzo prawdopodobne, że jeden z nich umiera i potrzeba poważnego zła, aby wywołać ogólny alarm zdrowia SMART.
Spooler

Odpowiedzi:

1

Niestety, „check” rzeczywiście zapisuje ponownie tablicę, gdy napotka błąd - patrz https://www.apt-browse.org/browse/ubuntu/trusty/main/amd64/mdadm/3.2.5-5ubuntu4/file /usr/share/doc/mdadm/README.checkarray

„check” jest operacją tylko do odczytu, nawet jeśli dzienniki jądra mogą sugerować inaczej (np. / proc / mdstat, a kilka komunikatów jądra wspomina o „resynchronizacji”). Zobacz także pytanie 21 w FAQ.

Jeśli jednak podczas odczytu wystąpi błąd odczytu, kontrola uruchomi normalną odpowiedź na błędy odczytu, czyli wygenerowanie „poprawnych” danych i próba ich zapisania - więc możliwe jest, że „kontrola” uruchomi pisać. Jednak w przypadku braku błędów odczytu jest tylko do odczytu.

... więc może już być za późno na zbieranie danych, których szukasz, przepraszam.

W dłuższej perspektywie warto zauważyć, że RAID5 (oraz 6 i 1) nie mają ochrony przed gniciem bitów, co jest prawdopodobnie sytuacją, z którą się spotkałeś. Gdy dane na jednym dysku ulegają uszkodzeniu, nie są w stanie określić, która z nich jest dobra, czy zła. Sugeruję planowanie migracji do systemu plików, który sumuje sumę kontrolną każdej płyty, np. Btrfs lub zfs.

(RAID-5 naprawdę nie powinien być stosowany w nowych wdrożeniach - i naprawdę nie powinien być tam, gdzie pojemność surowych dysków przekracza 2 TB każdy - patrz http://www.zdnet.com/article/why-raid-5- przestaje działać w 2009 r. / )

Andrew W.
źródło