web-dev-qa-db-fra.com

Prise en charge des commandes TRIM de VirtualBox et SSD

Je suis conscient du grand nombre de publications sur Internet qui disent que cela ne fonctionnerait pas et pourquoi, alors que je passais des jours à chercher les solutions il y a des mois, mais j'ai trouvé hier quelques astuces pour "activer le support des commandes TRIM" sur les machines invitées. . Je l'ai essayé et "ça a l'air" de fonctionner. Ce que j'aimerais savoir, c'est où est la prise ou est-ce que cela fonctionne vraiment comme il se doit.

Sources:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

Ma commande exacte attachant le fichier disque:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 - périphérique 0 --nonrotational sur --discard sur --medium "C:\chemin\vers\fichier.vdi" - type hdd

Ce qui a généré cette entrée dans le fichier * .vbox de la machine:

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
    <Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>

Pour être sûr de ne perdre aucune donnée, ce lecteur est le deuxième connecté à la machine. J'ai fait un test simple, comme copier un fichier sur le lecteur, le laisser, redémarrer la machine, l'éteindre, vérifier s'il est présent après le redémarrage, regarder l'utilisation du fichier disque dans le système d'exploitation hôte. Les résultats sont:

  • fichier disque joint sans options --nonrotational et --discard conserve sa taille (dynamique) même après la suppression de fichiers dans le système d'exploitation invité
  • un fichier disque joint avec les deux options mentionnées ci-dessus libère de l'espace après la suppression des données

Maintenant voici mes questions:
- à quoi sert exactement l'option --discard? ce n'est pas décrit dans le manuel de VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- Transforme-t-il vraiment TRIM vers le système d'exploitation hôte ou ressemble-t-il simplement?

25
qlf00n

--discard options spécifie que l'image vdisera réduite en réponse à la commande trimà partir du système d'exploitation invité. Les conditions suivantes doivent être remplies:

  • le format du disque doit être VDI
  • la surface dégagée doit faire au moins 1 Mo (taille)
  • [probablement] la zone dégagée doit couvrir un ou plusieurs blocs de 1 Mo (alignement)

Il est évident que le système d'exploitation invité doit être configuré pour émettre la commande trimname__, ce qui signifie généralement que le système d'exploitation invité est amené à penser que le disque est un disque SSD. Ext4 prend en charge -o discard mount flag; OSX nécessite probablement des paramètres supplémentaires, car par défaut uniquement cette commande est utilisée pour les disques SSD fournis par Apple . Windows doit détecter automatiquement et prendre en charge les disques SSD au moins dans les versions 7 et 8. Je ne sais pas si la détection se produit au moment de l'installation ou de l'exécution. Pilote Linux exFAT (avec la permission de Samsung) supporte la commande de suppression . Il n’est pas clair si l’implémentation Microsoft d’exFAT le prend en charge, même si le système de fichiers a été conçu pour Flash.

Vous pouvez également utiliser des méthodes ad hoc pour générer trimname__, par exemple. Linux Commande fstrimname__, composant du package util-linux.

Les solutions antérieures nécessitaient que l'utilisateur élimine les zones inutilisées, par ex. utilisez zerofreeet compactez le disque de manière explicite (je suppose que cela n’est possible que lorsque vm est hors ligne).

18
Dima Tisnek

Comme il s’agit du meilleur résultat obtenu sur Google, laissez-moi clarifier un peu les réponses, même s’il s’agit d’un ancien post. Il est en effet possible de faire fonctionner TRIM en ce sens que les blocs virtuels flash correspondants sur les blocs virtuels inutilisés du système de fichiers invité peuvent être marqués comme inutilisés pour une meilleure utilisation du flash. Les morceaux sont même déjà présents dans les autres réponses et commentaires.

Tout d'abord, l'hôte doit être configuré de sorte que l'espace libre soit géré par TRIM. Vous pouvez soit monter le système de fichiers avec -o rejeter, soit exécuter fstrim sur le système de fichiers régulièrement via cron. Je préfère ce dernier point, car la première option peut entraîner le blocage du système lors de la suppression de plusieurs fichiers à la fois.

Le format de disque utilisé doit être la taille dynamique VDI en écriture qarma.

Assurez-vous que nonrotational = "true" discard = "true" sont définis dans le fichier .vbox comme décrit sous OP.

Activez ensuite TRIM dans le système d'exploitation invité normalement. Sous Linux, je recommande à nouveau un travail cron exécutant fstrim. Ceci est probablement encore plus important ici, car le coût de TRIM sur l’image de disque virtuel est beaucoup plus élevé que sur un disque SSD physique, car les données sont déplacées afin de réduire la taille de l’image.

À présent, étant donné que l’image disque est régulièrement compactée, elle ne prendra que l’espace réel utilisé, plus une surcharge de 1 Mo de taille de bloc lorsque qarma écrit. Cela signifie à nouveau que l’espace libre sera TRIM sur le SSD hôte.

10
Jacob Larsen