Résumé :
-
VBoxManage.exe modifyhd --resize
peut augmenter (mais pas diminuer) la taille logique de l'image disque (la taille vue par l'OS invité).
-
VBoxManage.exe modifyhd inputfile.vdi --compact
peut diminuer le taille de l'image du disque physique (la taille du fichier image sur le disque tel qu'il est vu par l'OS hôte). Ceci ne change cependant pas la taille du disque logique. Notez que cela ne fonctionne que si l'espace libre a d'abord été mis à zéro dans le système d'exploitation invité.
-
modifyhd
ne fonctionne qu'avec la variante du format dynamique ("image allouée dynamiquement").
-
modifyhd
ne fonctionne qu'avec les formats d'image VDI et VHD.
- Si vous utilisez des snapshots, vous devrez cloner le dernier snapshot VDI à partir du sous-dossier "Snapshots".
Pour plus de détails, voir la section 8.23. VBoxManage modifierhd dans le manuel.
La raison pour laquelle la réduction de la taille du disque logique d'une VDI n'a pas encore été mise en œuvre est la prévention de la corruption des données qui pourrait se produire et entraîner des VM non amorçables. Par conséquent, lorsque le --resize
est utilisée, la nouvelle taille du disque doit être supérieure à la taille actuelle. Elle ne doit pas être inférieure ou égale à la taille actuelle. En d'autres termes, un disque de 40 Go ne peut être redimensionné qu'à 41 Go ou plus, il ne peut pas être redimensionné à 40 Go (c'est stupide) ou à 39 Go ou moins.
Les anciennes versions de VirtualBox créaient les fichiers VDI en tant que variante de format "fixe". Le nouveau paramètre par défaut est maintenant de créer des variantes de format "dynamiques" lorsque de nouveaux fichiers VDI (image de disque virtuel) sont créés. (Je suppose que c'est le cas depuis l'introduction de la variante de format dynamique, quelle que soit la version dans laquelle elle a été introduite).
Le message d'erreur "le fonctionnement de ce format n'est pas encore implémenté" signifie donc que votre fichier VDI utilise la variante de format "fixe". Pour contourner ce problème, vous devrez cloner votre fichier VDI à l'aide de la fonction clonehd
commande. Pour voir dans quelle variante de format se trouve votre fichier VDI à l'heure actuelle, vous pouvez utiliser la commande showhdinfo
commandement.
Exemple de travail
Affiche les informations VDI sur le disque actuel.
Commande d'entrée : 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>
Vous voyez où il est écrit "fixed default" ? C'est pourquoi l'erreur ci-dessus apparaît lorsque vous essayez de le redimensionner.
Clonez l'ancien fichier VDI vers un nouveau fichier VDI.
Commande d'entrée : 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à ! L'ancien fichier a maintenant été cloné vers un nouveau fichier. Puisque le paramètre par défaut dans les nouvelles versions de VirtualBox est d'utiliser la variante de format "dynamique", vous n'avez pas besoin de le définir explicitement. Cependant, si vous travaillez avec une version plus ancienne de VirtualBox, vous voudrez peut-être définir l'option " dynamic " (si elle est disponible) pour assurer une meilleure compatibilité et/ou flexibilité avec les futures versions de VirtualBox.
Afficher les informations VDI sur le disque cloné.
Commande d'entrée : 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>
Vous voyez qu'il est maintenant écrit "dynamic default" ? Comme c'est gentil !
(Au fait ! La raison pour laquelle il est indiqué 7806 Mo comme taille physique ici est parce que j'avais utilisé la fonction --compact
sur le fichier VDI original pour tenter d'imposer la conversion en variante de format dynamique. J'ai lu sur le forum de VirtualBox que cela aurait fonctionné avec des versions antérieures, alors j'ai pensé que je pouvais essayer. Ça n'a pas marché).
Redimensionnement du disque cloné.
Commande d'entrée : 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>
Le succès ! Plus d'erreur de format. Rappelez-vous simplement de redimensionner le nouveau disque cloné, et non le disque original. N'oubliez pas que la taille est exprimée en Mo. Je crois que vous pouvez utiliser par exemple 51200
ainsi que 50G
(ou éventuellement "GB"). Il existe également l'option --resizebyte
qui peut être utilisé pour exprimer la taille en octets.
Afficher les informations VDI sur le disque clone redimensionné.
Commande d'entrée : 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>
C'est fini ! À partir de là, vous devez ajouter ce disque cloné comme nouveau VDI pour la VM. Vous faites cela dans VirtualBox. Je ne vais pas entrer dans les détails. Si vous avez été capable de lire et de comprendre ceci jusqu'à présent, alors vous n'avez probablement pas besoin d'être guidé davantage. Vous pouvez soit supprimer l'ancien fichier "corrigé", soit le laisser comme sauvegarde. Veillez à tester le nouveau fichier VDI avant de supprimer le fichier source original.
Note ! Vous ne verrez pas immédiatement la nouvelle taille du disque cloné. Vous devez démarrer la machine virtuelle avec ce disque, puis utiliser votre outil de gestion des partitions pour étendre votre partition afin de remplir le disque virtuel (ou créer d'autres partitions). Pour Windows, il suffit d'exécuter diskmgmt.msc
et vous serez en mesure d'étendre la partition là-dedans.
Captures d'écran
Référence
6 votes
J'ai enlevé la diatribe sur la qualité de VirtualBox, qui n'ajoute rien d'utile à la question.
2 votes
Pour référence future,
modifyhd
est maintenant connu sous le nom demodifymedium
mais reste rétrocompatible - voir virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi0 votes
Cela a fonctionné pour moi inspekt.dev/2021/04/13/…