Criptografia ZFS RAID e LUKS no Linux

24

Estou planejando configurar um conjunto de unidades de 3x 2TB 7200rpm como um pool Z-RAID criptografado por LUKS no Linux (para uma solução NAS).

Meu entendimento do problema em questão é que a única maneira de conseguir isso é para luksFormattodos os dispositivos físicos e depois montar um zpool a partir de contêineres LUKS desbloqueados.

Tenho as seguintes preocupações com isso:

  • Não impediria significativamente o desempenho da gravação? Nesta configuração, os dados redundantes são criptografados várias vezes porque LUKS não está "ciente" do Z-RAID. Na solução LUKS-on-mdadm, os dados são criptografados uma vez e meramente gravados em discos várias vezes. Minha CPU suporta Intel AES-NI.

  • O ZFS estará ciente das falhas de disco ao operar nos contêineres LUKS do mapeador de dispositivos em oposição aos dispositivos físicos? E quanto à desduplicação e outros recursos do ZFS?

MasterM
fonte
4
Eu não faria isso. Parece propenso a falhas.
precisa saber é o seguinte
3
@ MadHatter Porque é ZFS. Você não pode fazer isso.
Michael Hampton
1
Tudo bem (eu aceito sua palavra). Crie um ZFS grande e único que contenha um único arquivo grande, monte-o em loopback e criptografe- o .
MadHatter apoia Monica
1
@eewhite Estou apenas descobrindo opções para usar a criptografia com o ZFS no Linux até que o módulo do kernel do ZFS implemente a criptografia. Mas eu tenho que concordar - LUKS e ZFS não parecem estar se dando bem.
MasterM
4
Nunca, nunca, crie um arquivo grande e faça um loopback com o ZFS. Você acabou de danificar sua piscina a uma velocidade inutilizável quando o CoW fica sem espaço para suas operações.
Vinícius Ferrão

Respostas:

27

Um dos servidores que administro executa o tipo de configuração que você descreve. Ele possui seis discos rígidos de 1 TB com um pool RAIDZ criptografado por LUKS. Também tenho dois discos rígidos de 3 TB em um espelho ZFS criptografado por LUKS que são trocados toda semana para serem retirados do local. O servidor usa essa configuração há cerca de três anos e nunca tive problemas com ela.

Se você precisar do ZFS com criptografia no Linux, recomendo esta configuração. Estou usando o ZFS-Fuse, não o ZFS no Linux. No entanto, acredito que não teria influência no resultado, exceto o ZFS no Linux, provavelmente terá um desempenho melhor do que a instalação que estou usando.

Nesta configuração, os dados redundantes são criptografados várias vezes porque LUKS não está "ciente" do Z-RAID. Na solução LUKS-on-mdadm, os dados são criptografados uma vez e meramente gravados em discos várias vezes.

Lembre-se de que LUKS não tem conhecimento de RAID. Só sabe que está em cima de um dispositivo de bloco. Se você usa o mdadm para criar um dispositivo RAID e, em seguida luksformat, ele, é o mdadm que está replicando os dados criptografados nos dispositivos de armazenamento subjacentes, não no LUKS.

A pergunta 2.8 das perguntas frequentes do LUKS aborda se a criptografia deve estar sobre o RAID ou o contrário . Ele fornece o diagrama a seguir.

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

Como o ZFS combina a funcionalidade do RAID e do sistema de arquivos, sua solução terá a aparência da seguinte.

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

Eu listei as partições brutas como opcionais, pois o ZFS espera que ele use o armazenamento em bloco bruto em vez de uma partição. Embora você possa criar seu zpool usando partições, isso não é recomendado, pois adicionará um nível inútil de gerenciamento e precisará ser levado em consideração ao calcular qual será o deslocamento para o alinhamento de blocos de partição.

Não impediria significativamente o desempenho da gravação? [...] Minha CPU suporta Intel AES-NI.

Não deve haver um problema de desempenho desde que você escolha um método de criptografia suportado pelo driver AES-NI. Se você tiver o cryptsetup 1.6.0 ou mais recente, poderá executar cryptsetup benchmarke ver qual algoritmo fornecerá o melhor desempenho.

Esta pergunta sobre as opções recomendadas para LUKS também pode ser útil .

Como você tem suporte à criptografia de hardware, é mais provável que enfrente problemas de desempenho devido ao desalinhamento da partição.

O ZFS no Linux adicionou a ashiftpropriedade ao zfscomando para permitir que você especifique o tamanho do setor para seus discos rígidos. De acordo com o FAQ vinculado, ashift=12diria que você está usando unidades com um tamanho de bloco de 4K.

