ZFS e LUKS

By | June 6, 2020

Não é segredo nenhum o quanto gosto de ZFS. É um sistema de arquivos sensacional com tantas vantagens que dá até pena comparar os outros.

Infelizmente o principal problema é a licença CDDL que não é compatível com a licença do Kernel, então o suporte não pode ser colocado nativamente na árvore principal do Linux.

Isso é facilmente resolvido compilando um módulo externo e um abraço. Inclusive o Ubuntu desde o 19.10 tem suporte até a instalar o root drive em zfs. Mas infelizmente não tem opção de criptografia no boot.

Pra mim o principal é ter meus dados no zfs, mas não me importo muito com o sistema. Por isso tenho um disco adicional que uso pra criar minha zpool. E aqui é como tenho meu setup:

  1. Instalo o sistema usando LVM e todo o disco encriptado com LUKS. Precisa bater a senha pra máquina dar boot
  2. No segundo disco crio um device LUKS e em cima dele minha zpool
  3. Dentro do disco do sistema coloco uma chave para destravar o LUKS da zpool durante o boot

Então vou assumir que você já tem seu Linux instalado com LUKS e tudo encriptado. Um segundo disco, vamos chamar de /dev/sdb tá disponível pra ser sua zpool. Também assumindo versão recente do Ubuntu (19.10 ou 20.04)

Instale ZFS

# apt install zfs-auto-snapshot zfsnap zsnapd zfs-dkms

Descubra o UUID do /dev/sdb

# blkid

Crie e abra seu device LUKS

# cryptsetup luksFormat --type luks2 /dev/disk/by-uuid/a9de7917-bbb2-4580-aacc-97f57e3d40c6
# cryptsetup luksOpen /dev/disk/by-uuid/a9de7917-bbb2-4580-aacc-97f57e3d40c6 crypto

Crie sua zpool

# zpool create -f -o ashift=12 -O compression=lz4 -O acltype=posixacl -O xattr=sa -O relatime=on -O normalization=formD -O mountpoint=/tank tank /dev/mapper/crypto

Crie e adicione sua chave LUKS

# dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
# chmod 0400 /root/keyfile
# cryptsetup luksAddKey /dev/disk/by-uuid/a9de7917-bbb2-4580-aacc-97f57e3d40c6 /root/keyfile

Adicione uma entrada em /etc/crypttab

crypto UUID=a9de7917-bbb2-4580-aacc-97f57e3d40c6 /root/keyfile  luks

Pronto. Reboot e sua zpool encriptada deve subir automaticamente.

Em tempo: Dá para ter criptografia no ZFS mesmo, mas até o momento desse post não tinha achado uma opção tão transparente como a solução acima.