Comment puis-je réduire un disque VDI en croissance dynamique de VirtualBox?

35

Mes disques virtuels (VDI) à la croissance dynamique issus de diverses installations Ubuntu dans Virtual Box sont en fait "en croissance constante".

La suppression de fichiers sur la machine virtuelle ne libère pas l'espace que mon fichier VDI a pris sur l'espace disque hôte.

Comment puis-je réduire ces fichiers pour rendre à l'hôte l'espace disque inutilisé?

Takkat
la source

Réponses:

34

Un fichier de disque dur virtuel Virtual Box à la croissance dynamique est capable de croître à la demande de la machine virtuelle jusqu’à la taille maximale que nous avons définie lors de la configuration de ce fichier. Cependant, il ne libère pas l'espace des fichiers que nous avons supprimés dans l'OS invité.

Si le disque a trop grossi, nous pouvons le compacter à nouveau, à condition que l'espace inutilisé soit rempli de zéros et que le lecteur soit au format VDI.

Pour un système de fichiers ext2 à ext 4, vous pouvez le faire à partir de l'invité Ubuntu à l'aide de l'utilitaire de ligne de commande zerofree * .Installez zerofree

zerofree /dev/sdxX

Cela nécessite que le lecteur ne soit pas utilisé et qu'il soit démonté . Il se peut donc que nous devions le lier temporairement à une autre machine virtuelle créée à cet effet ou amorcer un environnement en direct Ubuntu sur cette machine virtuelle.

Remplacez-la /dev/sdxXpar la partition formatée ext2, ext3 ou ext4 en question.

Sur plusieurs partitions, nous devons répéter zerofreepour chaque partition. Gardez à l'esprit qu'en remplissant de zéros, le fichier virtuel augmentera temporairement jusqu'à sa taille maximale.

Une fois que tout l’espace disque inutilisé est rempli de zéros, nous réduisons le disque avec

VBoxManage modifyhd <name>.vdi --compact

Cela réduira considérablement la taille de fichier de notre fichier VDI.

* Dans un invité Windows, nous pouvons remplacer l'espace inutilisé par l'utilitaire sdelete.

Takkat
la source
Cela fonctionnera-t-il également pour un système de fichiers chiffré dans l'invité?
smichak
Sûr. Si vous utilisez ecryptfs, les fichiers cryptés ressemblent à des utilitaires fichiers sur disque normaux, et cela fonctionnera. Si vous utilisez le chiffrement intégral du disque, il ne sera de toute façon pas reconnu comme une partition au format ext :)
Chronospoon du
J'utilise une partition ext4 sur un périphérique bloc dm-crypt ... J'ai essayé la méthode et je ne vois pas le fichier .vdi plus petit après compactage. Je pense que les blocs nuls sont sauvegardés sous forme de blocs non nuls sur le périphérique bloc sous dm-crypt.
Smichak
2
@smichak: c'est le point de cryptage. Il chiffrera l’ensemble de votre lecteur pour s’assurer également que nous ne pouvons pas voir les limites des fichiers.
Takkat
3
Si vous ne souhaitez pas connecter votre VDI à un autre ordinateur, vous pouvez démarrer en mode de récupération, puis monter le disque en lecture seule mount -n -o remount,ro -t ext4 /dev/sda1, puis zerofree -v /dev/sda1.
Hamid Nazari
1

Voici quelques moyens alternatifs de mettre à zéro l'espace disque disponible (qui peut être la partie la plus longue). Ensuite, vous devrez toujours exécuter VBoxManage modifyhd <disk> --compactpour compacter le fichier de disque réel.


Cette commande peut mettre à zéro le disque lorsqu'il est démonté:

apt-get install zerofree
zerofree -v /dev/sdxN


Voici un exemple montrant comment dd doit imprimer périodiquement les résultats:

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


Voici un ddprogramme similaire à celui qui imprimera automatiquement les résultats périodiquement:

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M
Chronospoon
la source
1
J'ai vu zerofreeutilisé sur un système de fichiers monté, mais quand il a été monté en lecture seule. Même pour les racines FS: sudo mount -o remount,ro /- mais dans une session graphique, la racine sera occupée et échouera. Mais c'est possible dans runlevel 1 ( telinit 1), vous n'aurez donc pas besoin de démarrer à partir d'un live CD pour le faire.
Tomasz Gandor