Como faço para clonar uma unidade VM usando o LVM para uma unidade menor?

0

Eu tenho várias VMs configuradas dentro do Hyper-V usando o Ubuntu 17.10 e descobri que elas não estão configuradas corretamente - isto é, elas foram configuradas usando o tamanho de bloco padrão para os arquivos VHDX e estão usando muito mais espaço do que eles exigem e têm um tamanho máximo VHDHX maior do que eu gostaria. Em um exemplo, tenho uma unidade que tem ~ 50 GB, mas contém apenas 15 GB de dados.

Eu estou olhando para criar novos arquivos VHDHX usando configurações mais sensíveis e clonar tudo o que está nas unidades para as unidades recém-criadas, mas estou correndo em alguns problemas. As unidades existentes estão aparecendo como tendo duas partições, como mostrado aqui, e há dois volumes lógicos na partição maior - um para dados e outro para troca.

A unidade que estou procurando para clonar isso será um arquivo VHDHX de 30 GB, e eu preciso de alguns conselhos sobre a melhor maneira de fazer isso. Inicialmente tentei usar o dd e encontrei erros devido a fonte ser maior que o destino. Em seguida, tentei usar o gparted para redimensionar a unidade maior, mas não consegui ver a partição LVM como não tendo espaço livre. Eu também tentei reduzir o tamanho da partição LVM e depois usar o gparted, mas também tive erros com isso. Eu fui capaz de reduzir com sucesso o tamanho da partição LVM e, em seguida, usar o dd para clonar o volume LVM para outro volume LVM que criei na nova unidade, embora eu esteja preocupado que quando eu uso lvreduce para redimensionar a partição original pode estar cortando dados se os dados não forem contíguos e estiverem espalhados pela unidade.

Sou muito novo nisso, por isso não sei o que posso estar negligenciando e talvez precise explicar ao fazê-lo, mas essencialmente estou procurando alguma orientação sobre as etapas necessárias para garantir que a nova unidade contenha tudo que está no antigo e eu posso arrancar a partir dele. Se, por exemplo, eu uso lvreduce para redimensionar o volume grande para o tamanho que preciso, como posso verificar se não perdi nada ao fazer isso? Seria essa a abordagem correta?

Até agora, meu plano é:

  1. Crie uma nova VM do Ubuntu para usar para executar esse processo.
  2. Anexe a unidade original + uma nova unidade a ser usada para copiar os dados.
  3. Reduza o volume lógico na unidade original.
  4. Crie as mesmas partições e amp; volumes na nova unidade.
  5. Use o dd para copiar os volumes lógicos para os volumes lógicos equivalentes na nova unidade.

Existe uma maneira melhor de fazer isso, ou qualquer coisa que eu tenha perdido? / armadilhas para estar ciente?

    
por PaulM 02.07.2018 / 12:34

2 respostas

1

Se alguém se deparar com isso e tiver o mesmo problema, a solução que funcionou para mim é principalmente como descrito acima. No exemplo abaixo, minha unidade original tem duas partições, uma partição de inicialização e uma partição de dados com dois volumes lógicos, e a unidade de destino começa com uma partição de inicialização e uma partição de dados sem volumes lógicos.

  1. Configure uma VM com os dois discos conectados e inicialize-a usando um Live CD do Linux.
  2. Execute uma verificação do sistema de arquivos no disco de origem com sudo e2fsck -f /dev/mapper/ubuntu--1704--base--vg-root - o nome do volume pode ser encontrado na saída de sudo fdisk -l
  3. Reduza o sistema de arquivos ao tamanho mínimo antes de redimensionar o volume lógico. Isso pode ser feito usando sudo resize2fs -M /dev/mapper/ubuntu--1704--base--vg-root
  4. Redimensione o volume lógico para o tamanho desejado, nesse caso, 28,5 GiB: sudo lvreduce --resizefs -L 28.5G /dev/mapper/ubuntu--1704--base--vg-root
  5. Renomeie o grupo de volumes na unidade existente, pois usaremos o mesmo nome na nova unidade: sudo vgrename ubuntu-1704-base-vg ubuntu-1704-base-vg-2
  6. Crie um novo volume físico: sudo pvcreate /dev/sda2
  7. Crie um novo grupo de volumes usando o nome do grupo de volumes original na unidade de origem: sudo vgcreate ubuntu-1704-base-vg /dev/sda2
  8. Crie os volumes lógicos na nova unidade para coincidir com os da unidade antiga. No meu caso eu tinha um usado para troca e outro para dados. Tomei o tamanho das extensões lógicas alocadas para cada uma da propriedade 'Current LE' relatada por sudo lvdisplay e, em seguida, usei-as como entrada para o comando lvcreate, por exemplo:
    • sudo lvcreate --extents 7296 --stripes 1 --name root ubuntu-1704-base-vg
    • sudo lvcreate --extents 255 --stripes 1 --name swap_1 ubuntu-1704-base-vg
  9. Copie os dados da unidade antiga para a nova unidade. Fiz isso copiando a partição de inicialização da unidade de origem pela partição de inicialização da nova unidade e copiei o volume lógico da unidade de dados para o novo volume lógico na unidade de destino. por exemplo.:
    • sudo dd if=/dev/sdb1 of=/dev/sda1 bs=64M status=progress
    • sudo dd if=/dev/mapper/ubuntu--1704--base--vg--2-root of=/dev/mapper/ubuntu--1704--base--vg-root bs=64M status=progress

Por fim, execute uma verificação do sistema de arquivos para verificar se as unidades estão bem. Pode haver erros que precisam ser reparados, embora depois de fazer isso eu pudesse inicializar com êxito a partir da unidade copiada e o conteúdo fosse o esperado. sudo e2fsck -f /dev/mapper/ubuntu--1704--base--vg-root

Referências utilizadas: link link

    
por 09.07.2018 / 11:19
0

Se eu entendi, o que você realmente precisa alcançar é copiar a imagem da VM para uma de menor tamanho, mas ainda usar isso no Hyper-V (para usar o formato VHDX).

Nesse caso, não vejo o ponto de passar por uma nova VM.

As imagens de disco da VM podem ser criadas com um tamanho fixo ou dinâmico. Quando o tamanho fixo é usado, todo o espaço é alocado na criação da imagem, e a imagem da VM realmente usa o tamanho final. Quando o formato dinâmico é usado, a pegada no disco só aumenta com o uso real do disco na VM.

Então você deve primeiro verificar qual formato é realmente usado: seu arquivo de imagem pode expor 50Gb enquanto estiver usando menos (arquivos esparsos, se suportado pelo seu sistema operacional pode causar isso).

Caso sua imagem seja fixa, você deve procurar uma ferramenta de conversão (por exemplo, StarWind V2V Converter ou outro) para criar uma nova imagem dinâmica a partir da sua versão fixa, sem ter que passar por mudanças de LVM ou de particionamento.

Nota: Isso pode exigir uma etapa para limpar todo o espaço não utilizado primeiro em cada sistema de arquivos da VM do Ubuntu (dd se = / dev / zero de = / zerofile; rm -f / zerofile).

    
por 02.07.2018 / 13:31