81 votes

Comment modifier la taille fixe d'un VDI avec la commande modifyhd sous Windows ?

Je suis en train de chercher comment changer la taille d'un fichier VDI. Je suis nouveau sur VirtualBox, et j'ai beaucoup à apprendre. Mais je pense avoir compris les bases. J'ai déjà installé Windows 7 comme premier invité. L'hôte est également Windows 7. Je n'étais pas sûr de combien d'espace disque allouer, donc j'ai choisi une taille de VDI de 40 Go et une taille fixe pour une performance accrue. Mais j'ai changé d'avis maintenant, et je veux ajouter 10 Go de plus. J'ai cliqué un peu partout dans le programme et lu le contenu du menu Aide, mais cela n'aide pas. Il explique les contrôleurs de disque, SAS, SATA, SCSI, et cetera, mais pas ce que je recherche.

J'ai recherché sur le web des réponses, le forum VirtualBox dit que vous devriez utiliser Gparted si vous voulez la méthode la plus simple (un mod a posté un message épinglé). Certains utilisateurs discutent de l'utilisation de la commande dd. Mais c'est tout du truc Linux. Il y a aussi de nombreuses questions ici à SU qui traitent de l'augmentation et de la diminution des tailles de fichiers VDI, mais elles concernent toutes l'utilisation de Linux comme hôte et de Windows comme invité.

J'ai trouvé ce joli blog post sur comment le faire avec la commande modifyhd de VBoxManage. Ce mec le fait aussi sur Linux en tant qu'OS hôte. Il voulait même la même taille (50 Go) pour son fichier VDI que moi pour le mien, quel hasard. Alors j'ai pensé que j'allais essayer quand même, soit ça passe soit ça casse. Qu'est-ce qui pourrait mal se passer ?... hein ? Eh bien voici la vilaine surprise que j'ai eue.

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" --resize 51200
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not impleme
nted yet!

C:\Program Files\Oracle\VirtualBox>

a

Comment ça?!... on ne peut pas redimensionner les disques durs virtuels de format VDI ? Tu rigoles ? Ne pas supporter votre propre format ? Et maintenant, que dire...

N'y a-t-il vraiment aucun moyen simple de changer la taille d'un fichier VDI, de préférence avec quelques clics à l'intérieur de VirtualBox ? Est-ce en cours de développement ?

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 de modifymedium mais reste rétrocompatible - voir virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi

0 votes

Cela a fonctionné pour moi inspekt.dev/2021/04/13/…

141voto

Andy Mayer Points 26

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

a b c d e f g

Référence

1 votes

0 votes

Bon œil! J'ai corrigé le paramètre modifyhd. Merci de m'avoir signalé cela.

2 votes

Une réponse vraiment bien écrite! À mon humble avis, cela devrait obtenir beaucoup de votes.

15voto

GSTAR Points 1234

Voici un processus assez simple qui a fonctionné pour moi pour redimensionner un disque à taille fixe VirtualBox (v. 4.3.16) en un disque dynamique de 60 Go sur mon Mac (OS X 10.9.4) avec Linux (Ubuntu 14.04) en tant que système d'exploitation invité :

Dans Terminal sur le Mac, CD dans le répertoire avec le fichier VDI et tapez ce qui suit :

VBoxManage showhdinfo mydisk.vdi
VBoxManage clonehd mydisk.vdi mydiskClone.vdi
VBoxManage modifyhd mydiskClone.vdi --resize 61440
VBoxManage showhdinfo mydiskClone.vdi

Dans la section stockage de l'application VirtualBox, ajoutez mydiskClone.vdi comme un deuxième disque dur, puis démarrez la VM normalement.

Dans le shell sur le système d'exploitation invité, tapez :

sudo fdisk /dev/sdb
- supprimer toutes les partitions
- créer une nouvelle partition sur le disque complet

Redémarrez l'invité. Lorsqu'il revient, revenez dans le shell et tapez :

sudo resize2fs /dev/sdb1

Éteignez le système d'exploitation invité.

Dans la section stockage de l'application VirtualBox, définissez à nouveau mydiskClone.vdi comme disque de démarrage. Ensuite, démarrez le système d'exploitation invité et vérifiez la nouvelle taille du disque en utilisant les propriétés de "Ordinateur" dans le navigateur de fichiers.

1 votes

Cette réponse n'a pas de sens. Vous créez d'abord une grande partition sur /dev/sdb, puis la redimensionnez, mais vous ne créez pas de système de fichiers dessus d'abord. Auriez-vous peut-être oublié l'étape de copie de la partition d'origine ?

