ZFS-Hot-Spare funktioniert nicht

1648
Tristan Vigil

Ich habe das folgende ZFS-Testpool-Setup in meiner VM:

 NAME STATE READ WRITE CKSUM pool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 spares sdd AVAIL 

Ich versuche zu testen, ob ein Laufwerk ersetzt werden kann, das in einem ZFS-Pool automatisch nicht verfügbar ist . Wenn beispielsweise das Laufwerk aus irgendeinem Grund aus dem System entfernt wird, könnte der Ersatztauchgang unmittelbar nach dem Entfernen des Laufwerks seinen Platz einnehmen. Ich habe ein spareLaufwerk konfiguriert, und aus der Lesung habe ich verstanden, dass dies mein Ziel erreichen sollte. Ich habe auch das autoreplaceFlag gesetzt, onum zfs zu sagen, dass ein fehlerhaftes Laufwerk ersetzt werden soll, wenn es erkannt wird. Wenn Sie ein Laufwerk aus dem virtuellen Computer sdbentfernen, den Status von zfs überprüfen und erneut prüfen, sieht es wie folgt aus:

 NAME STATE READ WRITE CKSUM pool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 sdb UNAVAIL 0 0 0 sdc ONLINE 0 0 0 spares sdd AVAIL 

Das sdbGerät ist nicht verfügbar, wird jedoch niemals durch das Ersatzgerät ersetzt. Gibt es eine Möglichkeit, meinen Use-Case zum Laufen zu bringen?

3
Ist "sdd" groß genug? Es hat auch keinen Sinn, einen Zwei-Wege-Spiegel mit einem Ersatzteil zu haben. Machen Sie es einfach zu einem Dreiwegespiegel. Wenn Sie also nur einen Ersatz testen, ist Ihre Konfiguration nicht sinnvoll. Andrew Henle vor 7 Jahren 0
@AndrewHenle Ich habe nicht vor, diese Konfiguration in der Produktion durchzuführen, ich teste mit einem Spiegel, weil sie in meinem Test die einzige Konfiguration ist, die bisher scheinbar aus der Ferne mit einem Ersatz arbeitet. Ich habe noch nicht mit Raidz gespielt. Ich habe vor, das heute zu tun, aber es stellt sich heraus, dass es einen laufenden Fehler mit dem Hotspare auf Ubuntu gibt. Ich werde meine Frage später veröffentlichen. Danke für den Hinweis! Tristan Vigil vor 7 Jahren 0

2 Antworten auf die Frage

2
Tristan Vigil

Intro

Zunächst einmal für alle, die das gleiche Problem unter Ubuntu 16.04 haben, handelt es sich derzeit um einen laufenden Fehler, der meines Wissens bisher nicht behoben wurde. Sie können das Github-Gespräch hier besuchen, um den Fehler zu sehen, auf den ich mich beziehe . Zweitens schreibe ich diesen Beitrag als begeisterter und fortgeschrittener Linux-Benutzer. Ich bin kein Entwickler oder arbeite derzeit an Linux als Beruf. Ich werde jedoch die Informationen, die ich zu diesem Thema gefunden habe, nach bestem Wissen zur Verfügung stellen.

Die Angelegenheit:

Die im zfsonlinuxPaket integrierte Hot-Spare-Funktion funktioniert derzeit nicht wie auf der Manpage angegeben. zpoolManpage:

Hot Spares ZFS allows devices to be associated with pools as "hot spares". These devices are not actively used in the pool, but when an active device fails, it is automatically replaced by a hot spare. 

Hinweis: Die Cold Spare-Funktion (ein Ersatz, der nicht automatisch ersetzt wird) funktioniert nur in Konfigurationen, die aus einer mirrorsoder einer der folgenden bestehen raidz's. Wenn Sie eine Konfiguration wie die folgende haben:

NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 spares sdd AVAIL 

Bei einem Ausfall eines Laufwerks können Sie das Laufwerk aufgrund des pool I/O is currently suspendedFehlers nicht ersetzen .

Versuchte Lösungen:

