Resumo:
VBoxManage.exe modifyhd --resize
pode aumentar (mas não diminuir) o tamanho lógico da imagem do disco (o tamanho visto pelo sistema operacional convidado).
VBoxManage.exe modifyhd inputfile.vdi --compact
pode diminuir o tamanho da imagem do disco físico (o tamanho do arquivo de imagem no disco, conforme visto pelo sistema operacional host). No entanto, isso não altera o tamanho do disco lógico. Observe que isso só funciona se o espaço livre tiver sido zerado primeiro no sistema operacional convidado.
modifyhd
só funciona apenas com a variante de formato dinâmico ("imagem alocada dinamicamente").
modifyhd
só funciona com os formatos de imagem VDI e VHD.
- Se você estiver usando snapshots, precisará clonar o VDI mais recente da snapshot da subpasta "Snapshots".
Para detalhes, consulte a seção 8.23. VBoxManage modifyhd no manual.
O motivo pelo qual a redução do tamanho do disco lógico de uma VDI ainda não foi implementada é impedir a corrupção de dados que pode ocorrer e você teria VMs não inicializáveis como resultado disso. Portanto, quando a --resize
opção é usada, o novo tamanho do disco deve ser maior que o tamanho atual. Não é permitido que seja menor ou igual ao tamanho atual. Em outras palavras, um disco de 40 GB só pode ser redimensionado para 41 GB ou mais que isso, não pode ser redimensionado para 40 GB (isso é idiota) ou 39 GB ou menos.
As versões antigas do VirtualBox criavam arquivos VDI como variante de formato "fixo". A nova configuração padrão é agora criar variantes de formato "dinâmico" quando novos arquivos VDI (imagem de disco virtual) são criados. (Suponho que esse seja o caso desde a introdução da variante de formato dinâmico, qualquer que seja a versão introduzida.)
Então, o que a mensagem de erro "operação para este formato ainda não foi implementada" significa é que seu arquivo VDI usa a variante de formato "fixo". Para contornar esse problema, você precisará clonar seu arquivo VDI usando o clonehd
comando Para visualizar em qual variante de formato seu arquivo VDI está atualmente, você pode usar o showhdinfo
comando
Exemplo de trabalho
Mostrar informações de VDI sobre o disco atual.
Comando de entrada: vboxmanage.exe showhdinfo path\inputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID: 132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity: 40960 MBytes
Size on disk: 40962 MBytes
In use by VMs: sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)
C:\Program Files\Oracle\VirtualBox>
Veja onde está escrito "padrão fixo"? É por isso que cospe o erro acima quando você tenta redimensioná-lo.
Clone o arquivo VDI antigo para um novo arquivo VDI.
Comando de entrada: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c
C:\Program Files\Oracle\VirtualBox>
Voilà! O arquivo antigo agora foi clonado para um novo arquivo. Como a configuração padrão nas novas versões do VirtualBox é usar a variante de formato "dinâmico", você não precisa defini-lo explicitamente. Embora, se você estiver trabalhando com uma versão mais antiga do VirtualBox, convém definir a opção como "dinâmica" (se disponível) para garantir melhor compatibilidade e / ou flexibilidade com versões futuras do VirtualBox.
Mostrar informações de VDI sobre o disco clonado.
Comando de entrada: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 40960 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
Veja como agora diz "padrão dinâmico"? Que bom!
(Nota: o motivo aqui é 7806 MB como tamanho físico, porque eu usei a --compact
opção no arquivo VDI original na tentativa de forçar a conversão para uma variante de formato dinâmico. Apenas algo que li no fórum do VirtualBox, supostamente teria funcionado com versões mais antigas, então achei melhor tentar. Não funcionou.)
Redimensionando o disco clonado.
Comando de entrada: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
C:\Program Files\Oracle\VirtualBox>
Sucesso! Sem formato bullshitting não mais. Lembre-se de redimensionar o novo disco clonado, e não o original. Lembre-se de que o tamanho é expresso em MB. Eu acredito que você pode usar, por exemplo 51200
, bem como 50G
(ou possivelmente "GB"). Há também a opção --resizebyte
que pode ser usada para expressar o tamanho em bytes.
Mostrar informações de VDI sobre o disco clone redimensionado.
Comando de entrada: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 51200 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
É isso aí! A partir daqui, o que você precisa fazer é adicionar esta unidade clonada como seu novo VDI para a VM. Você faz isso dentro do VirtualBox. Eu não vou entrar nisso. Se você conseguiu ler e entender isso até agora, provavelmente não precisará de orientações adicionais. Você pode excluir o arquivo "fixo" antigo ou deixá-lo como backup. Certifique-se de testar o novo arquivo VDI antes de excluir o arquivo de origem original.
Nota! Você não verá imediatamente o novo tamanho do disco clonado. Você precisa inicializar a VM e, em seguida, usar sua ferramenta de gerenciamento de partições para expandir sua partição para preencher o disco virtual (ou criar mais partições). Para o Windows, basta executar diskmgmt.msc
e você poderá expandir a partição.
Screenshots
Referência