Frage ZFS RAID- und LUKS-Verschlüsselung in Linux


Ich plane, ein Set von 3x 2TB 7200rpm Laufwerken als einen LUKS-verschlüsselten Z-RAID-Pool in Linux (für eine NAS-Lösung) einzurichten.

Mein Verständnis des vorliegenden Problems ist, dass der einzige Weg dies zu erreichen ist luksFormat Jedes physische Gerät und dann ein Zpool aus nicht gesperrten LUKS-Containern zusammenstellen.

Ich habe folgende Bedenken:

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

  • Wird ZFS bei der Verwendung von Device-Mapper-LUKS-Containern im Gegensatz zu physischen Geräten auf Datenträgerfehler stoßen? Wie wäre es mit Deduplizierung und anderen ZFS-Funktionen?


21
2018-04-05 22:52


Ursprung


Ich würde es nicht tun. Klingt fehleranfällig. - ewwhite
@MadHatter Weil es ZFS ist. Das kannst du nicht tun. - Michael Hampton♦
Gut (ich nehme dein Wort dafür). Erstellen Sie ein einzelnes großes ZFS, das eine einzelne große Datei enthält, loopback, mounten Sie es und verschlüsseln Sie es Das. - MadHatter
@eewhite Ich untersuche lediglich Optionen für die Verwendung der Verschlüsselung mit ZFS unter Linux, bis das ZFS-Kernelmodul die Verschlüsselung selbst implementiert. Aber ich muss zustimmen - LUKS und ZFS scheinen nicht gut miteinander auszukommen. - MasterM
Erstellen Sie niemals eine große Datei und führen Sie eine Schleife mit ZFS aus. Sie haben Ihren Pool zu einer unbrauchbaren Geschwindigkeit vermasselt, als CoW keinen Platz mehr für seine Operationen hatte. - Vinícius Ferrão


Antworten:


Einer der Server, die ich administriere, führt den Typ der Konfiguration aus, die Sie beschreiben. Es verfügt über sechs 1TB-Festplatten mit einem LUKS-verschlüsselten RAIDZ-Pool. Ich habe auch zwei 3TB-Festplatten in einem LUKS-verschlüsselten ZFS-Spiegel, die jede Woche ausgelagert werden, um von der Baustelle genommen zu werden. Der Server verwendet diese Konfiguration seit etwa drei Jahren, und ich hatte nie ein Problem damit.

Wenn Sie ZFS mit Verschlüsselung unter Linux benötigen, empfehle ich diese Einrichtung. Ich benutze ZFS-Fuse, nicht ZFS unter Linux. Allerdings glaube ich, dass das keine Auswirkungen auf das Ergebnis haben würde, außer ZFS unter Linux wird wahrscheinlich eine bessere Leistung als das Setup haben, das ich verwende.

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

Bedenken 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 dann luksformat es ist mdadm, das die verschlüsselten Daten zu den zugrunde liegenden Speichergeräten repliziert, nicht LUKS.

Frage 2.8 der LUKS FAQ adressiert, ob Verschlüsselung sollte über RAID oder anders herum sein. Es bietet das folgende Diagramm.

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

Da ZFS die RAID- und Dateisystemfunktionalität 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 aufgelistet, da ZFS erwartet, dass es einen Rohblockspeicher anstelle einer Partition verwendet. Sie könnten Ihren zpool zwar mithilfe von Partitionen erstellen, es wird jedoch nicht empfohlen, da dies zu einer nutzlosen Verwaltungsebene führt und bei der Berechnung des Offset für die Blockausrichtung von Partitionen berücksichtigt werden muss.

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

Solange Sie eine Verschlüsselungsmethode auswählen, die von Ihrem AES-NI-Treiber unterstützt wird, sollte es kein Leistungsproblem geben. Wenn Sie Cryptsetup 1.6.0 oder neuer haben, können Sie laufen cryptsetup benchmark und sehen Sie, welcher Algorithmus die beste Leistung liefert.

Diese Frage zu empfohlenen Optionen für LUKSkann auch von Wert sein.

Angesichts der Tatsache, dass Sie Unterstützung für die Hardwareverschlüsselung haben, sind Sie eher mit Leistungsproblemen aufgrund einer Fehlausrichtung der Partition konfrontiert.

ZFS unter Linux hat hinzugefügt die ashift Eigentum an der zfs Befehl Damit können Sie die Sektorgröße für Ihre Festplatten angeben. Laut den verlinkten FAQ, ashift=12 würde sagen, dass Sie Laufwerke mit einer 4K Blockgröße verwenden.

