ZFS RAID- und LUKS-Verschlüsselung unter Linux

24

Ich plane, einen Satz von 3 x 2 TB 7200 U / min-Laufwerken als LUKS-verschlüsselten Z-RAID-Pool unter Linux einzurichten (für eine NAS-Lösung).

Mein Verständnis des luksFormatvorliegenden Problems ist, dass die einzige Möglichkeit, dies zu erreichen, darin besteht, auf jedem physischen Gerät einen Zpool aus entsperrten LUKS-Containern zusammenzustellen.

Ich habe folgende Bedenken:

  • Würde es die Schreibleistung nicht erheblich beeinträchtigen? In diesem Setup werden redundante Daten mehrmals verschlüsselt, da LUKS Z-RAID nicht "kennt". In der LUKS-on-mdadm-Lösung werden Daten einmal verschlüsselt und lediglich mehrmals auf Festplatten geschrieben. Meine CPU unterstützt Intel AES-NI.

  • Wird ZFS bei der Ausführung von Device-Mapper-LUKS-Containern im Gegensatz zu physischen Geräten auf Festplattenfehler aufmerksam? Wie wäre es mit Deduplizierung und anderen ZFS-Funktionen?

MasterM
quelle
4
Ich würde es nicht tun. Klingt störungsanfällig.
ewwhite
3
@ MadHatter Weil es ZFS ist. Das kannst du nicht machen.
Michael Hampton
1
Gut (ich nehme dein Wort dafür). Machen Sie ein einzelnes großes ZFS eine einzige große Datei enthält, Loopback montieren und zu verschlüsseln , dass .
MadHatter unterstützt Monica am
1
@eewhite Ich finde nur heraus, welche Optionen für die Verwendung der Verschlüsselung mit ZFS unter Linux zur Verfügung stehen, bis das ZFS-Kernelmodul die Verschlüsselung selbst implementiert. Aber ich muss zustimmen - LUKS und ZFS scheinen sich nicht gut zu verstehen.
MasterM
4
Erstellen Sie niemals eine große Datei und führen Sie ein Loopback mit ZFS durch. Sie haben Ihren Pool auf eine unbrauchbare Geschwindigkeit gebracht, wenn CoW nicht mehr genügend Platz für seine Operationen hat.
Vinícius Ferrão

Antworten:

27

Auf einem der von mir verwalteten Server wird die von Ihnen beschriebene Art der Konfiguration ausgeführt. Es verfügt über sechs 1-TB-Festplatten mit einem LUKS-verschlüsselten RAIDZ-Pool. Ich habe auch zwei 3-TB-Festplatten in einem LUKS-verschlüsselten ZFS-Spiegel, die wöchentlich ausgetauscht werden, um vom Standort entfernt zu werden. Der Server verwendet diese Konfiguration seit ungefähr drei Jahren und ich hatte nie ein Problem damit.

Wenn Sie unter Linux ZFS mit Verschlüsselung benötigen, empfehle ich dieses Setup. Ich verwende ZFS-Fuse, nicht ZFS unter Linux. Ich glaube jedoch, dass dies keinen Einfluss auf das Ergebnis haben würde, außer dass ZFS unter Linux wahrscheinlich eine bessere Leistung als das von mir verwendete Setup hat.

In diesem Setup werden redundante Daten mehrmals verschlüsselt, da LUKS Z-RAID nicht "kennt". In der LUKS-on-mdadm-Lösung werden Daten einmal verschlüsselt und lediglich mehrmals auf Festplatten geschrieben.

Beachten Sie, dass LUKS RAID nicht kennt. Es weiß nur, dass es auf einem Blockgerät sitzt. Wenn Sie mit mdadm ein RAID-Gerät erstellen und dieses dann luksformat, repliziert mdadm die verschlüsselten Daten auf die zugrunde liegenden Speichergeräte, nicht auf LUKS.

Frage 2.8 der LUKS-FAQ befasst sich mit der Frage, ob die Verschlüsselung über RAID erfolgen soll oder umgekehrt . Es enthält das folgende Diagramm.

Filesystem     <- top
|
Encryption
|
RAID
|
Raw partitions
|
Raw disks      <- bottom

Da ZFS die RAID- und Dateisystemfunktionen kombiniert, muss Ihre Lösung wie folgt aussehen.

RAID-Z and ZFS Filesystem  <-top
|
Encryption
|
Raw partitions (optional)
|
Raw disks                  <- bottom

Ich habe die unformatierten Partitionen als optional aufgeführt, da ZFS davon ausgeht, dass statt einer Partition ein unformatierter Blockspeicher verwendet wird. Sie können Ihren Zpool zwar mithilfe von Partitionen erstellen, dies wird jedoch nicht empfohlen, da hierdurch eine unnötige Verwaltungsebene hinzugefügt wird, und dies muss bei der Berechnung des Offsets für die Ausrichtung der Partitionsblöcke berücksichtigt werden.

Würde es die Schreibleistung nicht erheblich beeinträchtigen? [...] Meine CPU unterstützt Intel AES-NI.

Solange Sie eine Verschlüsselungsmethode wählen, die von Ihrem AES-NI-Treiber unterstützt wird, sollte kein Leistungsproblem vorliegen. Wenn Sie Cryptsetup 1.6.0 oder neuer haben, können Sie feststellen, cryptsetup benchmarkwelcher Algorithmus die beste Leistung erbringt .

Diese Frage zu den empfohlenen Optionen für LUKS kann ebenfalls von Wert sein.

Angesichts der Tatsache, dass Sie Hardware-Verschlüsselungsunterstützung haben, sind Leistungsprobleme aufgrund von Partitionsfehlausrichtungen wahrscheinlicher.

