Comment réduire la taille / capacité virtuelle d'un fichier vdi Virtualbox


8

Je veux transformer une machine physique exécutant MS Windows 7 en une machine virtuelle VirtualBox. C'est facile, je l'ai déjà fait, mais cette fois, j'avais besoin que la taille / capacité virtuelle du disque soit fixe et plus petite.

Il doit être corrigé car je vais y installer le chiffrement de disque PGP pour des raisons de conformité. Cela étendra un disque dynamique à sa taille maximale.

Mis à part ce cas particulier, il existe d'autres raisons pour lesquelles les disques doivent être plus petits et fixes. C'est mon expérience. Si vous exécutez par exemple un serveur de génération Jenkins sur un disque à expansion dynamique, vous pouvez voir le disque se développer rapidement à sa taille maximale tandis que dans l'espace disque du système d'exploitation invité, l'utilisation de l'espace est stable et il y a beaucoup d'espace libre.

En utilisant Disk2vhd, j'ai créé un fichier vhdx. Ce fichier que j'ai converti au format vdi.

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

Avec vdi, vous pourriez réduire la taille / capacité virtuelle avec des commandes similaires à

vboxmanage modifyhd MSWIN7.vdi --resize 160000

J'ai trouvé que cela ne fonctionne pas. Même si vous essayez des variantes, vous obtiendrez systématiquement des messages d'erreur tels que:

État d'avancement: VBOX_E_NOT_SUPPORTED VBoxManage: erreur: l'opération de redimensionnement du disque dur pour ce format n'est pas encore implémentée!

Ci-dessous est la disposition du disque de mon disque vdi. J'ai ajouté cela à une machine virtuelle Ubuntu pour le regarder en utilisant Gparted et CloneZilla. La capacité est d'environ 300 Go. 145 Go non alloué. Utilisé est d'environ 153 Go.

Je souhaite réduire la capacité à environ 160 Go. Cela devrait être suffisant pour s'adapter /dev/sdb1et /dev/sdb2.

BTW, j'ai essayé CloneZilla mais il ne semble pas non plus aimer réduire la capacité d'un disque plus petit. J'ai essayé divers paramètres dans CloneZilla mais sans succès.

Comment puis-je réduire la taille / capacité virtuelle?

entrez la description de l'image ici

Réponses:


15
  1. Désallouez l'espace à la fin du disque dans le système d'exploitation invité , où espace> = taille (disque source) - taille (nouveau disque). En règle générale, en réduisant la dernière partition .
  2. Désactivez la machine virtuelle.
  3. Créez un nouveau disque Virtual Box avec la taille souhaitée.
  4. Déplacez le contenu de l'ancien disque vers le nouveau disque:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Activez la machine virtuelle.

  6. Vous devrez peut-être redimensionner la partition dans le système d' exploitation invité pour remplir le reste du disque en fonction de l'espace désalloué à l'étape 1.

2
C'est la façon vraiment correcte de convertir un vdi dynamique qui crée une très grande partition en un nouveau vdi (peut-être un format de taille fixe pour des raisons de performances). Je ne sais pas pourquoi personne ne répond à cette question et préfère la méthode DD ...
zw963

Qu'entendez-vous par «désallouer l'espace à la fin du disque»? Faites-vous référence à la réduction du fichier vdi sur l'hôte, à cette question: superuser.com/questions/529149/…
mikezter

dans l'OS invité, j'ai clarifié le message
Andre Figueiredo

Parfait! Merci beaucoup!
Yamakuzure

1
L'utilisation vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingdétruit la table de partition sur l'image cible.
Mogens TrasherDK

3

À la fin, j'ai réussi à résoudre ce puzzle d'une manière simple et inattendue en utilisant l'utilitaire de ligne de commande préinstallé, ddvoir Clonage de disque . Comme indiqué ci-dessous, j'ai maintenant mon disque de 160 Go dans mon système d'exploitation invité stocké dans un fichier vdi VirtualBox fixe de 160 Go.

entrez la description de l'image ici

Je l'ai résolu en utilisant les étapes suivantes:

  1. Redimensionnez le disque à l'aide de la gestion des disques dans MS Windows à une taille égale ou meilleure un peu plus petite que la taille du VDI.
  2. Ajoutez le vdi source MSWIN7.vdiavec MS Windows 7 à une machine virtuelle Ubuntu comme deuxième disque.
  3. Créez un nouveau vdi fixe de 160 Go et ajoutez-le également à la machine virtuelle Ubuntu. Maintenant, il y a trois disques: /dev/sda1avec la VM Ubuntu en cours d'exécution, /dev/sdb2avec la source MSWIN7.vdiet /dev/sdc1avec le nouveau vdi.
  4. Créez le partitionnement correct sur /dev/sdc. CloneZilla l'a fait pour moi. Il n'a pas copié les données mais a créé le partitionnement que je voulais. Bien sûr, vous pouvez le faire manuellement.
  5. Copiez sdbvers sdcavec une ddcommande similaire à sudo dd if=/dev/sdb of=/dev/sdc. La commande se termine par un message d'erreur «pas d'espace restant», ce qui est attendu. J'ai ignoré cela car il s'agit simplement d'un espace non alloué qu'il n'a pas réussi à copier.

Je pense qu'il est possible d'exécuter la commande pour chaque partition. C'est peut-être mieux et n'affichera pas de message d'erreur. sudo dd if=/dev/sdb1 of=/dev/sdc1et sudo dd if=/dev/sdb2 of=/dev/sdc2.

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s

