W przypadku ZFS, jeśli masz, copies=2
a następnie straciłeś dysk zawierający niektóre z tych kopii, jak możesz powiedzieć systemowi, że powinien utworzyć nową kopię bloków danych dla plików, których dotyczy problem? A może ZFS zaczyna dodawać bloki danych dla dodatkowych kopii, gdy tylko dowie się o złych blokach danych?
Czy peeling to zrobi?
(v0.6.0.56-rc8, pula ZFS wersja 28, system plików ZFS wersja 5, Ubuntu 11.10)
For a device to be replaced, the pool must be in the ONLINE state. The device must be part of a redundant configuration, or it must be healthy (in the ONLINE state).
... Zakładam, że kopie = 2 lub 3 nie są uważane za konfigurację nadmiarową.copies=1
to zrobiłeścopies=2
i poprawiłeś, prawdopodobnie będziesz chciał później wykonać resilver / rescrub - co utworzy te instancje. Ale @jilliagre jest poprawne: bloki ditto nie stanowią zbędnej konfiguracji. Nie ma ŻADNEJ gwarancji, że bloki są ustawione na innym urządzeniu, nawet jeśli masz wiele urządzeń w puli.Uznałem to pytanie za bardzo intrygujące i po godzinie spędzonej na przeglądaniu dokumentacji, zagłębiłem się w kod. Oto co znalazłem.
Najpierw trochę terminologii. Bloki Ditto (które są tymi kopiami, w przeciwieństwie do kopii lustrzanych) są tworzone automatycznie podczas zapisu, ale mogą, ale nie muszą znajdować się w tym samym urządzeniu wirtualnym (vdev), co oryginalna kopia. Z drugiej strony bloki lustrzane są zawsze odzwierciedlane na innym urządzeniu wirtualnym.
Jednak kod odnosi się do obu typów bloków jako dzieci. Zobaczysz tutaj, że bloki ditto są tylko dziećmi
io_vd == NULL
(jest to funkcja zapisu). W przypadku bloku lustrzanegoio_vd
ustawiono by odpowiednie urządzenie wirtualne (na przykład drugi dysk).Mając to na uwadze, gdy dojdzie do części do czytania , traktuje wszystkie dzieci (czy to dublowane, jak i bloki ditto) jako potencjalnie niebezpieczne, jeśli nie zawiera oczekiwanych
good_copies
, i przepisuje je w razie potrzeby . Wygląda więc na to, że odpowiedź na twoje pytanie brzmi - tak, przepisze je, gdy będziesz mieć co najmniej jeden dobry egzemplarz i jedno z poniższych:Uff! Może ktoś może wskazać wady, ale podobało mi się poznawanie ZFS podczas tego małego ćwiczenia i mam nadzieję, że to pomaga!
źródło
@jlliagre i inni, którzy wydają się myśleć, że cały zpool umrze, jeśli umrze jeden z dysków (vdevs), ale pula nie będzie redundantna (mirror / raidz). To nie jest prawda; pula z wieloma dyskami zawsze przetrwa pojedynczą całkowitą awarię dysku, nawet jeśli nie jest kopią lustrzaną lub podniesioną.
Metadane ZFS są zawsze kopiowane co najmniej 2 razy, więc całkowita awaria całego dysku (lub dowolnej jego części) nie spowoduje awarii systemu plików. Co więcej, wiele plików, zwłaszcza mniejszych, nie zostanie rozłożonych na wszystkie dyski, a zatem niekoniecznie zostanie uszkodzony przez awarię dysku. OP pyta o przypadek puli wielodyskowej wykorzystującej bloki ditto (kopie danych użytkownika> 1). W tym przypadku pojedyncza kompletna awaria dysku
nigdy niepowinna prowadzić do utraty danych.ZFS zawsze będzie próbował umieścić bloki ditto z dala od oryginalnego bloku, a dla pul z wieloma vdev, zawsze oznacza to inny vdev (wyjątek może stanowić sytuacja, w której jeden vdev jest większy niż 50% puli, co byłoby bardzo nietypowe) . Metadane systemu plików są również zawsze kopiowane +1 lub +2 razy więcej niż poziom ditto, więc zawsze przetrwa awarię dysku. Ponadto, jeśli masz pulę większą niż trzy dyski, powinieneś być w stanie stracić do połowy z nich bez utraty danych; ZFS przechowuje bloki ditto na następnym dysku tak długo, jak długo nie stracisz dwóch sąsiadujących dysków, nigdy nie utracisz danych. (trzy awarie dysku dla ditto = 2).Jeśli istnieje wystarczająca liczba kopii danych, aby uzyskać dostęp do pliku (bez względu na to, czy kopie te pochodzą z bloków ditto, kopii lustrzanej lub raidz), wszystkie brakujące kopie danych są naprawiane po uzyskaniu dostępu do pliku. To jest cel peelingu; przeczytaj wszystkie dane i napraw wszystkie złe, korzystając z nadmiarowych kopii. Aby więc odpowiedzieć bezpośrednio na pytanie OP, wystarczy wymienić po wymianie uszkodzonego dysku, a wszystkie kopie zostaną przywrócone.
Jak zawsze, możesz łatwo eksperymentować z pojęciami, tworząc pule, których vdevs do przechowywania kopii zapasowych są zwykłymi rzadkimi plikami. Usuwając lub uszkadzając pliki vdev, można symulować wszelkiego rodzaju awarie, a także weryfikować integralność puli, systemów plików i danych po drodze.
EDYCJA: po eksperymentach wygląda na to, że zfs zawiedzie pulę, jeśli dysk ulegnie awarii w wielodyskowej nie nadmiarowej puli z kopiami> = 2. Uszkodzenie danych małżeńskich na co najmniej jednym dysku powinno pozostać do przeżycia i powinno zostać naprawione przez czyszczenie.
źródło