Invité Debian sur un hôte Windows utilisant discard/TRIM.
Ceci n'est pas une réponse directe en soi, car je traite le problème, pas la question. Au lieu de compacter périodiquement l'image, cette solution utilise le discard pour supprimer automatiquement les blocs inutilisés dans l'image disque de la machine virtuelle de l'hôte.
Cette solution nécessite un système de fichiers invité prenant en charge le TRIM continu. Le wiki Arch Linux propose une liste des systèmes de fichiers prenant en charge les opérations TRIM.
La FDE et cryptoroot ne sont pas couverts spécifiquement, car il y a des préoccupations en matière de sécurité et aucune des autres solutions à cette question ne permettrait non plus de compacter. Le wiki Arch Linux fournit des informations sur TRIM et les dispositifs dm-crypt.
En théorie, cela fonctionnera pour tous les invités Linux sur des hôtes VBox utilisant un stockage VDI.
Configuration de l'hôte
Après avoir quitté VBox et sans VM en cours d'exécution, ajoutez la prise en charge du discard à vos disques en définissant à la fois discard
et nonrotational
pour chaque disque dans le fichier de configuration de la VM. Pour le moment, discard
n'est pas dans l'interface graphique, mais nonrotational
est exposé sous forme de case à cocher "Disque à semi-conducteurs". (source : forums de vbox, prise en charge du discard)
Démarrez la VM et vérifiez que le support TRIM est activé :
sudo hdparm -I /dev/sda | grep TRIM
Configuration de l'invité
Si LVM est utilisé, modifiez le paramètre discard dans le fichier /etc/lvm/lvm.conf
. (source : wiki debian, exemple de lvm.conf)
devices {
...
issue_discards = 1
}
Dans fstab, ajoutez l'option discard
aux systèmes de fichiers que vous souhaitez activer l'auto-discard (source : wiki debian, exemple de 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 en compte leurs nouvelles options.
sudo mount -o remount /
sudo mount -o remount /build
Traitez manuellement les blocs libres maintenant avec fstrim
. fstrim
utilise le système de fichiers monté, pas le périphérique de blocage le sauvegardant. Au lieu de définir un discard continu dans fstab
, cela pourrait être fait sur un cron hebdomadaire. (Le cron hebdomadaire est recommandé pour les SSD physiques qui peuvent avoir un support TRIM douteux, mais ce n'est pas pertinent ici puisque les SSD sous-jacents sont gérés par le système d'exploitation hôte. voir : avertissement de trim ssd).
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 :
- Invité1 : Debian 8.7, noyau : linux 4.8 grsec de backports, système de fichiers : ext4
- Invité2 : Debian 9 RC2, noyau : linux 4.9, système de fichiers : ext4
- Hôte1 : VBox 5.1.14, Win7, format d'image : VDI
- Hôte2 : VBox 5.1.14, Win8.1, format d'image : VDI