2

Je pense que cette solution est extrêmement dangereuse! Il repose sur tous les fichiers se trouvant dans les premiers 153 Go de la partition originale de 300 Go. La commande dd ne copie pas les fichiers. Il copie simplement TOUS les blocs dans l'ordre. Ainsi, si vous avez eu la malchance d'avoir des fichiers importants APRÈS la coupure de 160 Go, dd ne saura pas les copier.

La solution typique que j'ai vue dans de nombreux articles est de mettre sous tension la machine virtuelle Windows et d'utiliser une combinaison d'outils de défragmentation et d'outils d'administration pour consolider tous les fichiers à l'avant du disque - la difficulté est que de nombreux outils de défragmentation ne bougent pas de façon inamovible Fichiers système Windows (j'ai dû désactiver la récupération du système pour supprimer un morceau de disque inamovible de 7 Go), qui se trouvent quelque part au milieu de l'espace que vous essayez de consolider.

Une fois que vous avez consolidé les fichiers sur le devant du disque (MyDefrag est un outil gratuit qui fournit un affichage de l'emplacement de vos fichiers sur le disque), vous devez réduire la taille de votre partition Windows. J'ai utilisé l'outil diskpart avec l'option de réduction.

À ce stade, vous pouvez utiliser dd pour copier la partition désormais plus petite vers un nouveau vdi.

J'ai également utilisé vboxmanage modifymedium win10.vdi --compact, sur mon hôte Linux, mais j'ai d'abord dû exécuter sdelete.exe dans le système Windows pour éliminer tout l'espace inutilisé en premier (sdelete -zc :). L'utilisation de vboxmanage pour compacter le fichier vdi existant vous permet de tout faire sur place (mais toujours d'avoir une sauvegarde).


Ce que j'ai oublié de mentionner, c'est que j'ai redimensionné la partition dans MS Windows d'abord à la bonne taille. Cela garantit que les fichiers sont dans la partie 153 Go. MS WIndows déplacera les fichiers / données. Notez que MS Windows ne se redimensionne pas parfois car les fichiers ne peuvent pas être déplacés.
2016

2

Dans mon cas, j'avais une machine virtuelle Windows avec 50 Go de VDI pour réduire à 20 Go.

J'ai essayé la solution d' Andre Figueiredo mais j'ai eu un problème avec le cloné vdi.

Lorsque j'applique la solution Andre Figueiredo et attache le rétréci vdià la machine virtuelle, lors du démarrage, Virtualbox s'arrête avec une erreur d'E / S.

Peut-être que cela est lié à mon btrfssystème de fichiers (j'ai entendu btrfsdes problèmes avec Vritualbox vdi).

Ma solution:

J'ai essayé une solution différente afin de réduire le disque VM ( vdi), nommé OVdi , ( OVdi a une taille de disque de 50 Go, une partition ntfs unique avec 40 Go d'espace libre).

Suivons ces étapes (c'est mon cas, vous pouvez adapter / inventer différents noms de vdi ):

  • arrêter la VM (mise hors tension)

  • créer un nouveau disque ( vdi) avec le nom DVdi de la taille souhaitée (20 Go dans mon cas ..)

  • attacher DVdi à la VM

  • démarrez la VM et installez l'utilitaire EaseUS Backup Free

  • Exécutez EasyUS et utilisez la fonction EasyUS Clone (il clone OVdi MBR et la partition ntfs d' OVdi en réduisant le nouveau disque DVdi )

  • Éteignez la VM

  • Détacher OVdi de VM

  • Vérifiez si DVdi est le premier périphérique de démarrage pour la machine virtuelle

  • redémarrez la machine virtuelle

  • S'amuser

N'oubliez pas de supprimer le volume OVdi .

En suivant ces étapes, j'ai réussi à réduire la taille du disque VM de 50 Go à 20 Go


0

Comme d'autres l'ont mentionné, la réponse d'André Figueiredo est basée sur la chance car il n'y a aucune garantie que le "premier X gb" d'espace est votre espace, sauf si vous défragmentez, auquel cas c'est toujours risqué.

La réponse de Paul Hursky est beaucoup plus sûre. Je vais énumérer quelques étapes supplémentaires que j'ai faites (notez que c'est pour Windows, le mien était XP mais cela devrait également fonctionner pour d'autres):

1) Obtenez l'édition gratuite de "MiniTool Partition Wizard Free 12" dans ce lien

2) Installez-le dans le système d'exploitation invité et redimensionnez votre lecteur, laissez un peu de répit juste pour être sûr (ne le tirez pas complètement en arrière ..). Étant donné que vous redimensionnez probablement le disque dur du système d'exploitation actuel, il vous donnera une option pour redémarrer et effectuer l'action, procédez comme suit.

3) Maintenant, en utilisant le même programme MiniTool Partition, sélectionnez votre espace non alloué (sous *:) -> Clic droit -> Wipe Partition -> Remplir les secteurs avec zéro (rapide).

4) Arrêtez maintenant en toute sécurité le système d'exploitation invité. Accédez au dossier VirtualBox où VBoxManage.exe existe, ouvrez cmd dans ce chemin et exécutez ceci:

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5) Et maintenant, tout devrait fonctionner comme par magie. Lorsque vous ouvrez ensuite l'OS invité, il exécute la vérification du disque, LET IT RUN, il trouve des "fichiers orphelins" qui ressemblaient à des fichiers système.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.