Tutoriel Linux

ZFS : uruchomienie scrub i odczyt błędów z puli

Débutant3 min de lecture

NAS może pozostać dostępny, podczas gdy zpool status zaczyna zgłaszać błędy odczytu lub sumy kontrolne. Zanim uznasz, że jeden z dysków jest martwy, uruchom scrub na dobrym poolu. Ta weryfikacja odczytuje bloki z poola i sprawdza ich sumy kontrolne.

Na serwerze, który hostuje VM, kopie zapasowe lub udostępnienia, wybrałbym spokojne okno I/O. Scrub wykorzystuje dyski, a ZFS odmawia jego wykonania w tym samym czasie, co resilver. Celem jest ustalenie, czy pool pozostaje zdrowy, a nie uruchamianie polecenia, aby zniknęło ostrzeżenie.

Pool ZFS z trzema dyskami kontrolowany przy pomocy lupy na błąd
Scrub kontroluje bloki poola i ujawnia błędy w zpool status.

Przed scrubem, potwierdź nazwę poola

Najpierw zapoznaj się z aktualnym stanem. Nie zgaduj nazwy poola na podstawie montażu lub dysku widocznego w lsblk. Polecenie zpool list wyświetla zaimportowane poole, a następnie zpool status -v przedstawia ich stan i znane błędy.

sudo zpool list
sudo zpool status -v tank

Zamień tank na nazwę zwróconą przez Twoją maszynę. W wynikach, zwróć uwagę na linię scan, ogólny stan poola oraz liczniki READ, WRITE i CKSUM dla vdevs. Wersja -v może również wypisać dotknięte pliki, gdy ZFS zna ich ścieżkę.

Pool już w procesie resilver odbudowuje dodany lub wymieniony dysk. Poczekaj na zakończenie tej operacji przed zażądaniem scrub: OpenZFS zezwala tylko na jedną operację tego typu w danym czasie. Jeśli dyski obsługują bazę danych lub VM o dużym obciążeniu, przełóż kontrolę, aby nie stworzyć przeciążenia I/O w ciągu dnia.

Uruchom scrub w spokojnym okresie

Następujące polecenie uruchamia normalny scrub na tank:

sudo zpool scrub tank

Scrub przeszukuje dane i sprawdza sumy kontrolne. W przypadku lustra, RAIDZ lub dRAID, ZFS może naprawić uszkodzone bloki, jeśli ma ważną kopię. Izolowany dysk lub uszkodzenie bez replikacji pozostaje przypadkiem do rozwiązania z kopią zapasową lub wymianą sprzętu.

Polecenie zwraca się niemal natychmiast. To normalne: praca kontynuuje się w tle. Jeśli obciążenie stanie się uciążliwe, OpenZFS pozwala wstrzymać scrub, a następnie wznowić go później tym samym poleceniem.

sudo zpool scrub -p tank
sudo zpool scrub tank

Unikaj zpool scrub -a przy pierwszej kontroli. Ta opcja uruchamia, wstrzymuje lub zatrzymuje operację na wszystkich poolach i może mocno obciążyć maszynę, która hostuje ich wiele.

Śledzenie postępów i odczyt błędów

Uruchom ponownie zpool status podczas scrub:

sudo zpool status tank
sudo zpool status -v tank

Linia scan wskazuje rozpoczęcie operacji, objętość zeskanowaną, postęp, przepustowość oraz oszacowanie pozostałego czasu. Postęp przekraczający 100 % może się pojawić na aktywnym poolu, ponieważ dane zmieniają się podczas odczytu.

Na końcu ponownie sprawdź liczniki dysków i szczegółową listę. Czysty wynik wygląda jak ukończony scrub z 0 errors. Naprawione błędy zasługują na sprawdzenie historii dysku, kabli i kontrolera. Wiadomości jądra często są przydatne na tym etapie: przewodnik dmesg pod Linuxem pokazuje, jak izolować ostrzeżenia o przechowywaniu.

  • WZROST READ lub WRITE : sprawdź dysk, kabel i kontroler przed kolejną ciężką operacją.
  • WZROST CKSUM : szukaj błędu transferu lub odczytu, nawet jeśli ZFS naprawiło bloki dzięki zdrowej kopii.
  • Pliki wymienione po scrubie : przywróć je z zweryfikowanej kopii zapasowej, a następnie wymień wadliwy sprzęt, jeśli błędy się powtarzają.

Po stałym błędzie, wyjście z prostego sprawdzenia

Scrub wiarygodności widocznej poola w danym momencie. Nie zastępuje kopii zapasowej poza NAS, i nie przekształca niestabilnego dysku w dysk godny zaufania. Jeśli zpool status -v tank nadal wymienia błędy po zakończeniu skanu, najpierw skopiuj jeszcze czytelne dane do zdrowego miejsca docelowego.

Dokumentacja OpenZFS dotycząca zpool scrub precyzuje, że kontrole sumy kontrolnej przeszukują wszystkie bloki, a automatyczne naprawy wymagają ważnej kopii zapasowej. Dla poola bez redundancji, rozsądna decyzja to przywrócenie z kopii zapasowej i wymiana wadliwego nośnika.

sudo apt update && sudo apt upgrade