web-dev-qa-db-fra.com

Trim et SSD avec la norme USB 3.0 Le boîtier ne fonctionne pas - UASP n'est pas pris en charge?

J'ai installé un disque SSD (Micron C400-MTFDDAC128MAM) dans un boîtier USB 3.0 externe. Maintenant, je veux utiliser ce disque comme deuxième disque de mon ordinateur portable avec Ubuntu 12.04. Le disque fonctionne, mais je veux utiliser TRIM suppport, qui ne fonctionne pas comme prévu.

Vérifier le support du trim:

user@server:~$ Sudo hdparm -I /dev/sdc | grep -i TRIM
       *    Data Set Management TRIM supported (limit 8 blocks)
       *    Deterministic read data after TRIM

Le disque a été monté avec les options suivantes:

/dev/sdc1 on /media/MICRON type ext4 (rw,nosuid,nodev,uhelper=udisks)

Mais lorsque j'exécute manuellement la commande trim, j'obtiens une erreur:

user@server:~$ Sudo fstrim -v /media/MICRON/
fstrim: /media/MICRON/: FITRIM ioctl failed: Operation not permitted

J'ai déjà utilisé ce disque en tant que disque interne et le trim fonctionnait. Aidez-moi, merci.

voici quelques détails USB:

[ 1039.248050] usb 4-1: new SuperSpeed USB device number 4 using xhci_hcd
[ 1039.265597] scsi8 : usb-storage 4-1:1.0
[ 1041.547879] scsi 8:0:0:0: Direct-Access     C400-MTF DDAC128MAM       0509 PQ: 0 ANSI: 5
[ 1041.549134] sd 8:0:0:0: Attached scsi generic sg2 type 0
[ 1041.550511] sd 8:0:0:0: [sdc] 250069680 512-byte logical blocks: (128 GB/119 GiB)
[ 1041.550778] sd 8:0:0:0: [sdc] Write Protect is off
[ 1041.550785] sd 8:0:0:0: [sdc] Mode Sense: 23 00 00 00
[ 1041.552520] sd 8:0:0:0: [sdc] No Caching mode page present
[ 1041.552528] sd 8:0:0:0: [sdc] Assuming drive cache: write through
[ 1041.554029] sd 8:0:0:0: [sdc] No Caching mode page present
[ 1041.554035] sd 8:0:0:0: [sdc] Assuming drive cache: write through
[ 1041.678373]  sdc: sdc1
[ 1041.679982] sd 8:0:0:0: [sdc] No Caching mode page present
[ 1041.679991] sd 8:0:0:0: [sdc] Assuming drive cache: write through
[ 1041.679997] sd 8:0:0:0: [sdc] Attached SCSI disk

Comment savoir si le périphérique de stockage de masse utilisant le protocole UASP (USB Attached SCSI Protocol) doit prendre en charge TRIM?

Sincères amitiés

Luckyrings

7
Luckyrings

Votre SSD relève de hdparm pour prendre en charge TRIM (hdparm -I = Demander des informations d’identification directement à partir du lecteur).

Cependant, TRIM est contrôlé par le variateur de vitesse.

Il est fort probable que le contrôleur de disque dur USB3 de la fermeture du disque dur externe ne supporte pas TRIM (la plupart des contrôleurs externes ne le font pas).

Dans ce cas, vous n’obtiendrez aucune fonctionnalité TRIM, même si votre disque SSD le prend en charge.

1
thom

Ceci est un problème logiciel, Linux ne semble pas prendre en charge actuellement TRIM via USB. Le problème est que les périphériques de stockage USB utilisent le jeu de commandes SCSI, alors que le lecteur SSD implémente le jeu de commandes ATA. Le boîtier USB doit fournir un traducteur entre ces jeux de commandes. L'opération appelée TRIM dans ATA s'appelle UNMAP dans SCSI et DISCARD dans le noyau Linux. Lorsque Linux reçoit la commande pour couper un périphérique, il recherche la commande correcte à envoyer au périphérique. Comme les périphériques de stockage USB ressemblent à des disques SCSI, Linux essaie d'utiliser UNMAP ou quelques autres commandes SCSI possibles. En principe, le traducteur situé dans le boîtier USB peut souvent traduire les demandes UNMAP dans la TRIM ATA correspondante, bien qu'il existe probablement des cas difficiles. En pratique, les boîtiers ne le font pas et indiquent plutôt que le périphérique ne prend pas en charge UNMAP. Cependant, de nombreux boîtiers implémentent une commande SCSI pour émettre des commandes ATA directement au périphérique. C'est ce qu'on appelle ATA Passthrough. Il existe une commande standard pour cela, mais certaines enceintes ont à la place une commande propriétaire. En fait, hdparm -I utilise le relais ATA pour obtenir des informations à partir du périphérique. Le même processus peut être utilisé pour émettre des TRIM directement sur le périphérique, mais le pilote Linux ne le fait pas pour le moment. Il devrait détecter qu'un disque SCSI est en réalité un traducteur SCSI vers ATA qui prend en charge le relais ATA et utiliser le relais pour DISCARD au lieu des commandes SCSI natives.

11
Juho Östman

Si UNMAP n'est pas traduit correctement par votre boîtier, vous pouvez au moins couper manuellement le disque entier à l'aide de hdparm (ceci utilise l'atta-passthrough du protocole SCSI et fonctionne correctement sur mon dock UASP hdd). Mais vous devez calculer les secteurs manuellement car hdparm ne prend en charge que le découpage de 65535 secteurs à la fois. J'ai écrit un court script pour faire le calcul:

#!/usr/bin/env python3

import sys

remaining = int(sys.argv[1])
i = 0

while remaining > 0:
    add = min(65535, remaining)
    print("%d:%d" % (i, add))
    remaining -= add
    i += add

Enregistrez-le sous le nom sectors.py et faites chmod +x sectors.py. Cela donne une liste de blocs de secteurs utilisables avec hdparm --trim-sector-ranges-stdin. Maintenant, exécutez hdparm -I /dev/sdX (en tant que root) et attendez une ligne qui ressemble à:

LBA48  user addressable sectors:   62533296

Il s’agit du nombre de secteurs de périphériques (comme vous pouvez le calculer, c’est un disque SSD de 32 Go que j’utilise fréquemment pour les tests).

Copiez le numéro dans la commande suivante:

./sectors.py SECTOR_COUNT | Sudo hdparm --trim-sector-ranges-stdin --please-destroy-my-drive /dev/sdX

AVERTISSEMENT: Ceci effacera le lecteur entier!

Une fois terminé, lancez sync et attendez quelques secondes. Vous pouvez maintenant relire la table de partition avec hdparm -z /dev/sdX ou simplement redémarrer le périphérique. Félicitations, vous avez maintenant un SSD "frais".

1
Socke