ZFS - niszczenie deduplikowanego pliku zvol lub zestawu danych blokuje serwer. Jak odzyskać?

11

Używam Nexentastor na dodatkowym serwerze pamięci działającym na HP ProLiant DL180 G6 z 12 dyskami SAS Midline (7200 RPM). System ma procesor E5620 i 8 GB pamięci RAM. Nie ma urządzenia ZIL ani L2ARC.

W zeszłym tygodniu stworzyłem rzadki zvol o pojemności 750 GB z deduplikacją i kompresją umożliwiającą udostępnianie za pośrednictwem iSCSI hostowi VMWare ESX. Następnie utworzyłem obraz serwera plików systemu Windows 2008 i skopiowałem ~ 300 GB danych użytkownika na maszynę wirtualną. Po zadowoleniu z systemu przeniosłem maszynę wirtualną do sklepu NFS w tej samej puli.

Po uruchomieniu z moimi maszynami wirtualnymi w magazynie danych NFS postanowiłem usunąć oryginalny zvol 750 GB. Spowodowało to zablokowanie systemu. Dostęp do interfejsu internetowego Nexenta i NMC został wstrzymany. W końcu udało mi się dostać do surowej powłoki. Większość operacji systemu operacyjnego była w porządku, ale system zawiesił się na zfs destroy -r vol1/filesystempoleceniu. Brzydki. Znalazłem następujące dwa wpisy Bugzilli OpenSolaris i teraz rozumiem, że maszyna zostanie zamurowana na nieznany okres czasu. Minęło 14 godzin, więc potrzebuję planu, aby móc odzyskać dostęp do serwera.

http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6924390

i

http://bugs.opensolaris.org/bugdatabase/view_bug.do;jsessionid=593704962bcbe0743d82aa339988?bug_id=6924824

W przyszłości prawdopodobnie skorzystam z porady podanej w jednym z obejść buzilli:

Workaround
    Do not use dedupe, and do not attempt to destroy zvols that had dedupe enabled.

Aktualizacja: Musiałem wymusić wyłączenie systemu. Po ponownym uruchomieniu system zatrzymuje się na Importing zfs filesystems. Tak było już od 2 godzin.

ewwhite
źródło

Odpowiedzi:

15

Zostało to rozwiązane. Kluczem jest to, że deduplikowane woluminy muszą mieć wyłączoną flagę deduplikacji przed usunięciem. Należy to zrobić na poziomie puli, jak również na poziomie Zvol lub systemu plików. W przeciwnym razie usunięcie jest zasadniczo deduplikowane. Proces ten wymaga czasu, ponieważ odwołuje się do tabeli deduplikacji ZFS. W takim przypadku pomaga pamięć RAM. Tymczasowo dodałem 16 dodatkowych gigabajtów pamięci RAM do systemu i przywróciłem serwer do trybu online. Zpool zaimportowano całkowicie w ciągu 4 godzin.

Morał jest prawdopodobnie taki, że dedupe nie jest super dopracowane i że pamięć RAM jest niezbędna do jego działania. Sugeruję 24 GB lub więcej, w zależności od środowiska. W przeciwnym razie pozostaw ZFS dedupe wyłączony. To zdecydowanie nie jest rozsądne dla użytkowników domowych lub mniejszych systemów.

ewwhite
źródło
5

Jako długoletni użytkownik urządzeń Sun / Oracle ZFS z serii 7000, mogę powiedzieć, że deduplikacja nie jest dopracowana. Nigdy nie myl sprzedaży z dostawą! Sprzedawcy powiedzą „Och, to zostało naprawione”. W prawdziwym życiu - w moim prawdziwym życiu - mogę powiedzieć, że 24 GB to za mało, aby poradzić sobie z „tabelami DDT”. To znaczy indeks zaplecza, który przechowuje tabelę deduplikacji. Ta tabela musi znajdować się w pamięci systemowej, aby każde wejście / wyjście było przechwytywane podczas lotu, aby ustalić, czy należy zapisać na dysku, czy nie. Im większa pula pamięci, tym więcej zmian danych, tym większa tabela - i większe zapotrzebowanie na pamięć systemową. Pamięć ta odbywa się kosztem ARC (pamięci podręcznej), a czasem samego systemu operacyjnego - dlatego występują zawieszanie się, ponieważ niektóre polecenia pojawiają się na pierwszym planie, niektóre w tle. Wygląda na to, że usuwanie puli odbywa się na pierwszym planie, chyba że w CLI podano inaczej. Czarodzieje GUI tego nie zrobią.

Nawet masowe usuwanie danych NFS w ramach udziału zdefiniowanego w deduponowanym woluminie spowoduje, że Twój system będzie o połowę mniejszy, jeśli nie będziesz mieć wystarczającej ilości pamięci do przetworzenia „zapisów” do ZFS z poleceniem usunięcia danych.

Podsumowując, chyba że zmaksymalizujesz pamięć, a nawet wtedy, znajdziesz sposób na zarezerwowanie pamięci dla systemu operacyjnego poprzez ograniczenie ARC i DDT (i nie sądzę, że możesz ograniczyć DDT ze względu na jego naturę, jest to tylko indeks związany dokładnie do swoich I / O) - wtedy jesteś ukrywany podczas dużych kasowań lub destv zvol / pool.

John Berisford
źródło