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/…

2voto

codesniffer Points 141

Voici comment j'ai redimensionné/agrandi/étendu une image VDI fixe (mon processus pour les réduire est dans une autre réponse) :

  1. Utilisez VirtualBox pour créer un nouveau disque de la taille souhaitée (la taille DOIT être au moins la même que l'original). Faites cela en ouvrant les Paramètres de VirtualBox pour la VM invitée, allez dans Stockage, cliquez sur le Contrôleur HDD (ex. "SATA"), puis cliquez sur "+" pour ajouter un disque dur. Configurez ensuite le nouveau disque comme souhaité.
  2. Téléchargez l'ISO live de gparted et configurez la VM invitée pour démarrer à partir de celui-ci (encore une fois, dans les paramètres de Stockage).
  3. Sauvegardez le stockage actuel de votre VM invitée.
  4. Démarrez la VM invitée (elle devrait démarrer dans un environnement live de gparted). À partir de l'environnement gparted :
    1. Utilisez l'application gparted pour vérifier que votre disque existant est "/dev/sda" et que votre nouveau disque (plus grand) est "/dev/sdb" (menu déroulant en haut à droite).
    2. Fermez l'application gparted.
    3. Ouvrez un terminal avec des privilèges root (clic droit sur le bureau -> Terminaux -> terminal avec des privilèges root).
    4. Tapez la commande suivante : dd if=/dev/sda of=/dev/sdb status=progress bs=128M et attendez que cela se termine. Cela copiera le disque original sur le nouveau disque octet par octet, y compris le MBR, etc. (Remarque : cela peut prendre un certain temps en fonction des tailles du disque d'origine, de la vitesse du disque sur l'hôte, etc.). (Remarque : si votre VM invitée a > 1 Go de RAM alloué, vous pouvez changer le paramètre 'bs' en "bs=256M" ce qui pourrait accélérer un peu la copie).
    5. Rouvrez l'application gparted.
    6. Sélectionnez le nouveau disque (plus grand) (devrait être /dev/sdb) dans le menu déroulant en haut à droite.
    7. Étendez la ou les partitions comme vous le souhaitez. Pour étendre une partition qui n'est pas à la fin, vous devrez peut-être déplacer les partitions qui sont après celle(s) que vous souhaitez étendre. Selon les spécificités de votre schéma de partition, vous devrez peut-être le faire en plusieurs étapes comme agrandir la dernière partition jusqu'à la fin, puis la rétrécir en déplaçant tout à la fin. Dans mon cas, ma dernière partition était le linux-swap, alors je l'ai simplement supprimée, j'ai agrandi ma partition principale comme je le voulais, et j'ai recréé la partition swap à la fin (en veillant à reproduire son schéma de partitionnement d'origine).
    8. Appliquez les changements.
    9. À ce stade, vous devriez avoir un nouveau disque de taille fixe avec tout le contenu d'origine, et plus d'espace que l'original. Vous pouvez monter le nouveau disque dans l'environnement live de gparted et vérifier.
    10. Éteignez la VM invitée (live de gparted) et retirez l'ISO du lecteur VM.
  5. Allez dans les Paramètres de VBox pour la VM invitée, accédez à Stockage et supprimez le disque d'origine de la liste (clic droit et sélectionnez "Supprimer l'attachement"). Cela devrait laisser votre disque nouvellement créé pour la VM. Remarque : cette étape consiste simplement à supprimer le disque de la configuration de la VM invitée - votre disque VM original (c'est-à-dire le petit) est toujours disponible sur la machine hôte.
  6. Démarrez la VM et profitez-en !
  7. (Une fois que tout fonctionne comme prévu, vous pouvez supprimer le disque VM original.)

