Como posso criptografar uma partição btrfs
RAID?
A execução da criptografia em cima do RAID é a melhor prática entre muitas fontes, mesmo recomendadas pelo cryptsetup
FAQ ( consulte 2.2 ). A razão pela qual eu quero que isso seja capaz de pular a criptografia/desbloqueio duas vezes, replicar a configuração, remover a sobrecarga de gerenciamento de chaves e mantê-lo simples e estúpido.
Embora tenhamos essa prática recomendada, quase todos os guias que encontro on-line usando btrfs
primeiro criptografam os discos/partições e, em seguida, criam btrfs
matrizes nesses discos. Eu não desejo isso devido às razões acima.
Ao executar luksFormat
interativamente em partições btrfs RAID, recebo:
WARNING: Device /dev/sdc1 already contains a 'btrfs' superblock signature.
WARNING!
========
This will overwrite data on /dev/sdc1 irrevocably.
Então eu acho que esta é a razão pela qual o RAID está sendo quebrado. Existe alguma maneira de fazer com que essa topologia (criptografia após a criação btrfs
de partições RAID) funcione sem quebrar o RAID?
O que eu fiz
- Crie duas partições de dois HDDs executando algo como em cada um:
sudo parted --script <disk-name> \
mklabel gpt \
mkpart 'btrfs-raid1-partition' 1MiB 100%
- Crie uma matriz BTRFS RAID 1 entre essas partições, como:
sudo mkfs.btrfs \
-L 'btrfs-raid1-array' \
-d raid1 \
-m raid1 \
/dev/sdb1 /dev/sdc1 # Two partitions from two different disks
- Instale o LUKS em uma das partições RAID:
echo -n 'mysecret' | \
sudo cryptsetup luksFormat \
--batch-mode \
--type luks2 \
'/dev/sdc1/
O que eu espero
Espero que outro dispositivo também seja criptografado devido à configuração do RAID 1 espelhado, mas o outro disco não obtém a mesma configuração. Também vejo que a outra partição é removida da matriz RAID quando executo sudo btrfs fi show
ou sudo blkid --match-token TYPE=btrfs
.
Você não pode fazer isso, porque o Btrfs não é uma matriz RAID de dispositivo de bloco, é um sistema de arquivos que inclui espelhamento de dados.
Antes de tudo, porém, fazendo o que você fez (ou seja, tentando luksFormat o
sdc1
dispositivo), você obteria a mesma falha com qualquer sistema RAID que o Linux inclui - mesmo mdraid ou dm-raid. Na verdade, eles não mudam como os dispositivos subjacentes funcionam – eles funcionam fornecendo a você um novo dispositivo virtual que implementa o espelhamento.Por exemplo, configurar RAID1 via mdadm criaria um
/dev/md0
dispositivo de bloco virtual que você pode mkfs ou inicializar para LUKS. No entanto, mesmo enquanto a matriz RAID está "online", os nomes originais como/dev/sdc1
continuam a representar os dispositivos individuais; escrever diretamente em um deles iria apenas para aquele único disco e danificaria o array. A maneira correta de inicializar o LUKS sobre mdadm seriacryptsetup luksFormat /dev/md0
, por exemplo.(Mesmo as matrizes RAID de hardware funcionam da mesma maneira; se você tivesse uma placa HP SmartArray, por exemplo, o sistema operacional veria apenas um disco RAID virtual e nenhum dos discos físicos individuais.)
Então, onde está o dispositivo virtual que o Btrfs cria? Não há, porque não é um sistema RAID em nível de bloco; é um sistema de arquivos por conta própria, que só suporta vários dispositivos de apoio para espelhamento de dados. (Para obter criptografia com Btrfs, você precisa separá-lo e inserir LUKS "no meio", figurativamente falando.)
(Bem, você poderia usar
losetup
para criar um arquivo de imagem grande no sistema de arquivos Btrfs e inicializá-lo com LUKS, mas então você precisaria colocar outro sistema de arquivos dentro desse volume LUKS, e executar Btrfs em cima de outro Btrfs seria um pouco bobo .)Isso significa que você não pode usar LUKS "em cima de" Btrfs. Se você precisar de criptografia de dados, as outras opções são:
Configure um array ZFS, pois o ZFS agora possui criptografia de dados integrada sem precisar do LUKS.
Use mdadm regular (ou dm-raid ou LVM) para criar a matriz RAID, coloque LUKS em cima disso e use Ext4 ou XFS nesse volume LUKS. (Possivelmente Btrfs, mas não usando espelhamento de dados no nível Btrfs, apenas mdadm. Acho que é isso que Synology faz ...)
Espere mais alguns anos para o Btrfs finalmente obter criptografia em nível de arquivo, como ZFS ou o recurso 'fscrypt' comum em Ext4 e XFS.
Você disse que quase todos os guias que encontro on-line usando o btrfs primeiro criptografam os discos / partições e depois criam o array btrfs nesses discos. »… seria interessante saber de qual guia você está falando e seguir.
Eu não sigo você, você disse que vai usar o LUKS em um disco de matriz e finalmente usá-lo em um único disco (
/dev/sdc1
)Se você quiser criptografar um array RAID, monte o array (com
md
, por exemplo), então criptografe o array (comcryptsetup
on/dev/md0
ou algo assim). Você também pode criptografar/dev/sdc1
e/dev/sdc2
separadamente e construir um btrFS nele (mas dobrará os cálculos de criptografia).Observe que, antes de usar um disco criptografado LUKS, você precisa usar
cryptsetup luksOpen /dev/_your_device_ _a_nick_name_
e depois usar/dev/mapper/_a_nick_name_
.Nota : um array RAID1 é feito para evitar perda de dados quando um disco está fora de ordem… em cima de
/dev/sdc1
e/dev/sdc2
, 2 partições do mesmo disco, não será útil.