Resumo:
VBoxManage.exe modifyhd --resize
pode aumentar (mas não diminuir) o tamanho lógico da imagem do disco (o tamanho visto pelo SO convidado).
VBoxManage.exe modifyhd inputfile.vdi --compact
pode diminuir o tamanho da imagem física do disco (o tamanho do ficheiro de imagem no disco visto pelo SO hóspede). No entanto, isto não altera o tamanho lógico do disco. Note-se que isto só funciona se o espaço livre tiver sido zero'ed no sistema operativo convidado primeiro.
modifyhd
só funciona com a variante de formato dinâmico (“imagem alocada dinamicamente”).
modifyhd
só funciona com os formatos de imagem VDI e VHD.
& - Se estiver a utilizar instantâneos, terá de clonar o último instantâneo VDI da subpasta “Instantâneos”.
Para detalhes ver a secção 8.23. VBoxManage modifyhd no manual.
A razão pela qual a redução do tamanho lógico do disco de um VDI ainda não foi implementada é para evitar a corrupção de dados que poderia ocorrer e teria VMs não inicializáveis como resultado disso. Portanto, quando a opção --resize
é utilizada, o novo tamanho do disco deve ser maior do que o tamanho actual. Não é permitido ser inferior ou igual ao tamanho actual. Por outras palavras, um disco de 40 GB só pode ser redimensionado para 41 GB ou superior, não pode ser redimensionado para 40 GB (o que é apenas estúpido) ou 39 GB ou inferior a isso.
Versões antigas da VirtualBox criaram ficheiros VDI como variante do formato “fixo”. A nova configuração padrão é agora criar variantes de formato “dinâmico” quando novos ficheiros VDI (imagem de disco virtual) são criados. (suponho que seja este o caso desde a introdução da variante de formato dinâmico, qualquer que seja a versão em que foi introduzida).
Então o que a mensagem de erro “operação para este formato ainda não está implementada” significa que o seu ficheiro VDI utiliza a variante de formato “fixa”. Para contornar este problema, terá de clonar o seu ficheiro VDI usando o comando clonehd
. Para ver em que variante de formato se encontra o seu ficheiro VDI neste momento, pode usar o comando showhdinfo
.
Exemplo de funcionamento
Mostrar informação VDI sobre o disco actual.
Comando Input: 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>
Vê onde diz “padrão fixo”? É por isso que cospe o erro acima quando se tenta redimensioná-lo.
Clique o ficheiro VDI antigo para um novo ficheiro 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 ficheiro antigo foi agora clonado para um novo ficheiro. Uma vez que a configuração padrão nas novas versões da VirtualBox é utilizar a variante de formato “dinâmico”, não é necessário definir isso explicitamente. Embora, se estiver a trabalhar com uma versão antiga da VirtualBox, então poderá querer definir a opção para “dinâmico” (se disponível) para assegurar uma melhor compatibilidade e/ou flexibilidade com futuras versões da VirtualBox.
Mostrar informação 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 diz agora “padrão dinâmico”? Que bom!
(Na nota lateral! A razão pela qual diz aqui 7806 MB como tamanho físico é porque tinha utilizado a opção --compact
no ficheiro VDI original, numa tentativa de impor a conversão para a variante de formato dinâmico. Apenas algo que li no fórum da VirtualBox, supostamente teria funcionado com versões mais antigas, por isso pensei que mais valia tentar isso. Não funcionou.)
Resizing the cloned disk.
comando Input: 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 mais bullshitting de formato. Basta lembrar de redimensionar o disco novo, clonado, e não o original. Tenha em mente que o tamanho é expresso em MB. Creio que se pode usar por exemplo 51200
assim como 50G
(ou possivelmente “GB”). Existe também a opção --resizebyte
que pode ser utilizada para expressar o tamanho em bytes.
Mostrar informação VDI sobre o disco de 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 mesmo! A partir daqui o que tem de fazer é adicionar esta unidade clonada como o seu novo VDI para o VM. Faz isso dentro da VirtualBox. Não vou entrar nisso. Se conseguiu ler e compreender isto até agora, então provavelmente não precisa de mais nenhuma orientação. Pode apagar o antigo ficheiro “fixo”, ou deixá-lo como cópia de segurança. Certifique-se de testar o novo ficheiro VDI antes de apagar o ficheiro de origem original.
Note! Não verá imediatamente o novo tamanho do disco clonado. Tem de arrancar o VM com ele, e depois tem de utilizar a sua ferramenta de gestão de partições para expandir a sua partição para preencher o disco virtual (ou criar mais partições). Para Windows, basta correr diskmgmt.msc
e será capaz de expandir a partição lá dentro.
Screenshots
Referência