As Perguntas frequentes do LUKS afirmam que uma partição LUKS tem um alinhamento de 1 MB. As perguntas 6.12 e 6.13 discutem isso em detalhes e também fornecem conselhos sobre como aumentar o cabeçalho da partição LUKS. No entanto, não tenho certeza de que seja possível torná-lo grande o suficiente para garantir que o seu sistema de arquivos ZFS seja criado em um limite de 4K. Eu estaria interessado em saber como isso funciona para você, se esse é um problema que você precisa resolver. Como você está usando unidades de 2 TB, você pode não enfrentar esse problema.

O ZFS estará ciente das falhas de disco ao operar nos contêineres LUKS do mapeador de dispositivos em oposição aos dispositivos físicos?

O ZFS estará ciente das falhas de disco na medida em que possa ler e gravar nelas sem problemas. O ZFS requer armazenamento em bloco e não se importa ou conhece as especificidades desse armazenamento e de onde ele vem. Ele monitora apenas os erros de leitura, gravação ou soma de verificação que encontrar. Cabe a você monitorar a integridade dos dispositivos de armazenamento subjacentes.

A documentação do ZFS possui uma seção sobre solução de problemas que vale a pena ler. A seção sobre substituição ou reparo de um dispositivo danificado descreve o que você pode encontrar durante um cenário de falha e como resolvê-lo. Você faria o mesmo aqui para dispositivos que não possuem ZFS. Verifique o syslog para obter mensagens do seu driver SCSI, controlador HBA ou HD e / ou software de monitoramento SMART e, em seguida, aja de acordo.

E quanto à desduplicação e outros recursos do ZFS?

Todos os recursos do ZFS funcionarão da mesma forma, independentemente de o armazenamento em bloco subjacente estar criptografado ou não.

Sumário

  1. O ZFS em dispositivos criptografados por LUKS funciona bem.
  2. Se você tiver criptografia de hardware, não verá um desempenho atingido desde que use um método de criptografia suportado pelo seu hardware. Use cryptsetup benchmarkpara ver o que funcionará melhor em seu hardware.
  3. Pense no ZFS como RAID e sistema de arquivos combinados em uma única entidade. Consulte o diagrama ASCII acima para saber onde ele se encaixa na pilha de armazenamento.
  4. Você precisará desbloquear cada dispositivo de bloco criptografado por LUKS que o sistema de arquivos ZFS usa.
  5. Monitore a integridade do hardware de armazenamento da mesma maneira que faz agora.
  6. Lembre-se do alinhamento de blocos do sistema de arquivos se você estiver usando unidades com blocos de 4K. Pode ser necessário experimentar opções do luksformat ou outras configurações para obter o alinhamento necessário para uma velocidade aceitável.
Estrela do Mar
fonte
3
+1 Para encontrar uma maneira de fazer isso funcionar com exemplos.
precisa saber é o seguinte
1
1 O MiB já é divisível de maneira uniforme pelo 4KiB; portanto, você deve estar alinhado corretamente até o ashift = 20 (o que eu acho que não será necessário na minha carreira), desde que você use discos brutos.
Michael Hampton
1
Só mais uma coisa: estou votando na sua resposta, porque é o que o OP esperava e está bem escrito, por isso é muito melhor do que a minha resposta.
Vinícius Ferrão
3
@ ViníciusFerrão: Observe também que o FreeBSD e o FreeNAS estão usando uma abordagem idêntica para a criptografia ZFS. gelié usado para criar um dispositivo criptografado e os dados de texto sem formatação são disponibilizados por meio de um segundo dispositivo usado pelo ZFS. Veja o segundo ponto em doc.freenas.org/index.php/Volumes#Encryption .
Starfish
2
@CMCDragonkai Como os dispositivos L2ARC e SLOG contêm bits e dados do seu pool, se você estiver criptografando o armazenamento para fornecer confidencialidade (que geralmente é o ponto de usar o armazenamento criptografado), você quase certamente deseja execute qualquer dispositivo L2ARC e SLOG também criptografado de maneira semelhante.
um CVn
2

Uma implementação alternativa é criar um dispositivo de bloco ZVOL ( http://zfsonlinux.org/example-zvol.html ), usar LUKS para criptografar o ZVOL recém-criado e criar um sistema de arquivos ext4 (ou outro) no topo do bloco criptografado dispositivo.

Tux Racer
fonte