Prise en charge de la commande TRIM de VirtualBox et SSD

27

Je suis conscient du grand nombre de publications sur Internet disant que cela ne fonctionnerait pas et pourquoi et j'ai vraiment passé des jours à chercher des solutions il y a des mois, mais j'ai trouvé hier quelques conseils pour "activer le support de commande TRIM" pour 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 cela fonctionne-t-il 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 en attachant le fichier disque:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --nonrotational on --discard on --medium "C: \ path \ to \ file.vdi" --type hdd

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 que je ne perdrais aucune donnée, ce lecteur était 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, arrêter la machine, vérifier s'il est là après le démarrage, regarder l'utilisation du fichier disque dans le système d'exploitation hôte. Les résultats sont:

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

Voici maintenant mes questions:
- que fait exactement l'option --discard? ce n'est pas décrit dans le manuel VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- est-ce vraiment en train de passer TRIM vers le système d'exploitation hôte ou est-ce que ça ressemble?

Krzysztof Szynter
la source
3
TRIM virtuel utilisé sur une machine virtuelle interfacée à un disque virtuel pour le bien-être virtuel ...
Fiasco Labs
Ramhound: À quoi sert donc la case à cocher "Disque SSD" dans le sous-menu de stockage? De plus, s'il existe une option comme --discard mentionnée dans le manuel, elle doit être détaillée. Je ne comprends absolument pas ce que vous dites: "il y a une raison pour laquelle ce n'est pas décrit". Si oui, pourquoi est-ce que c'est dans le manuel?
Krzysztof Szynter
11
Pour répondre à @Ramhound, mon blog est l'un des messages publiés par l'OP. Je ne sais pas quelle était sa raison, mais pour moi, j'avais une machine virtuelle dont j'avais besoin pour réduire physiquement la taille de fichier du disque alloué dynamiquement. C'était un disque qui contenait des données supprimées et j'essayais de les réduire à une taille plus petite - passer la commande TRIM a permis que cela se produise ... rétrécir mon disque virtuel de 12G à 7G. Au PO, j'espère que mon poste vous a aidé. Je suis arrivé ici en voyant le trafic entrant sur mon blog.
Jayson Rowe
Juste un avertissement pour toute personne intéressée par le sujet. L'implémentation du découpage sur l'émulateur d'image de disque VirtualBox est extrêmement boguée et risque de planter votre VM. Il y a un bogue de 2 ans ouvert pour cela. Il est possible de l'activer mais ne perdez pas de temps à l'essayer.
Dominik SMogor
Je pense que c'est le bug auquel
bobpaul

Réponses:

19

--discardoptions spécifie que l' vdiimage sera réduite en réponse à la trimcommande du système d'exploitation invité. Les exigences suivantes doivent être remplies:

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

De toute évidence, le système d'exploitation invité doit être configuré pour émettre une trimcommande, ce qui signifie généralement que le système d'exploitation invité est conçu pour penser que le disque est un SSD. Ext4 prend en charge l' -o discardindicateur de montage; OSX nécessite probablement des paramètres supplémentaires car, par défaut, seuls les SSD fournis par Apple reçoivent cette commande . Windows devrait détecter et prendre en charge automatiquement les SSD au moins dans les versions 7 et 8, je ne sais pas si la détection se produit lors de l'installation ou de l'exécution. Le pilote Linux exFAT (gracieuseté de Samsung) prend en charge la commande discard . Il n'est pas clair si l'implémentation Microsoft d'exFAT prend en charge la même chose, même si le système de fichiers a été conçu pour Flash au départ.

Il existe également des méthodes ad hoc à émettre trim, par exemple la fstrimcommande Linux , une partie du util-linuxpackage.

Les solutions antérieures exigeaient que l'utilisateur remette à zéro les zones inutilisées, par exemple en utilisant zerofreeet en compactant explicitement le disque (je suppose que cela n'est possible que lorsque vm est hors ligne).

Dima Tisnek
la source
1
En outre, l'utilisation d'une sorte de déduplication sur les btrfs (en particulier celle qui perce les trous pour les régions 0) et btrfs balanceaide vraiment à créer autant de régions ajustables que possible.
Omnifarious
12

Étant donné que c'est le meilleur résultat sur Google, permettez-moi de clarifier un peu les autres réponses, même s'il s'agit d'un ancien message. Il est en fait possible de faire fonctionner TRIM dans le sens où les blocs virtuels inutilisés sur le système de fichiers invité peuvent avoir les blocs physiques de flash correspondants marqués comme inutilisés pour une meilleure utilisation du flash. Les pièces sont même déjà présentes dans les autres réponses et commentaires.

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

Le format de disque utilisé doit être de taille dynamique VDI lors de l'écriture de 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é comme d'habitude. Sous Linux, je recommande à nouveau une tâche cron exécutant fstrim. Ceci est probablement encore plus important ici, car le coût de TRIM sur l'image du disque virtuel est beaucoup plus élevé que sur un SSD physique, car les données sont déplacées afin de rendre l'image plus petite.

Maintenant, puisque l'image disque est régulièrement compactée, elle ne prendra que l'espace réel utilisé, plus une surcharge de taille de bloc de 1 Mo lors de l'écriture de qarma. Cela signifie à nouveau que l'espace libre sera TRIM'ed sur le SSD hôte.

Jacob Larsen
la source
En fait, j'ai tué certaines de mes machines virtuelles à l'aide de la commande Trim.
davidbaumann
@davidbaumann Comment est-ce arrivé?
dvtan
En fait, après l'avoir activé, il a commencé à couper environ 20 Go. Exactement à ce moment, l'ordinateur portable s'est écrasé (j'ai eu quelques problèmes avec mon GPU ces jours-ci). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann
Commande pour le faire sur le premier disque existant (en supposant SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM