ZFS - Durch das Zerstören von dedupliziertem zvol oder Datensatz wird der Server blockiert. Wie erholt man sich?

11

Ich verwende Nexentastor auf einem sekundären Speicherserver, der auf einem HP ProLiant DL180 G6 mit 12 Midline-SAS-Laufwerken (7200 U / min) ausgeführt wird. Das System verfügt über eine E5620-CPU und 8 GB RAM. Es gibt kein ZIL- oder L2ARC-Gerät.

Letzte Woche habe ich ein 750 GB spärliches zvol mit Dedup und Komprimierung erstellt, die für die Freigabe über iSCSI an einen VMWare ESX-Host aktiviert sind. Ich habe dann ein Windows 2008-Dateiserver-Image erstellt und ~ 300 GB Benutzerdaten auf die VM kopiert. Nachdem ich mit dem System zufrieden war, habe ich die virtuelle Maschine in einen NFS-Speicher im selben Pool verschoben.

Nachdem ich meine VMs im NFS-Datenspeicher ausgeführt hatte, entschied ich mich, das ursprüngliche zvol mit 750 GB zu entfernen. Dadurch wurde das System blockiert. Der Zugriff auf die Nexenta-Weboberfläche und NMC wurde gestoppt. Ich konnte schließlich zu einer rohen Hülle gelangen. Die meisten Betriebssystemoperationen waren in Ordnung, aber das System hing am zfs destroy -r vol1/filesystemBefehl. Hässlich. Ich habe die folgenden zwei OpenSolaris-Bugzilla-Einträge gefunden und verstehe jetzt, dass die Maschine für einen unbekannten Zeitraum zugemauert wird. Es sind 14 Stunden vergangen, daher brauche ich einen Plan, um wieder auf den Server zugreifen zu können.

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

und

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

In Zukunft werde ich wahrscheinlich den Rat befolgen, der in einer der Buzilla-Problemumgehungen gegeben wurde:

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

Update: Ich musste das System zum Ausschalten zwingen. Beim Neustart bleibt das System bei stehen Importing zfs filesystems. Das ist jetzt schon 2 Stunden so.

ewwhite
quelle

Antworten:

15

Dies wurde gelöst. Der Schlüssel ist, dass für deduplizierte Volumes das Dedup-Flag vor dem Löschen deaktiviert sein muss. Dies sollte sowohl auf Poolebene als auch auf zvol- oder Dateisystemebene erfolgen. Andernfalls wird die Löschung im Wesentlichen dedupliziert. Der Prozess benötigt Zeit, da auf die ZFS-Deduplizierungstabelle verwiesen wird. In diesem Fall hilft RAM. Ich habe dem System vorübergehend 16 zusätzliche Gigabyte RAM hinzugefügt und den Server wieder online geschaltet. Der zpool wurde innerhalb von 4 Stunden vollständig importiert.

Die Moral ist wahrscheinlich, dass Deduplizierung nicht super poliert ist und dass RAM für seine Leistung wesentlich ist. Ich schlage 24 GB oder mehr vor, abhängig von der Umgebung. Andernfalls lassen Sie die ZFS-Deduplizierung deaktiviert. Es ist definitiv nicht sinnvoll für Heimanwender oder kleinere Systeme.

ewwhite
quelle
5

Als langjähriger Benutzer von Appliances der Sun / Oracle ZFS 7000-Serie kann ich Ihnen ohne Frage sagen, dass Deduplizierung nicht poliert ist. Verwechseln Sie niemals Verkäufe mit Lieferung! Die Verkäufer werden Ihnen sagen "Oh, es wurde behoben". Im wirklichen Leben - meinem wirklichen Leben - kann ich Ihnen sagen, dass 24 GB nicht ausreichen, um die "DDT-Tabellen" zu handhaben. Das heißt, der Back-End-Index, in dem die Deduplizierungstabelle gespeichert ist. Diese Tabelle muss sich im Systemspeicher befinden, damit jede E / A während des Flugs abgefangen wird, um herauszufinden, ob sie auf die Festplatte geschrieben werden muss oder nicht. Je größer Ihr Speicherpool ist, desto mehr Daten ändern sich, desto größer ist diese Tabelle - und desto höher ist der Bedarf an Systemspeicher. Dieser Speicher geht zu Lasten von ARC (Cache) und manchmal des Betriebssystems selbst - weshalb Sie die Hänge erleben, da bestimmte Befehle im Vordergrund und einige im Hintergrund ausgeführt werden. Es scheint, dass das Löschen des Pools im Vordergrund erfolgt, sofern Sie in der CLI nichts anderes angeben. GUI-Assistenten tun dies nicht.

Selbst ein Massenlöschen von NFS-Daten innerhalb einer auf einem dedupierten Volume definierten Freigabe bringt Ihr System auf die Hälfte, wenn Sie nicht über genügend Speicher verfügen, um die "Schreibvorgänge" in ZFS zu verarbeiten und es anzuweisen, die Daten zu löschen.

Alles in allem ist es nur ein Index, der genau gebunden ist, es sei denn, Sie maximieren Ihren Speicher und finden auch dann einen Weg, Speicher für das Betriebssystem zu reservieren, indem Sie ARC und DDT einschränken (und ich glaube nicht, dass Sie DDT von Natur aus einschränken können zu Ihrem I / O) - dann werden Sie bei großen Löschvorgängen oder Destory Zvol / Pools abgespritzt.

John Berisford
quelle