Como diminuir o tamanho / capacidade virtual de um arquivo vdi do Virtualbox

5

Eu quero transformar uma máquina física executando o MS Windows 7 em uma máquina virtual do VirtualBox. Isso é fácil, já fiz isso antes, mas dessa vez eu precisei que o tamanho / capacidade virtual do disco fosse um tamanho fixo e menor .

Ele precisa ser corrigido porque instalarei a criptografia de disco PGP por motivos de conformidade. Isso expandirá um disco dinâmico para o tamanho máximo.

Além deste caso especial, há outras razões para querer que os discos sejam menores e fixos. É minha experiência. Se você executar, por exemplo, um servidor de construção Jenkins em um disco em expansão dinâmica, poderá ver o disco expandindo rapidamente para seu tamanho máximo, enquanto no uso do espaço em disco do sistema operacional convidado está estável e há muito espaço livre.

Usando Disk2vhd eu criei um arquivo vhdx. Este arquivo eu convertido para o formato vdi.

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

Supostamente com o vdi, você pode diminuir o tamanho / capacidade virtual com comandos semelhantes a

vboxmanage modifyhd MSWIN7.vdi --resize 160000

Descobri que isso não funciona. Mesmo se você tentar variantes, você receberá mensagens de erro como:

Progress state: VBOX_E_NOT_SUPPORTED VBoxManage: error: Resize hard disk operation for this format is not implemented yet!

Abaixo está o layout do disco do meu disco vdi. Eu adicionei isso a uma VM Ubuntu para analisá-la usando o Gparted e o CloneZilla. A capacidade é de cerca de 300 GB. 145 GB não alocados. Usado é em torno de 153GB.

Eu quero reduzir a capacidade para cerca de 160 GB. Isso deve ser suficiente para caber /dev/sdb1 e /dev/sdb2 .

BTW, eu tentei o CloneZilla, mas também não parece querer reduzir a capacidade para um disco menor. Eu tentei várias configurações no CloneZilla, mas sem sucesso.

Como posso diminuir o tamanho / capacidade virtual?

    
por onknows 26.05.2016 / 07:20

4 respostas

8

  1. Desaloque o espaço no final do disco no guest OS , onde espaço > = tamanho (disco-fonte) - tamanho (novo disco). Normalmente, por última partição .
  2. Desligue a máquina virtual.
  3. Crie um novo disco da Virtual Box com o tamanho desejado.
  4. Mover o conteúdo do disco antigo para o novo disco:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Ativar a máquina virtual.

  6. Talvez seja necessário redimensionar a partição no sistema operacional convidado para preencher o restante do disco, dependendo do espaço desalocado na etapa 1.
por 04.01.2017 / 17:01
2

No final, consegui resolver esse quebra-cabeça de uma maneira inesperada e fácil, usando o utilitário de linha de comando pré-instalado dd Disk Clonando . Como mostrado abaixo, agora tenho meu drive de 160GB no meu sistema operacional guest armazenado em um arquivo vdi VirtualBox de 160GB.

Eu resolvi usando os seguintes passos:

  1. Redimensione o disco usando Disk Management no MS Windows para um tamanho igual ou melhor que o tamanho da VDI.
  2. Adicione a origem vdi MSWIN7.vdi com o MS Windows 7 a uma VM do Ubuntu como um segundo disco.
  3. Crie um novo vdi fixo de 160 GB e adicione-o à VM do Ubuntu. Agora existem três discos: /dev/sda1 com o Ubuntu VM em execução, /dev/sdb2 com a origem MSWIN7.vdi e /dev/sdc1 com o novo vdi.
  4. Crie o particionamento correto em /dev/sdc . CloneZilla fez isso por mim. Ele não copiou dados, mas criou o particionamento que eu queria. Claro que você pode fazer isso manualmente.
  5. Copie o comando sdb to sdc with dd semelhante a sudo dd if=/dev/sdb of=/dev/sdc . O comando termina com uma mensagem de erro sem espaço restante, que é esperado. Isso eu ignorei porque este é apenas o espaço não alocado que não conseguiu copiar.

Eu acho que é possível executar o comando para cada partição. Talvez seja melhor e não mostre uma mensagem de erro. sudo dd if=/dev/sdb1 of=/dev/sdc1 e sudo dd if=/dev/sdb2 of=/dev/sdc2 .

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s
    
por 26.05.2016 / 07:53
0

Eu acredito que esta solução é extremamente perigosa! Ele depende de todos os arquivos que estão nos primeiros 153 GB da partição original de 300 GB. O comando dd não copia arquivos. Simplesmente copia TODOS os blocos em seqüência. Assim, se você tiver a infelicidade de ter arquivos importantes APÓS o limite de 160 GB, o dd não saberá copiá-los.

A solução típica que tenho visto em muitos posts é ligar a VM do Windows e usar uma combinação de ferramentas de desfragmentação e ferramentas administrativas para consolidar todos os arquivos na frente do disco - a dificuldade é que muitas ferramentas de desfragmentação Não mova arquivos de sistema do Windows ininterruptos (precisei desativar o System Recovery para excluir um bloco de disco ininterrupto de 7 GB), que está em algum lugar no meio do espaço que você está tentando consolidar.

Depois de consolidar os arquivos na frente do disco (o MyDefrag é uma ferramenta freeware que fornece uma exibição de onde os arquivos estão no disco), você deve reduzir o tamanho da partição do Windows. Eu usei a ferramenta diskpart com a opção de encolher.

Neste ponto, você pode usar o dd para copiar a partição agora menor para um novo vdi.

Eu também usei vboxmanage modifymedium win10.vdi --compact, no meu host Linux, mas primeiro tive que executar sdelete.exe no sistema Windows para zerar todo o espaço não utilizado primeiro (sdelete -z c :). Usar o vboxmanage para compactar o arquivo vdi existente permite que você faça tudo no local (mas sempre tenha um backup).

    
por 29.08.2016 / 16:58
0

Eu tentei a solução Andre Figueiredo mas tive um problema com o vdi clonado. Anexei o vdi reduzido à VM e, durante a inicialização, o Virtualbox pára com o erro de E / S.

Talvez isso esteja relacionado ao meu sistema de arquivos btrfs (ouvi btrfs causar problemas com Vritualbox vdi ).

Eu tentei uma solução diferente para reduzir o disco da VM ( vdi ), chamado OVdi , ( OVdi tem tamanho de disco de 50 GB, partição ntfs única com 40GB de espaço livre).

Vamos seguir estes passos:

  • pare a VM (desligamento)

  • crie um novo disco ( vdi ) com o nome DVdi do tamanho desejado (20GB no meu caso ..)

  • anexar DVdi à VM

  • inicialize a VM e instale o utilitário EaseUS Backup Free

  • Use a função EasyUS Clone (ele clona OVdi MBR e a partição ntfs do OVdi diminuindo para novo disco < em> DVdi )

  • Desanexar OVdi da VM

  • Verifique se DVdi é o primeiro dispositivo de inicialização para a VM

  • reinicialize a VM

  • Divirta-se

Não se esqueça de apagar o volume OVdi .

Após estas etapas, reduzi com sucesso o tamanho do disco da VM de 50 GB para 20 GB

    
por 10.11.2018 / 16:12