Alors que ce qui précède a très bien fonctionné pour moi plusieurs fois, il semble qu'il soit nécessaire d'ajouter quelques étapes supplémentaires si LVM est utilisé. (REMARQUE : Si LVM est utilisé, vous pouvez simplement ajouter un nouveau disque de la taille souhaitée et ensuite ajouter ce disque au groupe de volumes.) Avec CentOS 6.6 où LVM est utilisé, j'ai dû augmenter l'espace dans LVM aussi. Donc, après avoir démarré le nouveau disque créé ci-dessus, j'ai fait quelque chose comme ceci (diverses parties de ceci vont varier en fonction des noms de votre configuration) :

  1. Obtenez des informations sur la configuration LVM :

    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  31.51g    0 
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 31.51g    0 
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 28.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
  2. Étendre le volume physique (PV) (le groupe de volumes (VG) reflétera automatiquement la même augmentation) :

    # pvresize /dev/sda2
      Physical volume "/dev/sda2" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  39.51g 8.00g
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 39.51g 8.00g
  3. Étendre le volume logique (LV) :

    # lvextend /dev/vg_rhel6bm1/lv_root /dev/sda2
      Size of logical volume vg_rhel6bm1/lv_root changed from 28.31 GiB (7247 extents) to 36.31 GiB (9295 extents).
      Logical volume lv_root successfully resized
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 36.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
  4. Étendre le système de fichiers :

    Avant :

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             28G   24G  3.1G  89% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot

    Commande :

    # resize2fs /dev/mapper/vg_rhel6bm1-lv_root
      resize2fs 1.41.12 (17-May-2010)
      Filesystem at /dev/mapper/vg_rhel6bm1-lv_root is mounted on /; on-line resizing required
      old desc_blocks = 2, new_desc_blocks = 3
      Performing an on-line resize of /dev/mapper/vg_rhel6bm1-lv_root to 9518080 (4k) blocks.
      The filesystem on /dev/mapper/vg_rhel6bm1-lv_root is now 9518080 blocks long.

    Après :

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             36G   24G   11G  69% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot

0 votes

Belle réponse! Bienvenue sur le site!

2voto

codesniffer Points 141

Voici comment j'ai redimensionné/rétréci/réduit une image VDI fixe (mon processus pour l'agrandir est dans une autre réponse sur le même sujet) :

Tout d'abord, un bref historique sur pourquoi j'ai eu besoin de cela (car il existe de nombreux scénarios pour réduire une VDI, certains desquels peuvent ne pas être réalisables avec cette approche) : Il y a quelques années, j'ai créé une VDI fixe pour un invité Windows Server et je l'ai dimensionnée à 600 Go. Je ne me rappelle pas pourquoi j'ai choisi cette taille, mais à ce jour, je n'ai utilisé que 100 Go dans cet invité et je veux récupérer la plupart de l'espace restant. Dans mon cas, je veux conserver toutes les données de l'invité et je veux simplement libérer l'espace inutilisé dans l'invité.

