J'ai une machine virtuelle VirtualBox qui a configuré une très grande taille de disque dur (plus grande que l'hôte). Par erreur, un programme sur la machine virtuelle a généré de nombreux fichiers journaux et la taille du fichier VDI ne cesse de croître jusqu'à ce qu'il n'y ait plus d'espace disponible sur l'hôte.
Maintenant, j'ai supprimé les fichiers journaux, mais la taille du fichier VDI ne devient pas plus petite après avoir utilisé VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact
Existe-t-il un moyen de compacter réellement la taille du fichier VDI? Merci!
la source
dd ...; rm /bigfile
ceci:, cela minimisera la durée avec un disque plein au cas où vous n'attendriez pas ladd
fin de l'opération.Je suis sur un hôte Windows 7 avec des invités Windows. Voici un fichier de commandes que j'ai écrit pour Compacter tous les VDI dans une arborescence de dossiers.
J'ai laissé les liens dans les commentaires afin que vous puissiez (en quelque sorte) dire comment cela fonctionne.
modifier
Après tout cela, j’ai essayé l’ outil CloneVDI et il a fait du bon travail en beaucoup moins de temps et en un clic.
la source
Invité Debian sur un hôte Windows en utilisant discard / TRIM.
Ce n'est pas une réponse directe en soi, car je traite du problème, pas de la question. Au lieu de compacter périodiquement l'image, cette solution utilise discard pour supprimer automatiquement les blocs inutilisés de l'image de disque de la machine virtuelle hôte.
Cette solution nécessite un système de fichiers invité prenant en charge TRIM en continu. Le wiki Arch Linux contient une liste de systèmes de fichiers prenant en charge les opérations TRIM .
FDE et cryptoroot ne sont pas spécifiquement couverts, car il existe des problèmes de sécurité et aucune des autres solutions à cette question ne permettrait un compactage non plus. Le wiki Arch Linux contient des informations sur les périphériques TRIM et dm-crypt .
En théorie, cela fonctionnera pour tous les invités Linux sur des hôtes VBox utilisant le stockage VDI.
Configuration de l'hôte
Avec la VBox fermée et aucune machine virtuelle en cours d'exécution, ajoutez le support de suppression à vos disques en définissant les deux
discard
etnonrotational
pour chaque disque dans le fichier de configuration de la machine virtuelle. A cette époquediscard
n'est pas dans l'interface graphique, maisnonrotational
est exposé comme la case à cocher « Solid State Drive ». (ref: forums vbox, supprimer le support )Démarrez la machine virtuelle et vérifiez que le support TRIM est activé:
Configuration d'invité
Si LVM est utilisé, modifiez le paramètre de mise au rebut dans
/etc/lvm/lvm.conf
. (ref: wiki debian, exemple lvm.conf )Dans fstab, ajoutez l'
discard
option aux systèmes de fichiers que vous souhaitez supprimer automatiquement (ref: debian wiki, exemple avec fstab )Remontez les systèmes de fichiers pour qu'ils récupèrent leurs nouvelles options.
Coupez manuellement les blocs libres maintenant avec
fstrim
.fstrim
utilise le système de fichiers monté, pas le périphérique bloquant qui le sauvegarde. Au lieu de définir un rejet continufstab
, cela pourrait être fait sur un cron hebdomadaire. (Le cron hebdomadaire est recommandé pour les disques SSD physiques pouvant prendre en charge le support de TRIM, mais cela n’est pas pertinent ici, car les disques SSD sous-jacents sont gérés par le système d’exploitation hôte. Voir: avertissement de suppression de ssd ).À ce stade, la taille des systèmes de fichiers à l'intérieur de la machine virtuelle et celle des images de la machine virtuelle doivent être assez proches.
Testé avec:
la source
Pour MacOS Guest, procédez comme suit:
Annulez l'espace libre dans le système invité:
(remplacez / Volumes / Macintosh HD par le nom de votre lecteur)
Arrêtez la machine virtuelle invitée
Exécutez cette commande pour réduire la taille de l'image du disque VDI.
OU
la source
J'utilise ceci pour mon image VDI montée sur Debian virtuelle dans Windows VirtualBox. Ce n'est pas une solution générale, mais cela devrait au moins vous donner un aperçu de ce que je fais.
Commandes dans Debian:
Commandes sous Windows:
J'espère que ça aide :)
la source
Je ne souhaite pas activer la prise en charge TRIM dans le système d'exploitation, car chaque suppression de données imposera le compactage des données dans un fichier VDI, rendant le système invité inutilisable lorsque le fichier VDI se trouve sur un disque rotatif classique. Pour moi, le mieux est d'effectuer un compactage à la main, par exemple une fois par mois.
Lors du compactage normal, le contenu du fichier VDI est copié dans un nouveau fichier. Cela nécessite de l’espace libre (parfois grand) sur le disque hôte.
J'ai une solution similaire à celle proposée par Andrew Domaszek. Cela fonctionne très bien même avec NTFS (Windows10).
Pour faire ça:
Modifiez les disques basés sur VDI pour qu'ils soient visibles en tant que SSD avec le support TRIM:
démarrer la machine
mount /dev/sda2 /mnt
dd if=/dev/zero of=/mnt/bigfile
rm /mnt/bigfile
fstrim -v /mnt
la source
Une astuce très utile pour compléter la réponse acceptée est que vous pouvez vous en sortir sans aucune compression après la mise à zéro de l'espace invité, en utilisant un système de fichiers compressé sur l'hôte (par exemple, en choisissant de compresser le dossier des lecteurs virtuels sur Hôte Windows). En fait, cela permet d’économiser beaucoup d’espace, car les systèmes d’exploitation contiennent généralement beaucoup de fichiers texte ou binaires répétitifs (par exemple, un lecteur invité de 30 Go disposant de 15 Go d’espace réduit à zéro peut atteindre 4 Go sur le lecteur hôte).
Les mises en garde impliquent que l’accès au disque sur le matériel réel peut augmenter et que l’utilisation du processeur augmente légèrement.
la source
NOTE IMPORTANTE POUR LES SYSTÈMES D'EXPLOITATION LEGACY (~ 1997-2007)
En général, les techniques des réponses données précédemment sont valables. CEPENDANT, il existe un cas particulier très important.
Pendant une période de quelques années - peut-être de 1997 à 2007 ou à peu près - les systèmes d'exploitation 32 bits étaient toujours la norme, mais des disques durs de plus de 2 Go étaient déjà utilisés. En conséquence, lorsque vous essayez de consommer tout l’espace libre en écrivant un fichier de zéros (ce qui devrait toujours être fait en tant que root, pour inclure l’espace libre privilégié de la racine, que personne ne peut toucher), vous pouvez voir:
Fichier trop large
au lieu de ce que vous attendez:
Pas d'espace disponible sur le périphérique.
Si cela se produit, vous avez probablement atteint une limite de taille de fichier de 2 Go. Cela était courant à l'époque car de nombreuses opérations sur les fichiers donnaient des résultats sous forme d'entiers 32 bits signés, de sorte que les valeurs négatives pouvaient générer des codes d'erreur. Cela signifiait effectivement que les résultats de compensation étaient limités à 2 ^ 31 octets sans mesures spéciales.
La solution de contournement est simple: continuez à créer des fichiers de mise à zéro différents et nommés de manière différente jusqu'à ce que le disque manque d'espace.
Si vous êtes un enseignant qui souhaite démontrer cette situation pour une classe, une image disque de 4 Go avec une ancienne copie de Red Hat Linux 7.0 suffit.
la source