Die LUKS-FAQ besagt, dass eine LUKS-Partition eine Ausrichtung von 1 MB aufweist. Fragen 6.12 und 6.13 Besprechen Sie dies ausführlich und geben Sie auch Hinweise, wie Sie den LUKS-Partitionskopf 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 erfahren, wie das für Sie funktioniert, wenn Sie ein Problem lösen müssen. Da Sie 2-TB-Laufwerke verwenden, haben Sie dieses Problem möglicherweise nicht.

Wird ZFS bei der Verwendung von Device-Mapper-LUKS-Containern im Gegensatz zu physischen Geräten auf Datenträgerfehler stoßen?

ZFS wird Festplattenfehler erkennen, da es problemlos lesen und schreiben kann. ZFS benötigt Blockspeicher und kümmert sich nicht um die Besonderheiten dieses Speichers und weiß nicht, woher er kommt. Es speichert nur alle Lese-, Schreib- oder Prüfsummenfehler, auf die es trifft. Es liegt an Ihnen, den Zustand der zugrunde liegenden Speichergeräte zu überwachen.

Die ZFS-Dokumentation enthält einen Abschnitt zur Fehlerbehebung was lesenswert ist. Der Abschnitt über Ersetzen oder Reparieren eines beschädigten Geräts beschreibt, was während eines Fehlerszenarios auftreten könnte und wie Sie es lösen könnten. Sie würden hier dasselbe tun, was Sie für Geräte tun würden, die kein ZFS haben. Überprüfen Sie das Syslog auf Meldungen von Ihrem SCSI-Treiber, HBA- oder HD-Controller und / oder SMART-Überwachungssoftware und handeln 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 kein Leistungseinbruch angezeigt, solange Sie eine Verschlüsselungsmethode verwenden, die von Ihrer Hardware unterstützt wird. Benutzen cryptsetup benchmark um zu sehen, was auf Ihrer Hardware am besten funktioniert.
  3. Stellen Sie sich ZFS als RAID und Dateisystem in einer Einheit vor. Sehen Sie im obigen ASCII-Diagramm nach, wo es in den Speicherstapel passt.
  4. Sie müssen jedes LUKS-verschlüsselte Blockgerät entsperren, das vom ZFS-Dateisystem verwendet wird.
  5. Überwachen Sie den Zustand der Speicherhardware genauso wie jetzt.
  6. Beachten Sie die Blockausrichtung des Dateisystems, wenn Sie Laufwerke mit 4K-Blöcken verwenden. Möglicherweise müssen Sie mit den Optionen von luksformat oder anderen Einstellungen experimentieren, um die Ausrichtung zu erhalten, die Sie für eine akzeptable Geschwindigkeit benötigen.

21
2018-04-10 11:58



+1 Um einen Weg zu finden, wie dies funktioniert mit Beispiele. - ewwhite
1 MiB ist bereits durch 4KiB teilbar, also solltest du bis zu ashift = 20 richtig ausgerichtet sein (was ich in meiner Karriere nicht für nötig halte) vorausgesetzt, du hast rohe Festplatten benutzt. - Michael Hampton♦
Nur noch eine Sache: Ich wähle deine Antwort, weil es das ist, was OP erwartet und gut geschrieben ist, also ist es besser als meine Antwort. - Vinícius Ferrão
@ ViníciusFrrão: Beachten Sie auch, dass FreeBSD und FreeNAS einen identischen Ansatz für die ZFS-Verschlüsselung verwenden. geli wird verwendet, um ein verschlüsseltes Gerät zu erstellen, und die Klartextdaten werden über ein zweites Gerät zur Verfügung gestellt, das ZFS verwendet. Siehe den zweiten Aufzählungspunkt bei doc.freenas.org/index.php/Volumes#Encryption. - Starfish
@CMCDragonkai Da sowohl L2ARC- als auch SLOG-Geräte Datenbits aus Ihrem Pool enthalten, wenn Sie den Speicher verschlüsseln, um die Vertraulichkeit zu gewährleisten (was häufig der Grund für die Verwendung von verschlüsseltem Speicher ist), möchten Sie das mit ziemlicher Sicherheit Führen Sie alle L2ARC- und SLOG-Geräte ähnlich verschlüsselt aus. - α CVn


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


1
2017-10-23 17:33