O que 'cryptsetup resize' faz se o LUKS não armazena o tamanho da partição?

5

A página de FAQ% LUKS / dm-crypt diz:

2.15 Can I resize a dm-crypt or LUKS partition?

Yes, you can, as neither dm-crypt nor LUKS stores partition size.

Estou confuso:

  1. O que é "redimensionado" se nenhuma informação de tamanho for armazenada?

  2. Como um "redimensionamento" é lembrado na abertura / fechamento de um volume criptografado?

por Tom Hale 13.11.2016 / 04:21

1 resposta

9

É sobre online redimensionar.

Por exemplo, se você usar o LVM, criar um LV de tamanho 1G e colocar LUKS, é assim:

# lvcreate -L1G -n test VG
# cryptsetup luksFormat /dev/mapper/VG-test
# cryptsetup luksOpen /dev/mapper/VG-test lukstest
# blockdev --getsize64 /dev/mapper/VG-test
1073741824
# blockdev --getsize64 /dev/mapper/lukstest
1071644672

Portanto, o dispositivo LUKS é aproximadamente do mesmo tamanho que o dispositivo de teste VG (1G menos 2MiB usado pelo cabeçalho LUKS).

Agora, o que acontece quando você aumenta o LV?

# lvresize -L+1G /dev/mapper/VG-test
  Size of logical volume VG/test changed from 1.00 GiB (16 extents) to 2.00 GiB (32 extents).
  Logical volume test successfully resized.
# blockdev --getsize64 /dev/mapper/VG-test
2147483648
# blockdev --getsize64 /dev/mapper/lukstest
1071644672

O LV agora é 2G grande, mas o dispositivo LUKS ainda está preso em 1G, já que esse foi o tamanho em que foi originalmente aberto.

Quando você tiver luksClose e luksOpen , também será 2G - porque o LUKS não armazena um tamanho, o padrão é o tamanho do dispositivo no momento em que você o abre. Então, fechar e abrir (ou simplesmente reinicializar) atualizaria o mapeamento da cripta para o novo tamanho do dispositivo. No entanto, como você só pode fechar um contêiner depois de desmontar / parar tudo dentro dele, isso é basicamente um redimensionamento offline .

Mas talvez você tenha um sistema de arquivos montado no LUKS, ele está em uso e você não quer desmontá-lo para o redimensionamento, e é aí que cryptsetup resize é redimensionado online operação.

# cryptsetup resize /dev/mapper/lukstest
# blockdev --getsize64 /dev/mapper/lukstest
2145386496

cryptsetup resize atualiza o mapeamento de criptografia ativo para o novo tamanho do dispositivo, não requer um montante, e então você pode seguir com resize2fs ou o que quer que também aumente o sistema de arquivos montado online.

Se você não se importa em reinicializar ou remontar, você nunca precisará do cryptsetup resize , pois isso acontece automaticamente off-line. Mas se você quiser fazer on-line , essa é a única maneira.

Ao encolher ( cryptsetup resize --size x ), o redimensionamento é temporário. O LUKS não armazena o tamanho do dispositivo, então da próxima vez que você luksOpen, ele simplesmente usará o tamanho do dispositivo novamente. Então encolhendo os bastões apenas se o dispositivo de apoio também fosse reduzido de acordo.

Para uma redução bem-sucedida, você tem que trabalhar para trás ... crescer é aumentar a partição primeiro, depois LUKS, depois o sistema de arquivos ... encolher é encolher primeiro o sistema de arquivos e a partição por último.

Se o redimensionamento não funcionar, é muito provável que o dispositivo de apoio não seja redimensionado, por exemplo, o kernel pode recusar alterações na tabela de partição enquanto a unidade estiver em uso. Verifique com o blockdev que todas as camadas de dispositivos têm os tamanhos que você espera que eles tenham.

    
por 11.01.2018 / 14:46