368 votes

Comment compacter la taille du fichier VDI de VirtualBox ?

J'ai une VM VirtualBox qui est configurée avec une taille de disque dur très grande (plus grande que l'hôte). Par erreur, un programme sur la VM a généré beaucoup de fichiers journaux et la taille du fichier VDI ne cesse d'augmenter jusqu'à ce qu'il n'y ait plus d'espace sur l'hôte.

Maintenant j'ai supprimé les fichiers journaux mais la taille du fichier VDI ne diminue pas après avoir utilisé VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact

Y a-t-il un moyen de vraiment compacter la taille du fichier VDI? Merci!

3voto

Dejv Points 139

J'utilise cela pour mon image VDI montée sur une Debian virtuelle dans VirtualBox Windows. Ce n'est pas une solution générale, mais cela devrait au moins vous donner une idée de ce que je fais.

Commandes dans Debian:

root@debian:~# lsblk  # afficher les partitions
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 
sdb 8:16 0 128G 0 disque 
sdb1 8:17 0 128G 0 partie /mnt/web  # C'EST LA PARTITION D'INTÉRÊT!
sda 8:0 0 64G 0 disque 
sda1 8:1 0 61,4G 0 partie / 
sda2 8:2 0 1K 0 partie 
sda5 8:5 0 2,7G 0 partie 
\[SWAP\] sr0 11:0 1 56,3M 0 rom
root@debian:~# service mysql stop  # terminer toutes les opérations avec la partition
root@debian:~# service apache2 stop  # terminer toutes les opérations avec la partition
root@debian:~# umount /mnt/web  # débrancher la partition
root@debian:~# apt-get install zerofree  # installer l'outil pour remplir les espaces vides avec des zéros
root@debian:~# zerofree -v /dev/sdb1  # remplir avec des zéros
root@debian:~# poweroff  # éteindre la machine

Commandes dans Windows:

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd --compact "D:\VirtualBox VMs\web.vdi"  # convertir des zéros en espace vide

J'espère que cela vous aidera :)

3voto

niziak Points 31

Je ne veux pas activer le support TRIM dans le système d'exploitation, car chaque suppression de données forcera la compression des données dans le fichier VDI, rendant le système invité inutilisable lorsque le fichier VDI est sur un disque rotatif classique. Pour moi, il est préférable de compacter manuellement, par exemple une fois par mois.

Pendant la compression normale, le contenu du fichier VDI est copié dans un nouveau fichier. Cela nécessite de l'espace libre (parfois important) sur le disque hôte.

J'ai une solution similaire à celle indiquée par Andrew Domaszek. Cela fonctionne très bien même avec NTFS (Windows 10).

Pour ce faire :

  • créez une nouvelle machine virtuelle qui démarre avec le CD live de GParted (vous pouvez utiliser votre distribution Linux préférée).

  • Modifiez les paramètres de la machine et définissez le contrôleur de disque SATA

  • Ajoutez les fichiers VDI existants que vous souhaitez compacter

  • Changez les disques basés sur VDI pour qu'ils soient visibles comme des SSD avec le support TRIM :

    VBoxManage storageattach "gparted live" --storagectl "SATA" --port 0 --discard on --nonrotational on
    VBoxManage storageattach "gparted live" --storagectl "SATA" --port 1 --discard on --nonrotational on
  • démarrer la machine

  • Dans le shell root de Linux, montez la partition NTFS mount /dev/sda2 /mnt

  • Zéro espace libre dd if=/dev/zero of=/mnt/bigfile

  • rm /mnt/bigfile

  • forcer la compression du VDI sans créer de nouveau fichier : fstrim -v /mnt

2voto

monowerker Points 2202

Un truc très astucieux pour compléter la réponse acceptée est que vous pouvez vous en tirer sans faire de compactage du tout après avoir mis à zéro l'espace invité, en utilisant un système de fichiers compressé sur l'hôte (par exemple, en sélectionnant la compression du dossier des disques virtuels dans les propriétés NTFS sur un hôte Windows). En fait, cela présente l'avantage d'économiser beaucoup plus d'espace car les systèmes d'exploitation ont tendance à contenir de nombreux fichiers texte ou binaires répétitifs (par exemple, un disque invité de 30 Go ayant 15 Go d'espace mis à zéro peut se transformer en 4 Go sur le disque hôte).

Les inconvénients incluent une augmentation de l'accès au disque sur le matériel réel et une légère augmentation de l'utilisation du processeur.

0voto

golimar Points 1172

Juste pour ajouter une alternative à la réponse acceptée: vboxmanage clonehd non seulement clone mais aussi compresse les disques virtuels, donc si vous avez également besoin de le cloner, vous pouvez utiliser un processus similaire et le faire d'un coup (dans mon cas, je déplaçais la machine virtuelle d'un disque externe à un disque interne avec moins d'espace donc j'avais besoin de cloner+compresser):

  1. exécutez la défragmentation dans l'invité (Windows uniquement)
  2. mettez en place un espace libre dans l'invité
  3. éteignez la VM invitée
  4. vboxmanage clonehd /mnt/externaldisk/VMs/win10.vdi /home/myuser/VMs/win10.vdi

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