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

8

Quero transformar uma máquina física executando o MS Windows 7 em uma máquina virtual VirtualBox. Isso é fácil, já fiz isso antes, mas dessa vez eu precisava que o tamanho / capacidade virtual do disco fosse 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 desejar que os discos sejam menores e corrigidos. É a minha experiência Se você executar, por exemplo, um servidor de construção Jenkins em um disco que se expande dinamicamente, poderá ver o disco se expandindo rapidamente para seu tamanho máximo, enquanto o uso do espaço em disco do SO convidado é estável e há muito espaço livre.

Usando o Disk2vhd , criei um arquivo vhdx. Este arquivo eu converti 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

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

Estado do progresso: VBOX_E_NOT_SUPPORTED VBoxManage: erro: O redimensionamento da operação do disco rígido para este formato ainda não foi implementado!

Abaixo está o layout do meu disco vdi. Adicionei isso a uma VM do Ubuntu para vê-lo usando o Gparted e o CloneZilla. A capacidade é de cerca de 300 GB. 145GB não alocado. Usado é de cerca de 153 GB.

Quero diminuir a capacidade para cerca de 160 GB. Isso deve ser suficiente para caber /dev/sdb1e /dev/sdb2.

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

Como posso diminuir o tamanho / capacidade virtual?

insira a descrição da imagem aqui

onknows
fonte

Respostas:

15
  1. Desalocar espaço no final do disco no SO convidado , em que espaço> = tamanho (disco de origem) - tamanho (novo disco). Normalmente, diminuindo a última partição .
  2. Desligue a máquina virtual.
  3. Crie um novo disco da Virtual Box com o tamanho desejado.
  4. Mova o conteúdo do disco antigo para dentro do novo disco:

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

  6. Pode ser necessário redimensionar a partição no sistema operacional convidado para preencher o restante do disco, dependendo do espaço desalocado na etapa 1.
Andre Figueiredo
fonte
2
Esta é a maneira realmente correta de converter um vdi dinâmico que cria, use uma partição muito grande para um novo vdi (talvez formato de tamanho fixo por motivos de desempenho). Eu não sei por que ninguém se esta resposta e preferem o caminho dd ...
zw963
O que você quer dizer com "desalocar espaço no final do disco"? Você está se referindo a reduzir o arquivo vdi no host, a partir desta pergunta: superuser.com/questions/529149/…
mikezter 8/17
no SO convidado, esclareço a postagem
Andre Figueiredo
Perfeito! Muito obrigado!
Yamakuzure
1
O uso vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingdestrói a tabela de partição na imagem de destino.
Mogens TrasherDK 15/03
3

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, ddconsulte Clonagem de Disco . Como mostrado abaixo, agora tenho minha unidade de 160 GB no sistema operacional convidado armazenada em um arquivo vdi do VirtualBox fixo de 160 GB.

insira a descrição da imagem aqui

Eu o resolvi usando as seguintes etapas:

  1. Redimensione o disco usando o Gerenciamento de Disco no MS Windows para um tamanho igual ou melhor um pouco menor que o tamanho do VDI.
  2. Adicione o vdi de origem MSWIN7.vdicom 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/sda1com a VM do Ubuntu em execução, /dev/sdb2com a fonte MSWIN7.vdie /dev/sdc1com o novo vdi.
  4. Crie o particionamento correto em /dev/sdc. O CloneZilla fez isso por mim. Não copiou dados, mas criou o particionamento que eu queria. Claro que você pode fazer isso manualmente.
  5. Copie sdbpara sdccom ddcomando semelhante a sudo dd if=/dev/sdb of=/dev/sdc. O comando termina com uma mensagem de erro sem espaço restante, o que é esperado. Isso eu ignorei porque esse é apenas um 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/sdc1e 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
onknows
fonte
2

Eu acredito que esta solução é extremamente perigosa! Ele conta com todos os arquivos nos primeiros 153 GB da partição original de 300 GB. O comando dd não copia arquivos. Ele simplesmente copia TODOS os blocos em sequência. Portanto, se você teve 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 já vi em muitas postagens é ligar a VM do Windows e usar alguma 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 se movem imóveis Arquivos de sistema do Windows (eu tive que desativar a Recuperação do sistema para excluir um pedaço de disco imóvel de 7 GB), que estão 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 estão os arquivos no disco), você deve reduzir o tamanho da sua partição do Windows. Eu usei a ferramenta diskpart com a opção encolher.

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

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

Paul Hursky
fonte
O que eu esqueci de mencionar é que redimensionei a partição no MS Windows primeiro para o tamanho certo. Isso garante que os arquivos estejam na parte de 153 GB. O Windows Window moverá os arquivos / dados. Observe que o MS Windows não será redimensionado às vezes porque os arquivos não podem ser movidos.
onknows
2

No meu caso, eu tinha uma VM do Windows com 50GB vdi para encolher para 20GB.

Eu tentei a solução de Andre Figueiredo , mas tive um problema com o clonado vdi.

Quando aplico a solução de Andre Figueiredo e conecto o encolhido vdià VM, durante a inicialização, o Virtualbox para com erro de E / S.

Talvez isso esteja relacionado ao meu btrfssistema de arquivos (ouvi dizer que btrfscausa problemas com o Vritualbox vdi).

Minha solução:

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

Vamos seguir estas etapas (este é o meu caso, você pode adaptar / inventar diferentes nomes de vdi ):

  • 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

  • Execute o EasyUS e use a função EasyUS Clone (clona o OVdi MBR e a partição ntfs do OVdi , encolhendo para o novo disco DVdi )

  • Desligar a VM

  • Desconecte o OVdi da VM

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

  • reinicie a VM

  • Diverta-se

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

Após essas etapas, reduzi com êxito o tamanho do disco da VM de 50 GB para 20 GB

Fabiano Tarlao
fonte
0

Como outros já mencionaram, a resposta de Andre Figueiredo é baseada na sorte, pois não há garantia de que o "primeiro X gb" de espaço seja o seu espaço, a menos que você desfragmente, nesse caso, ainda é arriscado.

A resposta de Paul Hursky é muito mais segura. Vou listar algumas etapas extras que fiz (observe que isso é para Windows, o meu era XP, mas também deve funcionar para outros):

1) Obtenha a edição gratuita do "MiniTool Partition Wizard Free 12" neste link

2) Instale-o no sistema operacional convidado e redimensione sua unidade, deixe algum espaço para respirar apenas por segurança (não puxe tudo de volta ..). Como você provavelmente redimensiona o disco rígido do sistema operacional atual, ele oferece a opção de reiniciar e executar a ação, faça isso.

3) Agora, usando o mesmo programa MiniTool Partition, selecione o espaço não alocado agora (em *:) -> Clique com o Botão Direito -> Limpar Partição -> Preencher Setores com Zero (Rápido).

4) Agora, desligue o sistema operacional convidado com segurança. Vá para a pasta VirtualBox em que o VBoxManage.exe existe, abra o cmd neste caminho e execute:

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5) E agora tudo deve funcionar magicamente. Quando você abrir o SO convidado, ele executará o disco de verificação, DEIXE EXECUTAR, e encontrará "arquivos órfãos" que pareciam arquivos do sistema.

goamn
fonte