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 import
dał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 poolname
a 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.cache
pliku. 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ć.
zdb /dev/sda
i / lubzdb /dev/sda2
(zakładając, że problematyczny dysk ZFS jest faktycznie identyfikowany przez system operacyjny jako / dev / sda, w przeciwnym razie dostosuj odpowiednio), proszę?Odpowiedzi:
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 -v
zgł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 status
jest 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, itpW 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.
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
badblocks
lub 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.
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:
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.
źródło