Como diminuir o tamanho da imagem bruta de disco da máquina virtual (kvm)?

Como diminuir o tamanho da imagem bruta de disco da máquina virtual (kvm)?

Digamos que eu tenha linux-vm-image.rawum tamanho de 10 GB. Dentro, há uma etx4partição primária ("clássica" do tipo MS-DOS usada, não GPT) (sem LVM usado), estendendo-se a todo o volume. E os dados reais alocados nessa partição são, por exemplo, 3 GB.

Esta imagem está preparada para uso em algum ambiente de virtualização (kvm + OpenStack no meu caso), e qualquer VM criada a partir desta imagem seria redimensionada para atingir o tamanho do disco virtual, dependendo da escolha do usuário. Portanto, não há motivos para manter espaço livre em disco dentro dessa imagem de disco.

Como posso reduzir o tamanho dessa imagem bruta de disco para o mínimo (de 10 GB para ~ 3 GB)?

alguns instruçõespara qcow2imagens de disco, mas preciso usar rawapenas imagens - nem qcow, nem OVFe nem outras.

Meu palpite é algo como

  • monte esta imagem em algum lugar como um dispositivo de bloco
  • faça alguma manutenção para que todos os arquivos dentro da partição ext4 sejam movidos para o "início" dela, outras palavras - faça uma desfragmentação de espaço livre
  • desmontar imagem
  • reduza o tamanho do sistema de arquivos em imagem (para corresponder ao tamanho dos dados dentro dele)
  • reduzir o tamanho da imagem (para corresponder ao tamanho do sistema de arquivos dentro dela)
  • atualize a tabela de partição na imagem para corresponder ao novo tamanho da partição

Mas não tento inventar uma bicicleta? Existe algum comando de uma linha ou software especial para fazer o que eu quero?

Responder1

As imagens brutas não são realmente fáceis de redimensionar. No entanto, você pode experimentar zerofreeo sistema de arquivos (desmontado) e compactar o arquivo de imagem resultante.

Além disso, verifique se o seu ambiente de destino suporta o formato de contêiner OVF, que permite imagens de disco compactadas. (zerofree ainda se aplica).

Responder2

Você está no caminho certo. Se você puder montá-lo como um dispositivo de bloco (montagem em loop), provavelmente poderá fazer com que o gparted trabalhe nele.

O gparted fará a maior parte do que você deseja:
1. mover os dados FS para a frente de sua partição (diminuir FS)
2. reduzir a partição e ajustar a tabela de partição
3. pode até fornecer o "disco" restante tamanho quando você imprimir a tabela de partição atualizada (por exemplo, último setor da última partição, etc.).

Essa é a parte difícil. Depois disso, desmonte-o. Você pode ter que calcular o tamanho exato do seu "disco" manualmente, mas depois disso, um simples truncar no arquivo deve ser suficiente.

ATUALIZAÇÃO: Se sua tabela de partição for do tipo MBR, tudo bem. Com GPT, possui uma cópia espelhada no final do disco. Portanto, tenha cuidado com isso, pois o gparted pode não ser inteligente o suficiente para isso (a menos que você possa fornecer a imagem bruta diretamente). Se você tiver problemas, considere o gdisk como uma etapa após o truncar. Trunque com alguns blocos extras e obtenha gdisk/equiv para reconstruir a cópia espelhada (provavelmente será necessário fazer a montagem em loop uma segunda vez).

informação relacionada