ZFS unter Linux hat dem Befehl die ashiftEigenschaft hinzugefügt, mit derzfs Sie die Sektorgröße für Ihre Festplatten angeben können. ashift=12Sagen Sie gemäß der verknüpften FAQ, dass Sie Laufwerke mit einer Blockgröße von 4 KB verwenden.

Die LUKS-FAQ besagen, dass eine LUKS-Partition eine Ausrichtung von 1 MB hat. In den Fragen 6.12 und 6.13 wird dies ausführlich erörtert. Außerdem erhalten Sie Hinweise, wie Sie den LUKS-Partitionsheader vergrößern können. Ich bin mir jedoch nicht sicher, ob es möglich ist, es groß genug zu machen, um sicherzustellen, dass Ihr ZFS-Dateisystem an einer 4K-Grenze erstellt wird. Ich würde gerne hören, wie das für Sie funktioniert, wenn Sie dieses Problem lösen müssen. Da Sie 2-TB-Laufwerke verwenden, tritt dieses Problem möglicherweise nicht auf.

Wird ZFS bei der Ausführung von Device-Mapper-LUKS-Containern im Gegensatz zu physischen Geräten auf Festplattenfehler aufmerksam?

ZFS ist über Festplattenfehler informiert, sofern es diese problemlos lesen und beschreiben kann. ZFS erfordert Blockspeicher und kennt die Besonderheiten dieses Speichers und dessen Herkunft nicht. Es werden nur die Lese-, Schreib- oder Prüfsummenfehler protokolliert, die aufgetreten sind. Es liegt an Ihnen, den Zustand der zugrunde liegenden Speichergeräte zu überwachen.

Die ZFS-Dokumentation enthält einen Abschnitt zur Fehlerbehebung, der es wert ist, gelesen zu werden. Der Abschnitt zum Ersetzen oder Reparieren eines beschädigten Geräts beschreibt, was während eines Fehlerszenarios auftreten kann und wie Sie es möglicherweise beheben können. Sie würden hier dasselbe tun wie bei Geräten ohne ZFS. Überprüfen Sie das Syslog auf Nachrichten von Ihrem SCSI-Treiber, HBA- oder HD-Controller und / oder der SMART-Überwachungssoftware und verfahren Sie dann entsprechend.

Wie wäre es mit Deduplizierung und anderen ZFS-Funktionen?

Alle ZFS-Funktionen funktionieren unabhängig davon, ob der zugrunde liegende Blockspeicher verschlüsselt ist oder nicht.

Zusammenfassung

  1. ZFS auf LUKS-verschlüsselten Geräten funktioniert gut.
  2. Wenn Sie über eine Hardwareverschlüsselung verfügen, wird die Leistung nicht beeinträchtigt, solange Sie eine von Ihrer Hardware unterstützte Verschlüsselungsmethode verwenden. Verwenden Sie cryptsetup benchmarkdiese Option , um festzustellen , was auf Ihrer Hardware am besten funktioniert.
  3. Stellen Sie sich ZFS als RAID und Dateisystem vor, die zu einer Einheit zusammengefasst sind. Im obigen ASCII-Diagramm ist dargestellt, wo es in den Speicherstapel passt.
  4. Sie müssen jedes LUKS-verschlüsselte Blockgerät entsperren, das das ZFS-Dateisystem verwendet.
  5. Überwachen Sie den Zustand der Speicherhardware auf die gleiche Weise wie jetzt.
  6. Beachten Sie die Blockausrichtung des Dateisystems, wenn Sie Laufwerke mit 4K-Blöcken verwenden. Möglicherweise müssen Sie mit luksformat-Optionen oder anderen Einstellungen experimentieren, um die Ausrichtung zu erhalten, die Sie für eine akzeptable Geschwindigkeit benötigen.
Seestern
quelle
3
+1 Um einen Weg zu finden, wie dies mit Beispielen funktioniert .
Ewwhite
1
1 MB ist bereits gleichmäßig durch 4 KB teilbar, daher sollten Sie bis zu einer Schicht von 20 (was meiner Meinung nach in meiner Karriere nicht erforderlich ist) richtig ausgerichtet sein, sofern Sie Rohdisketten verwendet haben.
Michael Hampton
1
Nur noch eine Sache: Ich stimme für Ihre Antwort, weil es das ist, was OP erwartet und gut geschrieben ist, also ist es sicher besser als meine Antwort.
Vinícius Ferrão
3
@ ViníciusFerrão: Beachten Sie auch, dass FreeBSD und FreeNAS einen identischen Ansatz für die ZFS-Verschlüsselung verwenden. geliwird verwendet, um ein verschlüsseltes Gerät zu erstellen, und die Klartextdaten werden über ein zweites Gerät verfügbar gemacht, das ZFS verwendet. Den zweiten Punkt finden Sie unter doc.freenas.org/index.php/Volumes#Encryption .
Seestern
2
@CMCDragonkai Da sowohl L2ARC- als auch SLOG-Geräte Daten aus Ihrem Pool enthalten, möchten Sie mit ziemlicher Sicherheit den Speicher verschlüsseln, um Vertraulichkeit zu gewährleisten (was häufig der Grund für die Verwendung von verschlüsseltem Speicher ist) Führen Sie alle L2ARC- und SLOG-Geräte aus, die ebenfalls ähnlich verschlüsselt sind.
einen
2

Eine alternative Implementierung besteht darin, ein ZVOL-Blockgerät ( http://zfsonlinux.org/example-zvol.html ) zu erstellen , das neu erstellte ZVOL mit LUKS zu verschlüsseln und dann ein ext4-Dateisystem (oder ein anderes Dateisystem) über dem verschlüsselten Block zu erstellen Gerät.

Tux Racer
quelle