Como mover um contêiner LUKS do meio de uma partição para o início?

3

Para o dr, pule para o fundo.

Eu tenho uma configuração de inicialização dupla com o Mac OS X no início da minha unidade e três partições GNU / Linux no final da unidade. Eu não tenho a máquina relevante disponível para fornecer um fdisk dump, mas aqui está uma visão geral do layout do disco original:

/dev/sda1: EFI System Partition
/dev/sda2: Macintosh HD (main OS X partition)
/dev/sda3: Recovery HD (part of OS X's recovery system)
/dev/sda4: /
/dev/sda5: /home inside a LUKS container
/dev/sda6: swapspace inside a LUKS container

Estou reinstalando o GNU / Linux neste sistema e, como parte disso, quero tornar / criptografado. No entanto, isso requer um /boot separado. Para criar essa partição, redimensionei o Macintosh HD e movi o Recovery HD de volta para o final do Macintosh HD. Eu também aproveitei a oportunidade para tornar meu / maior. Então, o resultado final é um disco assim:

/dev/sda1: EFI System Partition
/dev/sda2: Macintosh HD (main OS X partition) (smaller than before)
/dev/sda3: Recovery HD (part of OS X's recovery system)
/dev/sda4: /boot
/dev/sda5: / (larger than before, and now inside a LUKS container)
/dev/sda6: /home inside a LUKS container
/dev/sda7: swapspace inside a LUKS container

tl; dr : Aqui está o problema: devido à ordem em que eu configurei as coisas, agora tenho um contêiner LUKS cryptsetup -created no meio de /dev/sda5 . Porque é no meio, nada pode encontrá-lo para desbloquear / montar / recuperá-lo. Como posso mover meu cryptcontainer para o começo da partição? Provavelmente isso envolve duas etapas distintas (na verdade, encontrar a coisa no disco, depois usar essa informação para movê-la), mas não tenho certeza. Googling não apareceu nada.

    
por strugee 30.03.2014 / 05:09

1 resposta

3

LUKS tem um cabeçalho distinto, você pode encontrar possíveis deslocamentos com grep :

# grep -a -b --only-matching 'LUKS' /dev/sda5
1832480940:LUKS
1959072314:LUKS
2019974297:LUKS

Para cada deslocamento possível encontrado, você pode criar um dispositivo de loop e ver se é um dispositivo LUKS válido ou não:

# losetup --find --show --offset 1832480940 --read-only /dev/sda5
/dev/loop3
# cryptsetup luksOpen /dev/loop3 luksloop3
...mount -o ro, ls, backup, umount...
# cryptsetup luksClose luksloop3
# losetup -d /dev/loop3

Depois de encontrar o deslocamento correto, você pode movê-lo para o início da partição usando dd . Isso é perigoso , se você errar o offset ou cancelar a operação, os dados serão perdidos. Então você deve fazer um backup primeiro em qualquer caso.

# dd if=/dev/sda5 of=/dev/sda5 bs=1M iflag=skip_bytes skip=1832480940

Veja se funcionou:

# cryptsetup luksOpen /dev/sda5 luks

Restaure o backup de outra forma.

    
por 30.03.2014 / 15:13