Eu tenho um arquivo de backup de imagem do meu disco rígido, que consiste em três partições ( sudo fdisk -l /mnt/hdd/19_02.img
):
Device Start End Sectors Size Type
/mnt/hdd/19_02.img1 2048 1050623 1048576 512M EFI System
/mnt/hdd/19_02.img2 1050624 34686975 33636352 16G Linux swap
/mnt/hdd/19_02.img3 34686976 976773134 942086159 449.2G Linux filesystem
A terceira partição é do tipo crypto_LUKS
. Se não fosse criptografado, eu poderia montá-lo com sudo mount -o loop,offset=$(expr 512 \* 34686976) /mnt/hdd/19_02.img /mnt/img
, o que resulta emmount: /mnt/img: unknown filesystem type 'crypto_LUKS'.
O que eu tentei
sudo cryptsetup luksOpen /mnt/hdd/19_02.img3 img
resulta emDevice /mnt/hdd/19_02.img3 doesn't exist or access denied.
sudo cryptsetup plainOpen --offset=$(expr 512 \* 34686976) /mnt/hdd/19_02.img img
pede minha senha que também é aceita, mas retorna com Requested offset is beyond real size of device /mnt/hdd/19_02.img.
Alright, talvez cryptsetup
multiplique o valor do deslocamento pelo tamanho do bloco por si só.
sudo cryptsetup plainOpen --offset=34686976 /mnt/hdd/19_02.img img
pede minha senha, que também é aceita e retorna bem. Mas sudo mount /dev/mapper/img /mnt/img
reclama mount: /mnt/img: wrong fs type, bad option, bad superblock on /dev/mapper/img
. Analisando com sudo lsblk -f /dev/mapper/img
mostra não há sistema de arquivos reconhecido.
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
img
O dispositivo criptografado foi criado pelo LUKS
modo, portanto, não faz muito sentido abri-lo com plainOpen
. Mas luksOpen
não oferece --offset
opção.
Fazer sudo cryptsetup luksOpen --offset=34686976 /mnt/hdd/19_02.img img
resulta em cryptsetup: Option --offset is supported only for open of plain and loopaes devices and for luksFormat
. (Não tentei luksFormat
, mas configura o cabeçalho do dispositivo LUKS e criptografa a chave mestra.)
A pergunta afinal
Como fazer cryptsetup luksOpen
com offset em um arquivo de imagem?
fdisk
está sendo um pouco estúpido aqui: ao exibir nomes de dispositivos para as partições, ele apenas pega o nome do dispositivo de disco inteiro fornecido a ele e anexa o número da partição (prefixado comp
se o último caractere do nome do dispositivo de disco inteiro for também um número). Ele faz isso sem verificar se um dispositivo com esse nome realmente existe ou não.Em outras palavras, se seu arquivo de imagem tiver um nome
/mnt/hdd/19_02.img
e você estiver usandofdisk
para examiná-lo diretamente, os nomes de partição como/mnt/hdd/19_02.img3
serão completamente fictícios e inutilizáveis.Em vez de tentar calcular os deslocamentos manualmente, você pode simplesmente anexar o arquivo de imagem em um dispositivo de loop e fazer com que ele detecte automaticamente as partições para você:
Se o seu sistema for novo o suficiente para suportar a
-P
opção paralosetup
, agora você deve ter dispositivos de partição como/dev/loop0p1
,/dev/loop0p2
e/dev/loop0p3
aparecer automaticamente.Para distribuições mais antigas sem suporte a dispositivo de loop particionado, você pode usar o
kpartx
comando (pode vir com asdevice-mapper-multipath
ferramentas se não for empacotado separadamente) para a mesma finalidade. Nesse caso, você terá que realizar duas etapas e os nomes dos dispositivos serão um pouco diferentes:Ao usar
kpartx
assim, os dispositivos de partição aparecerão em/dev/mapper
, por exemplo,/dev/mapper/loop0p1
e assim por diante.Agora você deve ser capaz de fazer qualquer um
ou
dependendo se você usou
losetup -P
oukpartx
para manipular os dispositivos de partição.Depois de terminar de acessar a imagem, desmonte todos os sistemas de arquivos montados nos dispositivos de partição,
sudo cryptsetup luksClose
a imagem criptografada e desfaça a ligação do dispositivo de loop:Se você usou
kpartx
, primeiro executesudo kpartx -d /dev/loop0
para liberar os dispositivos de partição. Se você usoulosetup -P
, esta etapa não é necessária.Em seguida, solte o dispositivo de loop:
sudo losetup -d /dev/loop0
.