Como posso reduzir uma partição LUKS, o que o `cryptsetup redimensionar` faz?

14

Estou em andamento redimensionando uma partição criptografada LUKS que contém um único sistema de arquivos ext4 (sem LVM ou algo assim). As perguntas frequentes do cryptsetup recomendam remover a partição antiga e recriá-la, mas isso parece desperdiçar muito tempo. Portanto, eu quero prosseguir manualmente, redimensionando cuidadosamente a partição.

Até agora, acho que preciso fazer:

  1. Crie um backup (criptografado) do sistema de arquivos. Importante! Você não será o primeiro a perder seus dados ao executar as seguintes tarefas.
  2. Desmonte o sistema de arquivos ext4 existente (por exemplo, inicializando em um Live CD). Se estiver inicializando a partir de um Live CD, monte a partição criptografada usandocryptsetup luksOpen /dev/sdXY ExistingExt4
  3. Redimensione o sistema de arquivos ext4 existente .
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. Feche / "desmonte" a partição LUKS usando cryptsetup luksClose ExistingExt4
  6. Reduza o tamanho da partição.

Os passos acima estão corretos?

Na etapa 4, o que devo escolher $SECTORS? Este passo é mesmo necessário? A cryptsetuppágina do manual não é realmente descritiva sobre a resizeopção:

resize <name>
    resizes an active mapping <name>.
    If --size (in sectors) is not specified, the size of the underlying
    block device is used.

Finalmente, se eu reduzir a partição ext4 por 15 GiB, posso assumir com segurança que 15 GiB podem ser removidos da partição existente usando parted? Se sim, como fazer isso? Meu disco está particionado por GPT, se isso importa.

Lekensteyn
fonte
1
Eu sempre me perguntei sobre a opção de redimensionamento na configuração de criptografia também. Até a FAQ do cryptsetup diz: "2.15 Posso redimensionar uma partição dm-crypt ou LUKS? Sim, você pode, pois nem o dm-crypt nem o LUKS armazenam o tamanho da partição." Então porque é que tem uma opção de redimensionamento se ele não tem nada a ver com o tamanho da partição ...
Dago

Respostas:

15

Após fazer backup (etapa 1) e desmontar (entre 2 e 3), execute fsckpara garantir que o sistema de arquivos esteja íntegro:

e2fsck -f /dev/mapper/ExistingExt4

Fora isso, as etapas estão OK.

o que devo escolher para $ SETORES? Este passo é mesmo necessário?

Esta etapa é necessária, caso contrário, a partição ainda aparecerá no lado antigo. Isso é confirmado com o Nautilus, mesmo após o redimensionamento com resize2fs, a partição LUKS apareceu como o tamanho antigo. Após a execução cryptsetup resize, o número correto é mostrado. Esta etapa não é necessária. Isso afeta apenas o status do tamanho atual, conforme mostrado no navegador de arquivos. Após alterar o tamanho e fechar / abrir a partição novamente, o número é restaurado. Portanto, ao fechar a partição LUKS, como mostrado posteriormente, isso ficará obsoleto.

$SECTORSpode ser determinado observando a saída de cryptsetup status ExistingExt4:

    / dev / mapper / ExistingExt4 está ativo.
      tipo: LUKS1
      cifra: aes-cbc-essiv: sha256
      tamanho da chave: 256 bits
      dispositivo: / dev / sda2
      deslocamento: 2056 setores
      tamanho:     156049348 setores
      modo: leitura / gravação

Um setor tem sempre 512 bytes (mencionado na cryptsetuppágina de manual). Portanto, para subtrair 15 GiB, use um tamanho de setor de 156049348 - 15 * 1024 * 1024 * 2 = 124592068:

cryptsetup resize ExistingExt4 -b 124592068

Quanto ao redimensionamento da partição, partedfunciona bem com as partições GPT. O resizecomando não funciona, no entanto, como solução alternativa (ou solução), remova as informações da partição e crie uma nova partição conforme inspirado em http://ubuntuforums.org/showthread.php?p=8721017#post8721017 :

# cryptsetup luksFechar ExistingExt4 
# parted / dev / sda2
GNU Parted 2.3
Usando / dev / sda
Bem-vindo ao GNU Parted! Digite 'help' para visualizar uma lista de comandos.
(separado) unidade s 
(separado) p
Modelo: ATA INTEL SSDSA2CW08 (scsi)
Disco / dev / sda: 156301488s
Tamanho do setor (lógico / físico): 512B / 512B
Tabela de partição: gpt

Número Início Tamanho final Sistema de arquivos Nome Sinalizadores
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s 156301438s 156051404s Tudo

Como 15 GiB precisam ser eliminados, o novo fim se torna 156301438 - 15 * 1024 * 1024 * 2 = 124844158. Como quero alterar a partição 2, primeiro tenho que removê-la e, em seguida, recriá-la com o rótulo "Tudo" (isso pode ser alterado, se você quiser). Nota : este disco possui um layout GPT. Para o MBR, você deve substituir Everythingpor primaryou extended(não testado, o redimensionamento de uma partição no MBR não foi testado e não é recomendado porque não foi testado).

AVISO : os seguintes comandos destruíram os dados . Não copie sem entender o que está acontecendo. As dimensões do setor deve ser alterado, caso contrário você vai destruir sua partição (s). Não sou de forma alguma responsável por sua estupidez. BACKUP BACKUP BACKUP seus dados para um segundo meio de armazenamento antes de arriscar seus dados.

(parted) rm 2 
(parted) mkpart Tudo 250035s 124844158s
Aviso: A partição resultante não está alinhada corretamente para obter o melhor desempenho.
Ignorar / Cancelar? ignorar 
(separado) p
Modelo: ATA INTEL SSDSA2CW08 (scsi)
Disco / dev / sda: 156301488s
Tamanho do setor (lógico / físico): 512B / 512B
Tabela de partição: gpt

Número Início Tamanho final Sistema de arquivos Nome Sinalizadores
 1 34s 2082s 2049s Boot bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s   124844158s 124594124s                Tudo
(separado) sair

No partedexemplo acima , meus setores não estão alinhados, o que é um erro de uma instalação anterior, não preste muita atenção.

É isso! Você pode usar cryptsetup statuse file -Ls /dev/...verificar se está tudo bem e depois reiniciar.

Lekensteyn
fonte
1
Aconselho vivamente a não utilização desta solução sem backup completo, pois é altamente provável que dê errado. Mas se você tiver um backup completo, criar uma nova partição é muito mais fácil.
Deixe-me adivinhar, um humano fez isso? De qualquer forma, agora enfatizei claramente que um backup deve ser executado antes de brincar com isso. Eu pensei que era óbvio que um backup deve ser executado antes de fazer isso manualmente ... mesmo assim, como alguém poderia atrapalhar isso, dadas as instruções claras e as formas de verificação?
Lekensteyn
Você também tem uma fonte para a falha mencionada? Todos podem reivindicar que as informações fornecidas estão incorretas, mas eu gostaria de verificá-las. Pode ser útil para outros usuários no futuro ...
Lekensteyn
Arno estava falando deste post na lista de discussão: saout.de/pipermail/dm-crypt/2013-September/003521.html
Philipp Wendler
Em vez de rm 2e mkpart [part-type] [start] [end], também é possível usar o resizepart 2 [end]redimensionamento de uma partição sem alterar o nome ou iniciar o deslocamento.
Rob W