Criptografar no local é possível, mas é perigoso. É mais fácil simplesmente limpar / formatar / mkfs e repopulá-lo com arquivos de outro lugar.
Para a abordagem no local, primeiro você precisa reduzir o sistema de arquivos em pelo menos 2MiB
para liberar espaço para o cabeçalho LUKS no início da unidade. Por segurança, encolha um pouco mais que isso.
Depois, você deve ter em mente que, devido ao cabeçalho LUKS, todos os dados no contêiner criptografado têm pelo menos um 2MiB
offset. Assim, uma cópia linear dd
do não criptografado para o contêiner criptografado não funcionará, pois cada gravação sobrescreveria dados que ainda não foram lidos.
Para evitar isso, a operação de cópia deve ser executada de trás para frente. Não há suporte direto para isso em dd
, mas é possível emulá-lo usando seek=$x skip=$x count=1
em um loop de retrocesso que decrementa $x
em um em cada etapa até $x=0
.
Exemplo usando o dispositivo /dev/sdx1
com ext4
filesystem:
# make sure it's not mounted anywhere
umount /dev/sdx1
# backup the first 128MiB somewhere
dd bs=1M if=/dev/sdx1 of=/somewhere/sdx9.backup count=128
# shrink filesystem by 128MiB
resize2fs /dev/sdx1 $(($(blockdev --getsize64 /dev/sdx1)/1024/1024-128))M
# create encryption layer
cryptsetup luksFormat /dev/sdx1
cryptsetup luksOpen /dev/sdx1 luksx1
# dd backwards using GiBs of memory. Change math and bs for less memory usage.
for x in $(seq $(blockdev --getsize64 /dev/sdx1)/1024/1024/1024+1) -1 0)
do
dd bs=1G iflag=fullblock seek=$x skip=$x count=1 \
if=/dev/sdx1 of=/dev/mapper/luksx1
done
# include backup for region previously overwritten by LUKS header
dd bs=1M if=/somewhere/sdx9.backup of=/dev/mapper/luksx1
# grow filesystem to full size
resize2fs /dev/mapper/luksx1
Antes de fazer isso, teste primeiro o procedimento com um dispositivo temporário. Aqui está uma pasta de uma sessão de exemplo que fiz há algum tempo: link
Se o procedimento for cancelado a qualquer momento, é praticamente uma causa perdida, já que você acaba com uma coisa meio criptografada.
Existem frontends que praticamente usam o mesmo método. O cryptsetup
tem um programa para reencrypt, ou você pode tentar a sua sorte com o link . Eu prefiro a abordagem manual simplesmente porque entendo como ela funciona e o que pode dar errado.