Encriptación ZFS RAID y LUKS en Linux

24

Estoy planeando configurar un conjunto de unidades 3x 2TB 7200rpm como un grupo Z-RAID cifrado con LUKS en Linux (para una solución NAS).

Entiendo que el problema en cuestión es que la única forma de lograr esto es con luksFormatcada dispositivo físico y luego ensamblar un zpool de contenedores LUKS desbloqueados.

Tengo las siguientes preocupaciones con esto:

  • ¿No impediría significativamente el rendimiento de escritura? En esta configuración, los datos redundantes se cifran varias veces porque LUKS no está "al tanto" de Z-RAID. En la solución LUKS-on-mdadm, los datos se cifran una vez y simplemente se escriben en discos varias veces. Mi CPU es compatible con Intel AES-NI.

  • ¿ZFS estará al tanto de fallas de disco cuando opere en contenedores LUKS del mapeador de dispositivos en lugar de dispositivos físicos? ¿Qué hay de la deduplicación y otras características de ZFS?

MasterM
fuente
44
Yo no lo haría Suena propenso a fallas.
ewwhite
3
@MadHatter Porque es ZFS. No puedes hacer eso.
Michael Hampton
1
Bien (tomaré tu palabra por eso). Haga un solo ZFS grande que contenga un solo archivo grande, monte en bucle y cifre eso .
MadHatter apoya a Monica el
1
@eewhite Simplemente estoy descubriendo opciones para usar el cifrado con ZFS en Linux hasta que el módulo del núcleo ZFS implemente el cifrado en sí. Pero tengo que estar de acuerdo: LUKS y ZFS no parecen llevarse bien.
MasterM
44
Nunca, nunca, cree un archivo grande y haga un loopback con ZFS. Te has arruinado tu piscina a una velocidad inutilizable cuando CoW se queda sin espacio para sus operaciones.
Vinícius Ferrão

Respuestas:

27

Uno de los servidores que administro ejecuta el tipo de configuración que usted describe. Tiene seis discos duros de 1 TB con un grupo RAIDZ cifrado con LUKS. También tengo dos discos duros de 3 TB en un espejo ZFS cifrado con LUKS que se intercambian cada semana para ser sacados del sitio. El servidor ha estado usando esta configuración durante aproximadamente tres años, y nunca he tenido un problema con ella.

Si necesita ZFS con cifrado en Linux, le recomiendo esta configuración. Estoy usando ZFS-Fuse, no ZFS en Linux. Sin embargo, creo que eso no influiría en el resultado que no sea ZFS en Linux probablemente tendrá un mejor rendimiento que la configuración que estoy usando.

En esta configuración, los datos redundantes se cifran varias veces porque LUKS no está "al tanto" de Z-RAID. En la solución LUKS-on-mdadm, los datos se cifran una vez y simplemente se escriben en discos varias veces.

Tenga en cuenta que LUKS no tiene conocimiento de RAID. Solo sabe que está sentado encima de un dispositivo de bloque. Si usa mdadm para crear un dispositivo RAID y luego luksformat, es mdadm el que está replicando los datos cifrados en los dispositivos de almacenamiento subyacentes, no LUKS.

La pregunta 2.8 de las preguntas frecuentes de LUKS aborda si el cifrado debe estar sobre RAID o al revés . Proporciona el siguiente diagrama.

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

Debido a que ZFS combina la funcionalidad RAID y el sistema de archivos, su solución deberá parecerse a la siguiente.

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

He enumerado las particiones sin formato como opcionales ya que ZFS espera que use el almacenamiento de bloques sin formato en lugar de una partición. Si bien podría crear su zpool usando particiones, no se recomienda porque agregará un nivel de administración inútil, y deberá tenerse en cuenta al calcular cuál será su desplazamiento para la alineación del bloque de partición.

¿No impediría significativamente el rendimiento de escritura? [...] Mi CPU es compatible con Intel AES-NI.

No debería haber un problema de rendimiento siempre que elija un método de cifrado compatible con su controlador AES-NI. Si tiene cryptsetup 1.6.0 o posterior, puede ejecutar cryptsetup benchmarky ver qué algoritmo proporcionará el mejor rendimiento.

Esta pregunta sobre las opciones recomendadas para LUKS también puede ser valiosa.

Dado que tiene soporte de cifrado de hardware, es más probable que enfrente problemas de rendimiento debido a la desalineación de la partición.