Dies ist eine Liste von Lösungsversuchen, die ich durchlaufen habe, und die Ergebnisse sind erhalten:

  1. ZFS-Autoersetzung: Es stellt sich heraus, dass gemäß der zpoolManpage und meinem Verständnis die autoreplaceFunktionalität darin besteht, ein beschädigtes Laufwerk nicht durch das Ersatzgerät zu ersetzen, sondern das beschädigte Laufwerk selbst durch ein neues Gerät an seinem Standort zu ersetzen. zpoolManpage:

    If set to "on", any new device, found in the same physical location as a device that previously belonged to the pool, is automatically  formatted and replaced. 

    autoreplaceist gut zu haben, aber um die Funktionalität eines Hot-Spare zu erreichen, glaube ich nicht, dass es nötig ist. Ich kann das nicht anders bestätigen, als durch die Manpage, weil ich das Ersatzteil nicht zur Arbeit bekommen konnte.

  2. ZED.rc: Ich habe später im Gespräch auf Github herausgefunden, dass die ZED_SPARE_ON_CHECKSUM_ERRORSund - ZED_SPARE_ON_IO_ERRORSFlags in der zed.rc. Wie @ user121391 in seiner Antwort auf diesen Beitrag gesagt hat, bestimmt der Zed-Dienst / Daemon den Status des Pools und was auf der Grundlage dieses Status erforderlich ist. Sie können zed.d bei der Arbeit sehen, indem Sie ausführen zpool events. Mehr zu zed.d zu Linux hier . Nach dem Setzen der Flags, dem Neustart und dem erneuten Konfigurieren eines neuen Pools für den Fall war mein Test des Hot-Spare wieder negativ.

  3. ZED.d-Skripts: In @Michael Kjörlings Kommentar erwähnte er einige mit ZED gepackte Skripts, die für das Hot-Spare-Szenario geschrieben wurden. Ich fand die Skripte tatsächlich in /etc/zfs/zed.d. Sie können diese Skripte auf der Github Seite sehen hier . Nach meinem Verständnis von zed.d führt der ZED-Dämon beim Auslösen eines Ereignisses eines dieser Skripts basierend auf seinem Status aus. Nachdem dies gesagt wurde, habe ich versucht, das io-spare.shund checksum-spare.shmanuell auszuführen und zu beurteilen, wann und wie lange der Vorgang ausgeführt wurde, und der unveränderte Status des Pools. Sie schienen nicht korrekt zu laufen. Vielleicht ist dies eine potenzielle Quelle für das Problem.

Meine Pläne

Für Ubuntu 16.04-Benutzer von ZFS scheint meines Wissens derzeit keine Lösung für dieses Problem zu sein. Ich habe vor, ZFS weiterhin mit der Konfiguration eines mirroredoder raidz(RAID5) zu verwenden, abhängig von der Leistung, die ich beim Testen bekomme. (Gespiegelt wird schneller, aber ich möchte die Geschwindigkeit von sehen raidz) Aber leider müssen wir auf die weitere Entwicklung des zfsonlinuxProjekts warten .

Gutes Schreiben. Ich denke, der langsame Fortschritt mit dem Fehler liegt darin, dass Hot Spares nicht mehr so ​​nützlich sind - die einzige Situation, in der sie gut sind, ist, wenn Sie mehrere separate Pools mit geringer Redundanz haben. Andernfalls profitieren Sie weit mehr davon, die Festplatte direkt in den Pool einzufügen. Abgesehen von raidz1, das ich heute wegen des Schreiblochproblems nicht mehr verwenden würde, bleiben nur mehrere 2-Wege-Spiegel oder gestreifte Spiegel übrig, bei denen Ersatzteile von Vorteil sind. user121391 vor 7 Jahren 1
0
user121391

Eine schnelle Suche ergibt Folgendes :

Bei [Open] Solaris wird dies von einem Ereignisdämon verarbeitet. Autoreplace ein / aus teilt dem Dämon lediglich mit, ob er ersetzt werden soll oder nicht. Unter FreeBSD führt die Einstellung für das automatische Ersetzen standardmäßig nichts aus. Sie müssen eine devd-Regel schreiben, um den eigentlichen Austausch auszulösen. Ich bin nicht sicher, was Linux tut, aber ich bin sicher, dass es zu systemd hinzugefügt werden könnte

Es sieht so aus, als könnten Sie mit ZoL auch ZED, den ZFS-Ereignis-Daemon, verwenden.

Ja, der ZED enthält Skripts, um dieses Szenario zu behandeln. Siehe auch / usr / lib / x86_64-linux-gnu / zfs / zed.d / checksum-spare.sh (möglicherweise an einem anderen Ort auf Ubuntu, aber ich bezweifle es). a CVn vor 7 Jahren 2