ZFS w Linuksie Niewystarczające repliki

3

streszczenie

Nie można już zaimportować jednej z moich pul ZFS z powodu następującego komunikatu:

status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
...
    data1       UNAVAIL  insufficient replicas

Chciałbym zrozumieć, co oznacza „niewystarczająca liczba replik”, i czy jest jakiś sposób na bezpieczne odzyskanie tego, zanim wyciągnę kopie zapasowe i odbuduję pulę pamięci.

Chciałbym również zrozumieć, co to spowodowało i co mogę zrobić, aby zapobiec tej sytuacji w przyszłości. Rozumiem skały ZFS, ale jako początkujący ZFS to przerażające, że muszę tworzyć kopie zapasowe dla czegoś tak nieszkodliwego, jak wyciąganie dysku z pudełka.

tło

Niedawno wyłączyłem to urządzenie i wyciągnąłem dysk SATA SDA. Jestem w 99% pewien, że pozwoliłem na całkowite wyłączenie systemu przed odłączeniem go od ściany, ale możliwe jest, że wyłączyłem zasilanie, jeśli wyłączenie trwało zbyt długo.

Po ponownym podłączeniu dysku wydaje mi się, że podłączyłem go z powrotem do tego samego portu SATA na płycie głównej, ale możliwe, że podłączyłem go do innego portu.

Pudełko zawiera również starszy dysk PATA sdb, na którym Debian jest zainstalowany jako jedyny system operacyjny na partycji ext.

W przeszłości uruchamiałem się, wszystkie moje pule były importowane, a woluminy montowane. Tym razem nic nie mam.

Dzisiaj

Kiedy uruchomiłem urządzenie, byłem na zwykłym ekranie logowania GDM i zdałem sobie sprawę, że nie mogę się zalogować. Później odkryłem, że nie mam katalogów domowych użytkowników, ponieważ wszystkie znajdują się w puli.

Z wiersza poleceń odkryłem, co następuje:

# zfs list
no datasets available

# zpool list
no pools available

# zpool status
no pools available

Moje dyski były dostępne; fdisk wyprodukował oczekiwany wynik i miałem moje urządzenia / dev / sdaX i / dev / sdbX.

zpool importdało mi ciekawe wyniki. Pozostałe pule zgłosiły się ONLINE, ale ta, o której mowa, zgłosiła to:

   pool: ...
     id: ...
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
    see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        data1       UNAVAIL  insufficient replicas
          sda2      UNAVAIL

W tym momencie mogłem zaimportować inne pule, zpool import poolnamea potem przekonałem się, że wszystko jest w porządku zfs list.

Nie tak z tym:

# zpool import data1
cannot import 'data1': one or more devices are already in use

zpool import pokazał tę samą wydajność dla tej puli.

Myślałem o usunięciu /etc/zfs/zpool.cachepliku. Wyeksportowałem wszystko, a następnie sprawdziłem katalog:

# zpool export -a
# ls /etc/zfs

Po wyeksportowaniu nie było pliku zpool.cache, więc po prostu uruchomiłem ponownie. (Nie wiem, co by się stało, gdybym usunął plik zpool.cache podczas importowania pul, więc nie próbowałem.)

Te same wyniki po ponownym uruchomieniu. Pozostałe pule są w porządku i tej nie można zaimportować.

jia103
źródło
ZFS jest ogólnie niewrażliwy na nazwy urządzeń i zacznie szukać urządzenia, jeśli nie ma go tam, gdzie jest plik pamięci podręcznej. (Każde urządzenie bazowe ZFS przechowuje unikalny identyfikator, IIRC 64 bity, a wszystkie urządzenia w puli przechowują listę urządzeń tej puli według identyfikatora.) To powiedziawszy, czy możemy zobaczyć dane wyjściowe zdb /dev/sdai / lub zdb /dev/sda2(zakładając, że problematyczny dysk ZFS jest faktycznie identyfikowany przez system operacyjny jako / dev / sda, w przeciwnym razie dostosuj odpowiednio), proszę?
CVn

Odpowiedzi:

1