ZFS en Linux ha agregado la ashiftpropiedad al zfscomando para permitirle especificar el tamaño del sector para sus discos duros. De acuerdo con las preguntas frecuentes vinculadas, ashift=12le diría que está utilizando unidades con un tamaño de bloque de 4K.

Las preguntas frecuentes de LUKS indican que una partición LUKS tiene una alineación de 1 MB. Las preguntas 6.12 y 6.13 discuten esto en detalle y también brindan consejos sobre cómo agrandar el encabezado de partición LUKS. Sin embargo, no estoy seguro de que sea posible hacerlo lo suficientemente grande como para garantizar que su sistema de archivos ZFS se creará en un límite de 4K. Me interesaría saber cómo funciona esto si es un problema que necesita resolver. Como está utilizando unidades de 2 TB, es posible que no se enfrente a este problema.

¿ZFS estará al tanto de fallas de disco cuando opere en contenedores LUKS del mapeador de dispositivos en lugar de dispositivos físicos?

ZFS estará al tanto de las fallas del disco en la medida en que pueda leerlas y escribirlas sin problemas. ZFS requiere almacenamiento en bloque y no le importa ni conoce los detalles de ese almacenamiento y de dónde proviene. Solo realiza un seguimiento de cualquier error de lectura, escritura o suma de comprobación que encuentre. Depende de usted monitorear el estado de los dispositivos de almacenamiento subyacentes.

La documentación de ZFS tiene una sección sobre solución de problemas que vale la pena leer. La sección sobre cómo reemplazar o reparar un dispositivo dañado describe lo que puede encontrar durante un escenario de falla y cómo puede resolverlo. Aquí haría lo mismo que haría para dispositivos que no tienen ZFS. Verifique en el registro del sistema si hay mensajes de su controlador SCSI, controlador HBA o HD, y / o software de monitoreo SMART y luego actúe en consecuencia.

¿Qué hay de la deduplicación y otras características de ZFS?

Todas las características de ZFS funcionarán igual independientemente de si el almacenamiento en bloque subyacente está cifrado o no.

Resumen

  1. ZFS en dispositivos cifrados con LUKS funciona bien.
  2. Si tiene cifrado de hardware, no verá un impacto en el rendimiento siempre que use un método de cifrado compatible con su hardware. Úselo cryptsetup benchmarkpara ver qué funcionará mejor en su hardware.
  3. Piense en ZFS como RAID y sistema de archivos combinados en una sola entidad. Consulte el diagrama ASCII anterior para ver dónde encaja en la pila de almacenamiento.
  4. Deberá desbloquear cada dispositivo de bloque cifrado con LUKS que utiliza el sistema de archivos ZFS.
  5. Monitoree el estado del hardware de almacenamiento de la misma manera que lo hace ahora.
  6. Tenga en cuenta la alineación de bloques del sistema de archivos si está utilizando unidades con bloques de 4K. Es posible que deba experimentar con las opciones de formato de luks u otras configuraciones para obtener la alineación que necesita para una velocidad aceptable.
Estrella de mar
fuente
3
+1 Para encontrar una manera de hacer que esto funcione con ejemplos.
ewwhite
1
1 MiB ya es divisible por 4KiB, por lo que debe estar correctamente alineado hasta Ashift = 20 (que no creo que sea necesario dentro de mi carrera) siempre que haya utilizado discos en bruto.
Michael Hampton
1
Solo una cosa más: estoy votando su respuesta porque es lo que OP esperaba, y está bien escrita, por lo que es mejor que la respuesta mía.
Vinícius Ferrão
3
@ ViníciusFerrão: También tenga en cuenta que FreeBSD y FreeNAS están utilizando un enfoque idéntico para el cifrado ZFS. gelise utiliza para crear un dispositivo cifrado y los datos de texto sin formato se ponen a disposición a través de un segundo dispositivo que utiliza ZFS. Vea el segundo punto en doc.freenas.org/index.php/Volumes#Encryption .
Starfish
2
@CMCDragonkai Dado que los dispositivos L2ARC y SLOG contienen fragmentos de datos de su grupo, si está encriptando el almacenamiento para proporcionar confidencialidad (que a menudo es el punto de usar el almacenamiento encriptado en primer lugar), es casi seguro que desee ejecute cualquier dispositivo L2ARC y SLOG también encriptado de manera similar.
un CVn
2

Una implementación alternativa es crear un dispositivo de bloque ZVOL ( http://zfsonlinux.org/example-zvol.html ), usar LUKS para cifrar el ZVOL recién creado y luego crear un sistema de archivos ext4 (u otro) encima del bloque cifrado dispositivo.

Tux Racer
fuente