Trimmen und SSD mit USB 3.0-Gehäuse funktioniert nicht - UASP wird nicht unterstützt?

7

Ich habe eine SSD-Festplatte (Micron C400-MTFDDAC128MAM) in einem externen USB 3.0-Gehäuse installiert. Jetzt möchte ich diese Festplatte als zweite Festplatte in meinem Laptop mit Ubuntu 12.04 verwenden. Die Festplatte funktioniert, aber ich möchte den TRIM-Support verwenden, der nicht wie erwartet funktioniert.

Auf Trimmunterstützung prüfen:

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

Die Festplatte wurde mit folgenden Optionen bereitgestellt:

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

Wenn ich den Befehl trim jedoch manuell ausführe, wird folgende Fehlermeldung angezeigt:

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

Ich habe diese Festplatte zuvor als interne Festplatte verwendet und das Trimmen hat funktioniert. Bitte helfen Sie mir, danke.

hier einige USB-Details:

[ 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

Wie kann man herausfinden, ob das Massenspeichergerät das UASP (USB Attached SCSI Protocol) verwendet, das TRIM unterstützen soll?

Mit freundlichen Grüßen

Glücksbringer

Glücksbringer
quelle

Antworten:

1

Ihre SSD meldet sich bei hdparm, um TRIM zu unterstützen (hdparm -I = Identifikationsinformationen direkt vom Laufwerk anfordern).

TRIM wird jedoch von der Antriebssteuerung gesteuert.

Es ist sehr wahrscheinlich, dass der USB3-Festplattencontroller des externen Festplattenverschlusses TRIM nicht unterstützt (die meisten externen Controller nicht).

In diesem Fall erhalten Sie keine TRIM-Funktionen, selbst wenn Ihre SSD dies unterstützt.

thom
quelle
USB3 hat ein neues Protokoll eingeführt: UASP (USB Attached SCSI Protocol) für die Kommunikation mit externen Massenspeichergeräten über USB. Das alte Protokoll BOT (Bulk Only Transport) unterstützt TRIM nicht. UASP unterstützt TRIM und NCQ. Wie kann ich feststellen, dass das Betriebssystem UASP mit dem externen Laufwerk verwendet?
Luckyrings
@Luckyrings Bitte stellen Sie eine neue Frage und verlinken Sie auf diese Frage, wenn dies zur Bereitstellung des Kontextes beiträgt.
Uri Herrera
@Luckyrings Hier sind Tests mehrerer UASP-Gehäuse für TRIM. Fast keine unterstützt TRIM außer denen, die einen bestimmten Chipsatz verwenden. translate.google.co.in/translate?hl=de&sl=zh-CN&u=http:/…
11

Dies ist ein Softwareproblem. Linux scheint TRIM derzeit nicht über USB zu unterstützen. Das Problem ist, dass USB-Speichergeräte den SCSI-Befehlssatz verwenden, während das SSD-Laufwerk den ATA-Befehlssatz implementiert. Das USB-Gehäuse muss einen Übersetzer zwischen diesen Befehlssätzen bereitstellen. Die Operation TRIM in ATA heißt UNMAP in SCSI und DISCARD im Linux-Kernel. Wenn Linux den Befehl zum Trimmen eines Geräts erhält, sucht es nach dem richtigen Befehl, der an das Gerät gesendet werden soll. Da USB-Speichergeräte wie SCSI-Festplatten aussehen, versucht Linux, UNMAP oder einige andere mögliche SCSI-Befehle zu verwenden. Im Prinzip kann der Übersetzer im USB-Gehäuse häufig UNMAP-Anforderungen in das entsprechende ATA TRIM übersetzen, obwohl es wahrscheinlich schwierige Fälle gibt. In der Praxis tun die Gehäuse dies nicht, und sie zeigen stattdessen an, dass das Gerät UNMAP nicht unterstützt. Viele Gehäuse implementieren jedoch einen SCSI-Befehl, um ATA-Befehle direkt an das Gerät zu senden. Es heißt ATA Passthrough. Es gibt einen Standardbefehl, um dies zu tun, aber einige Gehäuse haben stattdessen einen proprietären Befehl. Eigentlich,hdparm -IVerwendet ATA-Passthrough, um Informationen vom Gerät abzurufen. Das gleiche Passthrough kann verwendet werden, um TRIMs direkt an das Gerät auszugeben, aber der Linux-Treiber tut dies derzeit nicht. Es müsste erkannt werden, dass eine SCSI-Festplatte tatsächlich ein SCSI-zu-ATA-Übersetzer ist, der ATA-Passthrough unterstützt, und das Passthrough für DISCARDs anstelle der nativen SCSI-Befehle verwenden.

Juho Östman
quelle
1

Wenn UNMAP von Ihrem Gehäuse nicht korrekt übersetzt wird, können Sie das gesamte Laufwerk zumindest manuell mit hdparm trimmen (dies verwendet das ata-Passthrough des SCSI-Protokolls und funktioniert auf meinem UASP-HDD-Dock einwandfrei). Sie müssen die Sektoren jedoch manuell berechnen, da hdparm jeweils nur das Trimmen von 65535 Sektoren unterstützt. Ich habe ein kurzes Skript geschrieben, um zu rechnen:

#!/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

Speichern Sie es als sectors.pyund tun Sie es chmod +x sectors.py. Es ergibt eine Liste von Sektorblöcken, mit denen verwendet werden kann hdparm --trim-sector-ranges-stdin. Führen Sie nun hdparm -I /dev/sdX(als root) aus und halten Sie Ausschau nach einer Zeile, die wie folgt aussieht:

LBA48  user addressable sectors:   62533296

Dies ist die Anzahl der Gerätesektoren (wie Sie berechnen können, handelt es sich um eine ~ 32-GB-SSD, die ich häufig zum Testen verwende).

Kopieren Sie die Nummer in den folgenden Befehl:

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

WARNUNG: Dadurch wird der GANZE ANTRIEB gelöscht!

Nachdem es fertig ist, laufen Sie syncund warten Sie einige Sekunden. Jetzt können Sie die Partitionstabelle mit hdparm -z /dev/sdXdem Gerät erneut lesen oder einfach aus- und wieder einschalten. Herzlichen Glückwunsch, Sie haben jetzt eine "frische" SSD.

Socke
quelle
Es gibt einen besseren Weg, dies zu tun. Es ist als Teil der Sicherheitsfunktion des Laufwerks implementiert, die als "Secure Erase" bezeichnet wird. hdparmwird mit --security-eraseOption verwendet, nachdem ein Passwort mit festgelegt wurde --security-set-pass. Nach dem Löschen wird das gesamte Laufwerk im Wesentlichen getrimmt und auf Null gesetzt. Dies geschieht alles im Flash-Controller des Laufwerks. Ich habe einen detaillierten Blog-Beitrag geschrieben, in dem die Schritte beschrieben werden.
Mansour
@ Mansour löscht --security-erase Ihre vorhandenen Daten?
Krypton
Egal, ich habe die Antwort bekommen. Es löscht alle Ihre Daten. Achtung!
Krypton