O título original deste post era sobre o CryptSetup não carregar um dispositivo Truecrypt com setores de 4096 bytes. Consegui despejar o cabeçalho Truecrypt (com a chave mestra) de qualquer maneira, mas agora quando tento carregá-lo com dmsetup, não funciona:
echo "0 5860533168 crypt aes-xts-plain64 <my-super-secret-64-byte-key> 256 /dev/sdh 256" | dmsetup create test
device-mapper: resume ioctl on test failed: Invalid argument
Command failed
Parece não suportar números de tamanho acima de 2^32, então tentei adicionar o argumento sector_size:4096 à tabela:
echo "0 732566646 crypt aes-xts-plain64 <my-super-secret-64-byte-key> 256 /dev/sdh 256 sector_size:4096" | dmsetup create test
device-mapper: reload ioctl on test failed: Invalid argument
Command failed
Funciona se eu definir o número de setores abaixo de 2 TB (2^32 * 512), mas não acima. Tentei replicar o mesmo comando no cryptsetup puro, mas não sei como corresponder exatamente à tabela dmsetup e não consigo replicá-lo. Existe uma maneira de forçar o dmsetup a funcionar com dispositivos com mais de 2 TB? Existe uma maneira de passar a chave mestra diretamente para o cryptsetup? Isto é o que eu tentei até agora, mas descriptografa com a chave errada:
echo <64-byte-key> | cryptsetup open --type plain /dev/sdh test --offset 256 --cipher aes-xts-plain64 --hash plain --key-size 512
O número total de setores estava errado. Eu tive que pegar o número total de setores e subtrair o deslocamento. Por que o dmsetup não disse apenas que o número de setores excedeu o dispositivo em vez do muito inútil: "Argumento inválido"? Teria economizado horas.
Para o modo 4k, você deve obter o número total de setores * 512 / 4096 - deslocamento. Você também precisa especificar uma contagem antes de quaisquer "parâmetros opcionais" extras na tabela. Aqui eu só tinha 1, então é: