Crittografia ZFS RAID e LUKS in Linux


24

Sto pianificando di impostare un set di 3x 2TB 7200rpm come pool Z-RAID con crittografia LUKS in Linux (per una soluzione NAS).

La mia comprensione del problema attuale è che l'unico modo per raggiungere questo obiettivo è quello di luksFormatogni dispositivo fisico e quindi assemblare uno zpool dai contenitori LUKS sbloccati.

Ho le seguenti preoccupazioni con questo:

  • Non ostacolerebbe in modo significativo le prestazioni di scrittura? In questa configurazione i dati ridondanti vengono crittografati più volte perché LUKS non è "a conoscenza" di Z-RAID. Nella soluzione LUKS-on-mdadm i dati vengono crittografati una volta e semplicemente scritti su dischi più volte. La mia CPU supporta Intel AES-NI.

  • ZFS sarà a conoscenza degli errori del disco quando opera su contenitori LUKS Device Mapper anziché su dispositivi fisici? Che ne dici di deduplicazione e altre funzionalità di ZFS?


4
Non lo farei. Sembra soggetto a guasti.
ewwhite,

3
@MadHatter Perché è ZFS. Non puoi farlo.
Michael Hampton

1
Bene (crederò alla tua parola). Fare un unico grande ZFS contenente un unico file di grandi dimensioni, loopback montarlo e crittografare che .
MadHatter supporta Monica il

1
@eewhite Sto solo scoprendo le opzioni per usare la crittografia con ZFS su Linux fino a quando il modulo del kernel ZFS implementa la crittografia stessa. Ma devo essere d'accordo: LUKS e ZFS non sembrano andare d'accordo.
MasterM

4
Mai e poi mai creare un file di grandi dimensioni e loopback con ZFS. Sei andato a rovinare la tua piscina a una velocità inutilizzabile quando CoW esaurisce lo spazio per le sue operazioni.
Vinícius Ferrão,

Risposte:


27

Uno dei server che gestisco esegue il tipo di configurazione che descrivi. Ha sei dischi rigidi da 1 TB con un pool RAIDZ crittografato LUKS su di esso. Ho anche due dischi rigidi da 3 TB in un mirror ZFS con crittografia LUKS che vengono scambiati ogni settimana per essere portati fuori sede. Il server utilizza questa configurazione da circa tre anni e non ho mai avuto problemi.

Se hai bisogno di ZFS con crittografia su Linux, ti consiglio questa configurazione. Sto usando ZFS-Fuse, non ZFS su Linux. Tuttavia, credo che non influirebbe sul risultato diverso da ZFS su Linux probabilmente avrà prestazioni migliori rispetto all'impostazione che sto usando.

In questa configurazione i dati ridondanti vengono crittografati più volte perché LUKS non è "a conoscenza" di Z-RAID. Nella soluzione LUKS-on-mdadm i dati vengono crittografati una volta e semplicemente scritti su dischi più volte.

Tieni presente che LUKS non è a conoscenza di RAID. Sa solo che si trova sopra un dispositivo a blocchi. Se si utilizza mdadm per creare un dispositivo RAID e successivamente luksformat, è mdadm che replica i dati crittografati nei dispositivi di archiviazione sottostanti, non LUKS.

La domanda 2.8 delle FAQ di LUKS indica se la crittografia dovrebbe essere in cima al RAID o viceversa . Fornisce il seguente diagramma.

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

Poiché ZFS combina le funzionalità RAID e del filesystem, la soluzione dovrà essere simile alla seguente.

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

Ho elencato le partizioni non elaborate come facoltative poiché ZFS prevede che utilizzerà l'archiviazione in blocchi grezzi anziché una partizione. Sebbene tu possa creare il tuo zpool usando le partizioni, non è raccomandato perché aggiungerà un livello inutile di gestione e dovrà essere preso in considerazione nel calcolo di quale sarà il tuo offset per l'allineamento del blocco delle partizioni.

Non ostacolerebbe in modo significativo le prestazioni di scrittura? [...] La mia CPU supporta Intel AES-NI.

Non dovrebbero esserci problemi di prestazioni purché si scelga un metodo di crittografia supportato dal driver AES-NI. Se hai cryptsetup 1.6.0 o versioni successive puoi eseguire cryptsetup benchmarke vedere quale algoritmo fornirà le migliori prestazioni.

Anche questa domanda sulle opzioni consigliate per LUKS può essere utile.

Dato che si dispone del supporto per la crittografia hardware, è più probabile che si verifichino problemi di prestazioni a causa del disallineamento della partizione.