0 votes

Merci cher. Cela a fonctionné

6voto

Aspiring Dev Points 101

Le clonage est en fait une meilleure solution et il y a une façon plus facile de le faire.

Dans le menu Fichier, sélectionnez Gestionnaire de médias virtuels, puis cliquez sur Copier. La source sera votre disque dur vdi de taille fixe original et votre destination sera quelque chose de nouveau de votre choix (inclut l'option d'un nouveau).

0 votes

Il s'agit d'une partie de la réponse de sammyg.

5voto

Movahhedi Points 11

D'accord, j'ai réussi à le faire sans clonage.

J'avais un fichier VDI de 100 Go (format fixe) avec Ubuntu dessus. Tout fonctionnait bien. Je voulais libérer de l'espace sur l'hôte en réduisant la VM.

Étapes :

  1. Nettoyer

J'ai supprimé les fichiers indésirables. 45 Go libres. J'avais seulement besoin de libérer 30 Go.

  1. Réparer le système d'exploitation invité

Je n'ai qu'une seule partition, donc je ne peux rien faire depuis Ubuntu invité. J'ai monté Ubuntu Live dans la VM et démarré à partir de celui-ci.

J'ai utilisé gparted pour réduire la partition à 70 Go. J'ai créé une nouvelle partition dans l'espace inutilisé en ext4.

  1. Effacer l'espace libre

L'espace libre dans la nouvelle partition (30 Go).

J'ai suivi ce guide : Réduire le disque dur virtuel sur Ubuntu en tant qu'invité et hôte en utilisant zerofree

Ma nouvelle partition était /dev/sda3.

$ sudo apt-get install zerofree
$ sudo init 1

...

# mkdir /tmp3
# mount -o ro -t ext4 /dev/sda3 /tmp3
# zerofree -v /dev/sda3
  1. Compacter le VDI

    VBoxManage modifyhd "ubuntu.vdi" compact

Cela a pris un certain temps, mais ça a fonctionné !

1 votes

Êtes-vous certain que cela a fonctionné? Selon le manuel de VirtualBox, --compact fonctionne uniquement pour les images allouées dynamiquement, et non pour celles de taille fixe.

0 votes

@sleske Si vous suivez toutes les étapes, cela fonctionne. Mais si vous commencez à utiliser tout l'espace disponible sur votre disque, le fichier commence à grossir.

1 votes

@ ATOzTOA : Si le fichier d'image disque grossit, alors ce n'est pas une image au "format fixe", mais une image "allouée dynamiquement", comme vous l'avez écrit dans votre réponse.

3voto

kFieLd Points 31

Un peu en retard pour la fête mais je vais ajouter mon grain de sel. Tout d'abord, je dirai que c'est un processus compliqué qui va rendre la plupart des utilisateurs occasionnels fous d'essayer de le comprendre. Pourquoi Oracle n'a pas inclus cela dans l'interface graphique de VBox reste un mystère.

Étape 1 : Utilisez la ligne de commande Windows (VBoxmanage) pour augmenter la taille du disque. Un conseil ici est d'utiliser l'ID du disque vdi au lieu d'essayer sans fin d'entrer l'emplacement du fichier et d'obtenir des messages d'erreur.

Étape 2 : Ensuite, vous devez étendre votre partition principale pour utiliser le nouvel espace. Téléchargez l'iso de gparted et créez une nouvelle machine virtuelle dans VBox en l'utilisant comme source IDE. Ensuite, utilisez le disque VDI existant comme disque sata. Ne créez pas de disque virtuel pour cette machine. Démarrez la nouvelle machine et vous aurez l'interface graphique de gparted en cours d'exécution. Cela peut prendre quelques redémarrages pour se mettre en place.

Une fois que gparted est en cours d'exécution, vous verrez les partitions de votre disque vdi que vous souhaitez redimensionner. IMPORTANT : Vous allez devoir supprimer la partition étendue et l'espace du fichier d'échange pour pouvoir augmenter la taille de la partition principale, donc ne pas allouer tout le nouvel espace pour la PP. Une fois que vous avez fait cela, vous devrez désigner l'espace restant pour la nouvelle partition étendue et créer un nouvel espace de fichier d'échange à l'intérieur de celle-ci. J'ai trouvé cela bien plus facile que de bidouiller avec la ligne de commande.

Ce n'est pas un jeu d'enfant mais c'est faisable... cela m'a pris environ une demi-journée de recherche sur le web pour comprendre cela. Je fais tourner Win8.1 / Ubuntu sur VBox

Willie

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X