Chciałbym zrozumieć, co oznacza „niewystarczająca liczba replik”

Oznacza to, że ZFS napotkał błąd odczytu lub zapisu w puli, a następnie stwierdził, że w puli nie ma wystarczającej nadmiarowości, aby rozwiązać problem. Ponieważ wygląda na to, że skonfigurowałeś ZFS dla pul z jednym dyskiem, oznacza to po prostu, że napotkał problem i teraz nie może sam się zregenerować.

W prostym przypadku zpool status -vzgłosi pojedyncze pliki, które są teraz nieodwracalnie uszkodzone. Przywrócenie ich z kopii zapasowych lub usunięcie spowoduje przywrócenie puli do nieuszkodzonego stanu. Jest to jedna z korzyści, jakie zyskujesz dzięki ZFS w porównaniu z oddzielnym systemem plików, logicznym menedżerem woluminów i podsystemami RAID. Błąd na poziomie dysku wpływający na pojedynczy plik może być zgłoszony jako błąd w tym konkretnym pliku, podczas gdy przy połączeniach FS + LVM + RAID błąd na niższych poziomach nie może utrzymać kontekstu semantycznego podczas propagacji w górę stosu.

Zgodnie z pytaniem, jednak zpool statusjest nie zgłoszenie problemu z poszczególnych plików, co oznacza coś bardziej fundamentalnego poszło nie tak z samotnego dysku w basenie problemów. W tym momencie chciałbym być patrząc na diagnozowaniu sam dysk: smartctl, badblocks, SpinRite, sprzedawca narzędzi diagnostycznych, itp

W przyszłości zdecydowanie rozważ użycie przynajmniej kopii lustrzanych w ZFS. ZFS może albo naprawić takie problemy, gdy otrzymujesz nadmiarowość do pracy, albo przynajmniej pozwolić ci utykać, dopóki nie będziesz w stanie zorganizować wymiany dysku.

jakikolwiek sposób, aby bezpiecznie się z tego zregenerować, zanim wyciągnę kopie zapasowe

Gdyby ZFS mógł to zrobić, zrobiłby to. ZFS nie poddaje się łatwo, ale kiedy to robi, oznacza to, że nie możesz bezpiecznie korzystać z danych w puli.

W tym momencie możesz mieć nadzieję, że problem polega na tym, że podstawowy nośnik pamięci ma miękki błąd, który pozwoli SpinRite badblockslub podobnemu na pojawienie się i zmusi dysk do pobrania czystej kopii uszkodzonego sektora po raz ostatni i skopiuj go do wolnego sektora.

Uważaj, że ZFS jest w tym względzie bardziej rygorystyczny niż inne systemy plików, ponieważ nie zaakceptuje częściowego odzyskiwania sektora. Silne sumowanie danych oznacza, że ​​tylko pełne przywrócenie każdego sektora może spowodować, że ZFS zaakceptuje, że system plików jest teraz czysty.

Jeśli jesteś przekonany, że częściowe dane są lepsze niż brak danych, oznacza to, że ZFS jest dla ciebie problemem. Jeśli zamiast tego uważasz, że nieprawidłowe dane są nieprawidłowe, ZFS robi dokładnie to, co chcesz.

jedno lub więcej urządzeń jest już używanych

To nie jest dobrze.

Oznacza to, że pozwoliłeś, aby jakiś inny sterownik jądra podłączał się do tego dysku, zanim ZFS mógłby się do niego dostać, lub ZFS znajduje ten sam dysk na wiele ścieżek.

Moją najlepszą nadzieją jest to, że jesteś w drugim przypadku, a zmuszenie ZFS do wyszukiwania dysków za pomocą tylko jednej ścieżki może prześlizgnąć się przez ten problem:

$ sudo ZPOOL_IMPORT_PATH="/dev/disk/by-id" zpool import -a

Jeśli to zadziała, wówczas eksport i ponowny import puli problemów może działać bez użycia siły, ponieważ ZFS zwykle pamięta ścieżkę, po której ostatnio importowane były pliki vdev.

Warren Young
źródło