(Les étapes suivantes proviennent principalement de ma mémoire des 2 dernières heures, donc désolé si j'oublie quelque chose ici.)

  1. Déterminez la taille souhaitée pour la nouvelle taille. Naturellement, vous voudrez probablement laisser à l'invité un peu d'espace supplémentaire par rapport à ce qu'il consomme actuellement. La taille doit être au moins égale aux données du disque source/origine, arrondie au gigaoctet le plus proche.

  2. Utilisez VirtualBox pour créer un nouveau disque de taille fixe avec la taille déterminée à l'étape précédente. Faites cela en ouvrant les paramètres de VirtualBox pour la VM invitée, accédez au Stockage, cliquez sur le Contrôleur HDD (par exemple "SATA"), puis cliquez sur le "+" pour ajouter un disque dur. Ensuite, configurez le nouveau disque comme désiré.

  3. Téléchargez l'ISO de gparted live et configurez la VM invitée pour démarrer à partir de celui-ci (encore une fois, paramètres de stockage).

  4. Sauvegardez le stockage actuel de votre VM invitée.

  5. Démarrer la VM invitée (devrait démarrer dans l'environnement gparted live). Depuis l'environnement gparted :

    1. Utilisez l'application gparted pour déterminer quel disque est l'« original » et lequel est le « nouveau ». L'original aura au moins une partition, tandis que le nouveau sera complètement vide. (Généralement, l'« original » est le premier disque qui est assigné /dev/sda, et le disque « nouveau » est le deuxième disque qui est attribué /dev/sdb.)
    2. Utilisez l'application gparted pour réduire la/les partition(s) originale(s) à la/aux taille(s) souhaitée(s). N'oubliez pas de cliquer sur le bouton "Appliquer" une fois que vous avez programmé toutes les opérations. (Cela peut prendre un peu de temps à compléter en fonction de la/ des taille(s) de partition et de la vitesse du disque.)
    3. Utilisez l'application gparted pour créer une table de partition sur le nouveau disque (Périphérique -> Créer une table de partition..., laissez le type en tant que MSDOS).
    4. Utilisez l'application gparted pour créer des partitions identiques sur le nouveau disque. (Pour vous assurer qu'elles sont identiques, j'ai affiché les informations détaillées de chaque partition sur le disque original en utilisant l'option Partition -> Informations... et enregistré une capture d'écran pour l'utiliser lorsque j'ai créé la/les mêmes partition(s) sur le disque de destination.) Assurez-vous de :
      • Créez chaque partition de destination de la même taille que l'originale (ajustée).
      • Définissez les drapeaux sur les partitions pour les faire correspondre (peut-être à faire après la création de la partition).
      • Définissez tout label sur les partitions pour les faire correspondre.
      • (REMARQUE : L'UUID se définit automatiquement lorsque les données sont copiées.)
    5. Cliquez sur le bouton "Appliquer" pour valider tous les changements.
    6. Prenez note du disque qui est l'« original » et celui qui est « nouveau », et prenez note des numéros des partitions correspondantes (ex. /dev/sda1 -> /dev/sdb1, /dev/sda2 -> /dev/sdb2, ...)
    7. Fermez l'application gparted.
    8. Ouvrez un terminal avec des privilèges root (clic droit sur le bureau -> Terminaux -> terminal avec les privilèges root).
    9. En supposant que votre disque "original" est /dev/sda et "nouveau" est /dev/sdb (sinon, ajustez la commande suivante en conséquence), nous allons copier chaque partition, une par une. Pour chaque partition notée à l'étape précédente, entrez la commande suivante dans le terminal :

      # dd if=/dev/sda1 of=/dev/sdb1 status=progress bs=128M

      et attendez que cela se termine. Cela copiera la partition 1 du disque original dans la partition 1 sur le nouveau disque octet par octet.
      Répétez la commande pour chaque partition restante :

      # dd if=/dev/sda2 of=/dev/sdb2 status=progress bs=128M
      # dd if=/dev/sda3 of=/dev/sdb3 status=progress bs=128M
      # ...

      Remarques :

      • Cela peut prendre un certain temps pour se terminer en fonction des tailles des partitions, de la vitesse du disque sur l'hôte, etc).
      • Si votre VM invitée a > 1 Go de RAM alloué, vous pouvez modifier le paramètre 'bs' pour être "bs=256M" ce qui pourrait accélérer un peu la copie.
    10. À ce stade, vous devriez avoir un nouveau disque de taille fixe avec tout le contenu d'origine, et un fichier VDI plus petit que l'original. Vous pouvez monter le nouveau disque dans l'environnement gparted live et vérifier que les données sont bien là.
    11. Éteignez la VM invitée (gparted live) et retirez l'ISO de gparted du lecteur de la VM.
  6. Allez dans les paramètres de VBox pour la VM invitée, accédez au Stockage, et retirez le disque original de la liste (clic droit et sélectionnez "Supprimer l'attache"). Cela devrait laisser votre disque nouvellement créé pour la VM. Remarque : Cette étape consiste simplement à supprimer le disque de la configuration de la VM invitée--votre disque VM invité d'origine (c'est-à-dire le grand VDI) est toujours disponible sur la machine hôte.

  7. La dernière étape que j'ai dû effectuer pour mon invité Windows a été de définir/réparer le MBR et/ou le BCD. (Je ne sais pas si tout cela est nécessaire pour un invité Linux car je ne l'ai pas encore fait.) Si je démarrais simplement à partir de ma nouvelle VDI, j'obtenais un écran d'erreur Windows Boot Mgr avec ce contenu (malheureusement, je n'ai pas pris de capture d'écran avant de résoudre le problème) :

    windows n'a pas pu démarrer
    statut : 0xc000000e
    information : Un périphérique requis n'est pas connecté ou ne peut pas être accédé.
  8. Obtenez un ISO d'une installation ou d'une réparation Windows (idéalement une qui correspond à votre version OS) et configurez la VM invitée pour démarrer à partir de celui-ci (encore une fois, paramètres de stockage).

  9. Démarrez la VM invitée et choisissez de démarrer à partir du CD/DVD.

    1. Comme chaque version de l'installation/réparation Windows est différente, je ne peux pas donner ici des étapes précises pour tout le monde. Mais l'idée est de choisir l'option "Réparer" et de trouver votre chemin vers une invite de commandes. Dans mon cas de Windows Server 2012, j'ai dû : (a) Choisir ma langue/locale ; (b) Choisir "Réparer votre ordinateur" dans le coin inférieur gauche ; (c) Choisir "Dépannage" ; (d) Choisir "Invite de commandes".

    2. Une fois que vous êtes à une invite de commandes, exécutez les commandes suivantes (grâce à http://loverofcode.blogspot.com/2013/11/fixed-0xc000000e-boot-error.html pour l'info !) :

      > bootrec /fixmbr
      > bootrec /fixboot
      > bootrec /rebuildBcd

      Cette dernière commande devrait localiser votre installation Windows et demander de l'ajouter au BCD. Répondez 'O'.

    3. Quittez l'invite de commandes et éteignez la VM invitée.

  10. Allez dans les paramètres de VBox pour la VM invitée, accédez au Stockage, et retirez l'ISO d'installation/réparation de Windows du lecteur CD/DVD.

  11. Démarrer la VM et profitez !

  12. (Une fois que tout fonctionne comme prévu, vous pouvez supprimer le disque VM d'origine.)

0voto

oHo Points 2423

Je fournis une réponse étendue à tout système d'exploitation hébergé s'exécutant sur n'importe quel système d'exploitation hôte. Cette réponse suppose que vous souhaitez augmenter la taille (étendre).

Note : Comme indiqué par djule5 (voir le commentaire juste après la question), modifyhd est maintenant connu sous le nom de modifymedium (mais reste rétrocompatible). Ici j'utilise modifymedium.

1. Quittez votre VM en cours d'exécution

Oui, cette réponse concerne un fichier VDI déjà utilisé par une VM VirtualBox.

2. Ouvrez un terminal sur votre hôte pour redimensionner l'image disque

La ligne de commande VBoxManage ne veut pas redimensionner une image disque en utilisant le nom de fichier VDI.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage modifymedium my_disk_image.vdi --resizebyte 16260316160                                                                      VBoxManage: error: Impossible d'enregistrer le disque dur '/home/user/vm/my_disk_image.vdi' {181540c7-b791-4b2f-8e01-5feaff04a6eb} car un disque dur '/home/user/vm/my_disk_image.vdi' avec l'UUID {181540c7-b791-4b2f-8e01-5feaff04a6eb} existe déjà
VBoxManage: error: Détails: code NS_ERROR_INVALID_ARG (0x80070057), composant VirtualBoxWrap, interface IVirtualBox, appelé nsISupports
VBoxManage: error: Contexte: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" à la ligne 179 du fichier VBoxManageDisk.cpp

Identifiez donc l'UUID de votre image disque.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage list hdds
UUID:           181540c7-b791-4b2f-8e01-5feaff04a6eb
UUID parent :    base
État :          créé
Type :           normal (base)
Emplacement :       /home/user/vm/my_disk_image.vdi
Format de stockage : VDI
Capacité :       10240 Mégaoctets
Chiffrement :     désactivé

Étendez la taille de l'image disque.

$ vboxmanage modifymedium 181540c7-b791-4b2f-8e01-5feaff04a6eb --resizebyte 16260316160
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

3. Utilisez un outil de partitionnement pour étendre la partition logique

Exécutez votre VM hébergée. Ensuite, utilisez un outil de partitionnement.

Certains outils pour un Linux hébergé :

Si le système hébergé utilise Windows :

4. Vérifiez l'espace libre de la partition

La taille de votre fichier VDI (sur votre système hôte) peut ne pas avoir changé car votre VM n'a pas encore utilisé la quantité supplémentaire d'espace. Amusez-vous bien.

-1voto

saman Points 1

Cela fonctionnerait pour moi et devrait spécifier la capacité totale du disque dur. Pas l'espace que nous devons augmenter...

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "D:\Machine Virtuelle\VirtualBox VMs\Windows 7 (Serveur FileZilla)\Windows 7 (Serveur FileZilla).vdi" --resize 15360

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