Forum Linux.debian/ubuntu Virtualbox -> Resize VM impossible

Posté par  . Licence CC By‑SA.
Étiquettes :
-2
5
juil.
2020

Bonjour à tous,

Je suis sous debian buster, j'ai installé virtualbox Version 6.1.10_Debian r138449 depuis le dépot suivant,

https://people.debian.org/~lucas/virtualbox-buster/

J'essaie de redimensionner une VM car elle est en dynamique à 100Go, j'aimerais la descendre à 50Go.

Voici mon erreur,

user@home:~$ vboxmanage modifyhd /home/user/virtualbox_machine/Win10/Win10.vdi --resize 75000
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Failed to resize medium
VBoxManage: error: Shrinking is not yet supported for medium '/home/user/virtualbox_machine/Win10/Win10.vdi'
VBoxManage: error: Details: code VBOX_E_NOT_SUPPORTED (0x80bb0009), component MediumWrap, interface IMedium
VBoxManage: error: Context: "RTEXITCODE handleModifyMedium(HandlerArg*)" at line 816 of file VBoxManageDisk.cpp

Merci d'avance.

  • # La doc

    Posté par  . Évalué à 4.

    Extrait de la doc:

    The --resize x option, where x is the desired new total space in megabytes enables you to change the capacity of an existing image. This adjusts the logical size of a virtual disk without affecting the physical size much.

    This option currently works only for VDI and VHD formats, and only for the dynamically allocated variants. It can only be used to expand, but not shrink, the capacity.

    https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifymedium

  • # ???

    Posté par  . Évalué à 3.

    le message d'erreur t'explique que ce n'est pas possible.

    Tu peux créer un disque de 50Go et faire une image depuis ton Windows virtualisé.

    • [^] # Re: ???

      Posté par  . Évalué à 1.

      Faire une image depuis mon windows virtualisé ?

      Du windows en lui meme ? On peut faire ca ?

      • [^] # Re: ???

        Posté par  . Évalué à 3.

        Ça paraît effectivement optimiste, mais par contre, tu peux démarrer ta machine virtuelle sur l’image d’un système de sauvetage (comme SystemRescueCd) pour le faire.

        Ou utiliser vdfuse pour monter les deux disques virtuels sur ton système hôte pour faire les opérations depuis lui.

        « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

        • [^] # Re: ???

          Posté par  . Évalué à 1.

          Du coup, on peut monter deux fichiers .vdi pour copier leur contenu ?

          Du coup, on peut shrink une VM de cette façon la.

          • [^] # Re: ???

            Posté par  . Évalué à 3.

            Du coup, on peut monter deux fichiers .vdi pour copier leur contenu ?

            Oui.

            Sur une machine virtuelle, c’est simplement vu comme des disques différents.

            Sur la machine hôte, vdfuse fait apparaître les partitions des images vdi comme des fichiers, qu’on peut ensuite monter avec l’option -o loop de mount ou travailler directement avec tout utilitaire disque (ddrescue, ntfsclone…).

            Si les partitions occupent tout l’espace de l’image disque d’origine, il est probablement plus judicieux de d’abord les réduire avec gparted (en démarrant la machine virtuelle sur un système live), et ensuite seulement de les copier sur la nouvelle image disque plus petite.

            « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

            • [^] # Re: ???

              Posté par  . Évalué à 1. Dernière modification le 07 juillet 2020 à 18:12.

              J'ai procédé comme suit,

              ANCIENNE VM :

              VDI TO IMG
              VBoxManage clonehd --format RAW VM.vdi VM.img
              
              losetup /dev/loop0 /home/user/VM.img
              kpartx -av /dev/loop0
              mount
              

              NOUVELLE VM :

              J'ai créé un fichier VDI à partir du GUI Virtualbox pour taille max 75 Go dynamique (contraitement à 100Go sur l'ancienne VM)

              VDI TO IMG
              VBoxManage clonehd --format RAW VM.vdi VM.img
              
              losetup /dev/loop0 /home/user/VM.img
              kpartx -av /dev/loop0
              
              partitionnement -> fdisk
              formatage -> mkfs type 0x07

              Ensuite, j'ai copié les partitions suivantes avec "cp -r /mnt/original/* /mnt/shrink/"

              /dev/mapper/loop0p1
              /dev/mapper/loop0p2
              /dev/mapper/loop0p3
              
              IMG TO VDI
              sudo VBoxManage convertfromraw --format VDI VM.img VM.vdi
              

              LANCEMENT DE LA VM

              La VM se lance mais ne boot pas sous virtualbox

              L'invite de commande clignote.

              Ce doit être la partition de boot loop0p1 qui n'est pas au niveau des partitions de la nouvelle VM.

              Auriez-vous une idée ?

              Merci

              • [^] # Pas cp, surtout sans plus d’options

                Posté par  . Évalué à 2.

                Ensuite, j'ai copié les partitions suivantes avec "cp -r /mnt/original/* /mnt/shrink/"

                Là, tu as copié les fichiers, pas les partitions, et sans conserver les droits.

                Il aurait fallu au minimum utiliser cp -a pour conserver des droits Unix (et encore, je ne suis pas sûr que ça conserve toutes les subtilités genre ACL, attributs et capacités).

                Quant aux partitions Windows, il faudrait les copier avec un utilitaire approprié sous Windows pour conserver les ACL de leurs fichiers, mais de toute façon, certains fichiers de la partition système ne doivent pas être déplacés.

                Si vdfuse est compliqué à installer sous Debian, le mieux reste de démarrer la machine virtuelle sur un système de sauvetage (comme SystemRescueCd), réduire si nécessaire la taille des partitions avec gparted, puis les copier (les partitions en entier, pas juste les fichiers qu’elles contiennent) avec ddrescue ou ntfsclone.

                Il restera le problème de mettre en place un démarrage Windows.

                « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

                • [^] # Re: Pas cp, surtout sans plus d’options

                  Posté par  . Évalué à 1.

                  Effectivement, je devrais effectuer un -a à chaque copie que je fais aussi.

                  SystemRescueCd permet de faire quoi de plus par rapport à un cp -ar classique ?

                  ddrescue = dd ?

                  ntfsclone, on ne l'a pas sous debian ?

                  • [^] # Re: Pas cp, surtout sans plus d’options

                    Posté par  . Évalué à 2. Dernière modification le 08 juillet 2020 à 12:19.

                    Effectivement, je devrais effectuer un -a à chaque copie que je fais aussi.

                    Et il comprend le -r.

                    SystemRescueCd permet de faire quoi de plus par rapport à un cp -ar classique ?

                    SystemRescueCd, ce n’est pas une commande, mais un système de sauvetage.
                    On l’insère dans le lecteur de CD (virtuel pour VirtualBox), on démarre la machine virtuelle dessus et on accède aux disques (virtuels) avec les utilitaires dont on a besoin.

                    ddrescue = dd ?

                    Oui, en plus rapide et plus fiable, avec une syntaxe plus facile et une possibilité de gérer les défauts du support d’origine (il faut utiliser un fichier de log pour ça). Paquet gddrescue sous Debian.

                    ntfsclone, on ne l'a pas sous debian ?

                    Si c’est comme sous Ubuntu, dans le paquet ntfs-3g.

                    Après réflexion, une idée encore plus simple pour procéder :

                    • ajouter l’image de SystemRescueCd et le nouveau disque virtuel dans les périphériques de la machine virtuelle,
                    • la démarrer sur SystemRescueCd,
                    • réduire la taille des partitions avec Gparted pour qu’elles puissent tenir sur le second disque (au pire plutôt un peu trop petites que trop grandes) et si nécessaire les déplacer après redimensionnement pour qu’elles soient contiguës vers le début du disque),
                    • faire une copie brute de tout le disque avec ddrescue, ou s’il refuse parce que le disque de destination est plus petit, avec cat,
                    • sync
                    • arrêter (proprement) la machine virtuelle,
                    • retirer l’ancien disque virtuel des périphériques de la machine virtuelle,
                    • redémarrer.

                    Quant à la commande pour copier, si le disque d’origine est sda et le nouveau sdb (ATTENTION à bien la faire sur la machine virtuelle et avec les bons noms de périphériques dans le bon ordre, sinon ça fera des dégâts !), avec ddrescue :

                    ddrescue /dev/sda /dev/sdb

                    avec cat :

                    cat /dev/sda > /dev/sdb

                    Si ça se passe bien, il y aura quand même une indication d’erreur à la fin comme quoi le disque de destination est trop petit.

                    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

  • # mais pourquoi se faire du mal

    Posté par  . Évalué à 3.

    Je suis sous debian buster, j'ai installé virtualbox Version 6.1.10_Debian r138449 depuis le dépot suivant,

    https://people.debian.org/~lucas/virtualbox-buster/

    alors que l'installation est proposée le plus simplement du monde ici

    https://www.virtualbox.org/wiki/Linux_Downloads

    soit en mode .deb à installer,
    soit en mode depot officiel à configurer, ou ton tuto t'envoie sur un depot non-officiel

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.