Nieskończone resilverowanie ZFS

29

Mam dużą (> 100 TB) pulę ZFS (FUSE) na Debianie, która straciła dwa dyski. Ponieważ dyski uległy awarii, zamieniłem je na części zamienne, aż mogłem zaplanować awarię i fizycznie wymienić złe dyski.

Kiedy zdjąłem system i wymieniłem dyski, pula zaczęła się resilverować zgodnie z oczekiwaniami, ale kiedy osiągnie około 80% ukończenia (zwykle zajmuje to około 100 godzin), ponownie się uruchamia.

Nie jestem pewien, czy zamiana dwóch dysków naraz stworzyła warunki wyścigu, czy też ze względu na wielkość puli resilver trwa tak długo, że inne procesy systemowe przerywają go i powodują jego ponowne uruchomienie, ale nie ma wyraźnego wskazania w wyniki „statusu zpool” lub logi systemowe wskazujące na problem.

Od tamtej pory zmieniłem sposób, w jaki rozplanowałem te pule, aby poprawić wydajność resilveringu, ale wszelkie wskazówki lub porady dotyczące przywrócenia tego systemu do produkcji są mile widziane.

wyjście statusu zpool (błędy są nowe od ostatniego sprawdzenia):

  pool: pod
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: resilver in progress for 85h47m, 62.41% done, 51h40m to go
config:

    NAME                                                 STATE     READ WRITE CKSUM
    pod                                                  ONLINE       0     0 2.79K
      raidz1-0                                           ONLINE       0     0 5.59K
        disk/by-id/wwn-0x5000c5003f216f9a                ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWPK    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ2Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVA3    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQHC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPWW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09X3Z    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ87    ONLINE       0     0     0
        spare-10                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F20T1K  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN  ONLINE       0     0     0  1.45T resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQG7    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQKM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQEH    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09C7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWRF    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ7Y    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C7LN    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQAD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CBRC    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPZM    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPT9    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ0M    ONLINE       0     0     0
        spare-23                                         ONLINE       0     0     0
          disk/by-id/scsi-SATA_ST3000DM001-1CH_W1F226B4  ONLINE       0     0     0  1.45T resilvered
          disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV  ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6NL    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWA1    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CVL6    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0D6TT    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BPVX    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BGJ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9YA    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09B50    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0AZ20    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BKJW    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F095Y2    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F08YLD    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGQ    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0B2YJ    ONLINE       0     0    39  512 resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQBY    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0C9WZ    ONLINE       0     0     0  67.3M resilvered
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQGE    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0BQ5C    ONLINE       0     0     0
        disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CWWH    ONLINE       0     0     0
    spares
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F0CCMV      INUSE     currently in use
      disk/by-id/scsi-SATA_ST3000DM001-9YN_Z1F09BJN      INUSE     currently in use

errors: 572 data errors, use '-v' for a list
jasongullickson
źródło
proszę podać dane wyjściowezpool status
longneck
Jakie błędy zgłasza, jeśli używasz -v?
Bobby
„błędy: Wykryto trwałe błędy w następujących plikach:”, a następnie listę około 12 plików z błędami.
jasongullickson
W części „patrz:” możesz przeczytać bardziej szczegółowe wyjaśnienie tutaj: illumos.org/msg/ZFS-8000-8A
Raymond Tau

Odpowiedzi:

56

Gratulacje i tak. Natknąłeś się na jedną z lepszych rzeczy w ZFS, ale także popełniłeś grzech konfiguracji.

Po pierwsze, ponieważ używasz raidz1, masz tylko jeden dysk danych parzystości wartych jednego dysku. Wystąpiły jednak jednoczesne awarie dwóch dysków. Jedynym możliwym rezultatem jest tutaj utrata danych . Żadna ilość resilveringu tego nie naprawi.

Twoje części zamienne pomogły ci trochę tutaj i uratowały cię przed całkowicie katastrofalną awarią. Mam zamiar wyjść tutaj na całość i powiedzieć, że dwa dyski, które uległy awarii, nie zawiodły w tym samym czasie i że pierwszy zapasowy został tylko częściowo przywrócony do stanu początkowego przed awarią drugiego dysku.

Wydaje się to trudne do naśladowania. Oto zdjęcie:

sekwencja wydarzeń

To właściwie dobra rzecz, ponieważ gdyby była to tradycyjna macierz RAID, cała macierz po prostu przejdzie w tryb offline, gdy tylko drugi dysk ulegnie awarii i nie będzie szans na odzyskanie w miejscu. Ale ponieważ jest to ZFS, może nadal działać przy użyciu elementów, które ma i po prostu zwraca błędy bloku lub poziomu pliku dla elementów, których nie ma.

Oto jak to naprawić: krótkoterminowo, pobierz listę uszkodzonych plików zpool status -vi skopiuj je z kopii zapasowej do ich oryginalnych lokalizacji. Lub usuń pliki. Pozwoli to resilverowi wznowić i zakończyć.

Oto twój grzech konfiguracji: masz zbyt wiele napędów w grupie podwyższonej.

Długoterminowo: musisz ponownie skonfigurować dyski. Bardziej odpowiednią konfiguracją byłoby rozmieszczenie napędów w małe grupy po 5 napędów w raidz1. ZFS automatycznie rozdzieli te małe grupy. To znacznie skraca czas działania resilvera w przypadku awarii dysków, ponieważ tylko 5 dysków musi brać udział zamiast wszystkich. Polecenie, aby to zrobić, wyglądałoby mniej więcej tak:

zpool create tank raidz da0 da1 da2 da3 da4 \
                  raidz da5 da6 da7 da8 da9 \
                  raidz da10 da11 da12 da13 da14 \
                  spare da15 spare da16
długa szyja
źródło
Bardzo dziękuję @longneck za szczegółową i pouczającą odpowiedź! Jesteś świadomy sekwencji zdarzeń, a ja już skorzystałem z twoich rad dotyczących konfiguracji urządzenia (drugie urządzenie, które zbudowałem, jest skonfigurowane prawie dokładnie tak, jak opisano, z kilkoma dodatkowymi uwagami, aby utrzymać każdy nalot na całym sprzęcie, zmniejszyć szanse na utratę całego nalotu z powodu awarii płyty montażowej itp.).
jasongullickson
Po usunięciu uszkodzonych plików, „status zfs” zwraca teraz wartości szesnastkowe zamiast nazw plików; Zakładam, że to zniknie, gdy szorowanie w końcu się skończy?
jasongullickson
@jasongullickson tylko wtedy, gdy metadane systemu plików są również nienaruszone. ZFS jest dość agresywny, jeśli chodzi o ochronę metadanych, więc prawdopodobnie będziesz dobry. tylko czas powie.
longneck
osobiście nie spotkałem się wcześniej ze zdarzeniem powodującym uszkodzenie metadanych, więc nie wiem, jak to będzie wyglądać pod względem błędów.
longneck
1
@Longneck Gotcha, więc jesteśmy zgodni - zdecydowanie złym pomysłem jest posiadanie grupy RAID-Z na tyle dużej, że wąskie gardło spowalniasz i spowalniasz. Innym dużym ryzykiem związanym z większymi grupami jest zwiększone prawdopodobieństwo awarii drugiego urządzenia podczas resilveru - większa liczba dysków parzystości (z RAID-Z2 lub 3) pomogłaby w problemach z niezawodnością, ale nie z prędkością resilvera .
Shane Madden