ZFS su Linux ha aggiunto la ashiftproprietà al zfscomando per consentire di specificare le dimensioni del settore per i dischi rigidi. Secondo le FAQ collegate, ashift=12diresti che stai usando unità con una dimensione di blocco 4K.

Le FAQ LUKS indicano che una partizione LUKS ha un allineamento di 1 MB. Le domande 6.12 e 6.13 ne discutono in dettaglio e forniscono anche consigli su come ingrandire l'intestazione della partizione LUKS. Tuttavia, non sono sicuro che sia possibile renderlo abbastanza grande da garantire che il tuo filesystem ZFS verrà creato su un confine 4K. Sarei interessato a sapere come funziona per te se questo è un problema che devi risolvere. Poiché si utilizzano unità da 2 TB, è possibile che non si verifichi questo problema.

ZFS sarà a conoscenza degli errori del disco quando opera su contenitori LUKS Device Mapper anziché su dispositivi fisici?

ZFS sarà a conoscenza degli errori del disco in quanto può leggere e scrivere senza problemi. ZFS richiede l'archiviazione a blocchi e non si preoccupa né conosce i dettagli di tale archiviazione e da dove proviene. Tiene traccia solo degli errori di lettura, scrittura o checksum che incontra. Spetta a te monitorare lo stato dei dispositivi di archiviazione sottostanti.

La documentazione di ZFS contiene una sezione sulla risoluzione dei problemi che vale la pena leggere. La sezione sulla sostituzione o riparazione di un dispositivo danneggiato descrive ciò che potresti incontrare durante uno scenario di errore e come risolverlo. Faresti la stessa cosa qui per i dispositivi che non hanno ZFS. Controllare syslog per i messaggi dal driver SCSI, dal controller HBA o HD e / o dal software di monitoraggio SMART, quindi agire di conseguenza.

Che ne dici di deduplicazione e altre funzionalità di ZFS?

Tutte le funzionalità di ZFS funzioneranno allo stesso modo indipendentemente dal fatto che l'archiviazione a blocchi sottostante sia crittografata o meno.

Sommario

  1. ZFS su dispositivi crittografati LUKS funziona bene.
  2. Se disponi della crittografia hardware, non vedrai un impatto sulle prestazioni finché utilizzi un metodo di crittografia supportato dal tuo hardware. Usa cryptsetup benchmarkper vedere cosa funzionerà meglio sul tuo hardware.
  3. Pensa a ZFS come RAID e filesystem combinati in un'unica entità. Vedere il diagramma ASCII sopra per dove si adatta allo stack di archiviazione.
  4. Dovrai sbloccare ogni dispositivo a blocchi crittografato LUKS utilizzato dal filesystem ZFS.
  5. Monitora lo stato dell'hardware di archiviazione come fai ora.
  6. Prestare attenzione all'allineamento dei blocchi del file system se si utilizzano unità con blocchi 4K. Potrebbe essere necessario sperimentare opzioni luksformat o altre impostazioni per ottenere l'allineamento necessario per una velocità accettabile.

3
+1 Per trovare un modo per farlo funzionare con esempi.
ewwhite,

1
1 MiB è già equamente divisibile per 4KiB, quindi dovresti essere correttamente allineato fino a ashift = 20 (che non credo sarà necessario nella mia carriera) a condizione che tu abbia usato dischi grezzi.
Michael Hampton

1
Ancora un'altra cosa: sto votando la tua risposta perché è quello che OP si aspettava ed è ben scritto, quindi è sicuramente migliore della mia risposta.
Vinícius Ferrão,

3
@ ViníciusFerrão: prendi nota anche che FreeBSD e FreeNAS stanno usando un approccio identico per la crittografia ZFS. geliviene utilizzato per creare un dispositivo crittografato e i dati in chiaro vengono resi disponibili tramite un secondo dispositivo utilizzato da ZFS. Vedi il secondo punto elenco su doc.freenas.org/index.php/Volumes#Encryption .
Stella di mare

2
@CMCDragonkai Poiché entrambi i dispositivi L2ARC e SLOG contengono bit e pezzi di dati dal tuo pool, se stai crittografando l'archiviazione per fornire riservatezza (che spesso è il punto di utilizzare l'archiviazione crittografata in primo luogo), quasi sicuramente vuoi eseguire anche qualsiasi dispositivo L2ARC e SLOG crittografato in modo simile.
un CVn

2

Un'implementazione alternativa è quella di creare un dispositivo a blocchi ZVOL ( http://zfsonlinux.org/example-zvol.html ), utilizzare LUKS per crittografare il ZVOL appena creato e quindi creare un filesystem ext4 (o altro) sopra il blocco crittografato dispositivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.