Est-il possible de faire fonctionner SSD TRIM (discard) sur ext4 + LVM + RAID logiciel sous Linux?


18

Nous utilisons RAID1 + 0 avec md sous Linux (actuellement 2.6.37) pour créer un périphérique md, puis utilisons LVM pour fournir une gestion de volume au-dessus du périphérique, puis utilisons ext4 comme système de fichiers sur les groupes de volumes LVM.

Avec des SSD comme lecteurs, nous aimerions voir les commandes TRIM se propager à travers les couches (ext4 -> LVM -> md -> SSD) vers les périphériques.

Il semble que les noyaux 2.6.3x récents aient ajouté beaucoup de nouveaux supports TRIM liés aux SSD, y compris une couverture beaucoup plus étendue des scénarios de Device Mapper, mais nous n'arrivons toujours pas à le faire fonctionner correctement.

Est-ce encore possible? Si c'est le cas, comment? Sinon, des progrès sont-ils réalisés?


Voir serverfault.com/a/229486/67675 mis à jour :)
poige

Réponses:


7

Pas possible, car Linux Soft RAID ne le supporte pas (encore?).

UPD. : Merci à Wodin de m'avoir prévenu - selon lkml.org/lkml/2012/3/11/261 cette fonctionnalité a été ajoutée récemment proposée . proposé ! = accepté , cependant.


Vous pouvez toujours moins cette réponse, mais cela ne rendrait pas le support LSR TRIM :)
poige

3
C'est le cas maintenant. lkml.org/lkml/2012/3/11/261
Wodin

@Wodin, je ne trouve pas les changements proposés même en 3.5. Ils ne semblent pas être acceptés.
poige

14

Depuis le 2.6.37, il devrait être présent ( source ) . Le noyau ne le fait pas en arrière-plan, le processus de suppression des blocs est actuellement conçu pour être exécuté à la demande (script cron!). Le support Dm-crypt n'existe pas encore.

Le 13 janvier 2011, un correctif a été fusionné dans dm-raid1.c qui se lit comme suit:

dm raid1: support discard

Enable discard support in the DM mirror target.
Also change an existing use of 'bvec' to 'addr' in the union.

Je ne suis pas à 100%, mais je pense que c'est la fenêtre de fusion pour 2.6.38.

EXT4 a ajouté un support il y a quelque temps, tout comme LVM. RAID est la seule clé qui n'est pas prise en charge. Au 13/01/2011, il semble que le support ait été ajouté. Recherchez-le dans 2.6.38 ou peut-être 2.6.39.


Le temps a passé et le support TRIM est définitivement inclus dans le noyau 3.7 . Le commit pour RAID10 se lit comme suit :

Cela fait que md raid 10 prend en charge TRIM. Si un disque prend en charge la suppression et un autre non, ou si l'un a discard_zero_data et un autre non, il peut y avoir des incohérences entre les données de ces disques. Mais cela ne devrait pas avoir d'importance, les données rejetées sont inutiles. Cela ajoutera cependant une copie supplémentaire lors de la reconstruction.


Vu ce fil, et les commits associés, mais comme je l'ai dit dans la question - cela signifie-t-il qu'il passera correctement non seulement par LVM (Device Mapper) mais aussi md (Software RAID)?
Don MacAskill

1
Cela semble prometteur, mais je crois comprendre que dmraid est principalement utilisé pour les contrôleurs RAID matériels dits «fakeRAID». Ce dont je parle, c'est d'une ou plusieurs baies mdadm RAID-1 (+0) uniquement logicielles avec LVM en haut. AFAIK, cette configuration ne bénéficie pas de la nouvelle capacité de dmraid à gérer les rejets. Droite?
Don MacAskill

1
@DonMacAskill Le fichier 'raid1.c' n'a aucun commit référençant TRIM, FITRIM ou 'dispose'. Il semble donc que mdadm --créer le support RAID n'est pas encore là après tout.
sysadmin1138

@ sysadmin1138 Je pense que vous voulez dire discard, c'est ce qu'on appelle dans le noyau Linux. Et ce patch semble faire référence à la suppression.
Michael Hampton

1

Mdtrim peut avoir besoin de plus de travail:

Cyberax-mdtrim-0a40e8d# ./mdtrim.py -m /dev/md4 -s /home
Scratch directory is /home, trimmer file size is 0 GB 790 MB
Found slave sdc2 on /dev/sdc with MD offset 0 and partition offset 249856
Creating trimmer file
252,2: device not found in /dev
Traceback (most recent call last):
  File "./mdtrim.py", line 120, in <module>
    if lines[2].find("assuming %d byte sectors" % sector_size) == -1:
IndexError: list index out of range

0

Vous pouvez utiliser mon script MDTRIM ( https://github.com/Cyberax/mdtrim/ ) pour TRIM l'espace vide sur les RAID ext4 / 3 de niveau 1. Nous le démarrons périodiquement à partir de cron et cela fonctionne très bien pour nous.

L'ajout de la prise en charge d'autres niveaux RAID est possible, mais je n'ai pas le temps (ou le besoin) pour cela.


0

Comme suggéré ici, vous pouvez utiliser

lsblk -D

afin de vérifier si vos blockdevices passent par les commandes discard.

Notez également que la section devices de lvm.conf contient une option issue_discards. Voir

man 5 lvm.conf

pour plus d'informations.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.