web-dev-qa-db-fra.com

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

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 un fixe et plus petit taille.

Il doit être corrigé car j'y installerai le chiffrement du 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.

Utilisation de 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 à un Ubuntu VM pour le regarder en utilisant Gparted et CloneZilla. La capacité est d'environ 300 Go. Non allouée 145 Go. Utilisée est d'environ 153 Go.

Je souhaite réduire la capacité à environ 160 Go. Cela devrait être suffisant pour s'adapter à /dev/sdb1 et /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?

enter image description here

8
onknows
  1. Désallouez l'espace à la fin du disque dans OS invité , où espace> = taille (disque source) - taille (nouveau disque). Typiquement par réduction de 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.
15
Andre Figueiredo

En fin de compte, 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é dd voir Clonage de disque . Comme indiqué ci-dessous, mon disque de 160 Go dans mon système d'exploitation invité est maintenant stocké dans un fichier vdi VirtualBox fixe de 160 Go.

enter image description here

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

  1. Redimensionnez le disque en utilisant Gestion des disques dans MS Windows à une taille égale ou meilleure un peu plus petite que la taille du VDI.
  2. Ajouter la source vdi MSWIN7.vdi avec MS Windows 7 vers un Ubuntu VM comme deuxième disque.
  3. Créez un nouveau vdi fixe de 160 Go et ajoutez-le également à la machine virtuelle Ubuntu. Il y a maintenant trois disques: /dev/sda1 avec la VM Ubuntu en cours d'exécution, /dev/sdb2 avec la source MSWIN7.vdi et /dev/sdc1 avec 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 sdb vers sdc avec la commande dd 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/sdc1 et 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
3
onknows

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 très nombreux articles consiste à allumer Windows VM et à 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 déplacent pas les fichiers système Windows non amovibles (j'ai dû désactiver la récupération système pour supprimer un bloc de disque amovible 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 -z c :). L'utilisation de vboxmanage pour compacter le fichier vdi existant vous permet de tout faire sur place (mais toujours d'avoir une sauvegarde).

1
Paul Hursky

Dans mon cas, j'avais une fenêtre VM avec 50 Go de vdi pour réduire à 20 Go.

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

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

Cela est peut-être lié à mon système de fichiers btrfs (j'ai entendu que btrfs causait des problèmes avec Vritualbox vdi).

Ma solution:

J'ai essayé une solution différente afin de réduire le 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 vdi ):

  • arrêter le VM (poweroff)

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

  • attacher DVdi à la VM

  • boot 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 de OVdi en réduisant le nouveau disque DVdi )

  • Éteignez la VM

  • Détacher OVdi de la 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

1
Fabiano Tarlao