Invité Debian sur l'hôte Windows en utilisant discard/TRIM.
Ce n'est pas une réponse directe en soi, car j'aborde le problème, pas la question. Au lieu de compacter périodiquement l'image, cette solution utilise discard pour supprimer automatiquement les blocs inutilisés dans l'image disque VM de l'hôte.
Cette solution nécessite un système de fichiers invité qui supporte TRIM en continu. Le wiki Arch Linux a une liste des systèmes de fichiers supportant les opérations TRIM .
FDE et cryptoroot ne sont pas spécifiquement couverts, car il y a des problèmes de sécurité et aucune des autres solutions à cette question ne permettrait le compactage non plus. Le wiki d'Arch Linux contient des informations sur TRIM et les dispositifs de cryptage dm .
En théorie, cela fonctionnera pour tous les invités Linux sur les hôtes VBox utilisant le stockage VDI.
Configuration de l'hôte
Lorsque VBox est fermé et qu'aucune VM n'est en cours d'exécution, ajoutez le support de rejet à vos disques en définissant à la fois discard
et nonrotational
pour chaque disque dans le fichier de configuration de la VM. Pour l'instant, discard
n'est pas dans l'interface graphique, mais nonrotational
est exposé comme la case à cocher “Solid-state Drive”. (ref : vbox forums, discard support )
<AttachedDevice discard="true" nonrotational="true" type="HardDisk" [..other options..] >
Démarrez la VM, et vérifiez que le support TRIM est activé :
sudo hdparm -I /dev/sda | grep TRIM
Guest Configuration
Si LVM est utilisé, changez le paramètre discard dans /etc/lvm/lvm.conf
. (réf : wiki debian, exemple lvm.conf )
devices {
...
issue_discards = 1
}
Dans fstab, ajoutez l'option discard
aux systèmes de fichiers que vous souhaitez supprimer automatiquement (réf : wiki debian, exemple fstab )
UUID=8db6787f-1e82-42d8-b39f-8b7491a0523c / ext4 discard,errors=remount-ro 0 1
UUID=70bfca92-8454-4777-9d87-a7face32b7e7 /build ext4 discard,errors=remount-ro,noatime 0 1
Remontez les systèmes de fichiers pour qu'ils prennent leurs nouvelles options.
sudo mount -o remount /
sudo mount -o remount /build
Coupez manuellement les blocs libres maintenant avec fstrim
. fstrim
utilise le système de fichiers monté, et non le périphérique de bloc qui le supporte. Au lieu de définir un rejet continu dans fstab
, cela pourrait être fait sur un cron hebdomadaire. (Le cron hebdomadaire est recommandé pour les SSDs physiques qui peuvent avoir un support douteux pour TRIM, mais ce n'est pas pertinent ici puisque les SSDs sous-jacents sont gérés par l'OS hôte. voir : ssd trim warning ).
fstrim /
fstrim /build
À ce stade, la taille des systèmes de fichiers à l'intérieur de la VM et la taille des images de la VM devraient être assez proches en valeur.
Testé avec :
- Guest1 : Debian 8.7, noyau : linux 4.8 grsec à partir des rétroportages, système de fichiers : ext4
- Guest2 : Debian 9 RC2, noyau : linux 4.9, système de fichiers : ext4
- Hôte1 : VBox 5.1.14, Win7, image fmt : VDI
- Host2 : VBox 5.1.14, Win8.1, image fmt : VDI