Trim и SSD с корпусом usb 3.0 не работают - UASP не поддерживается?

7

Я установил один SSD-диск (Micron C400-MTFDDAC128MAM) во внешний корпус USB 3.0. Теперь я хочу использовать этот диск в качестве второго диска в своем ноутбуке с Ubuntu 12.04. Диск работает, но я хочу использовать TRIM suppport, который не работает должным образом.

Проверьте поддержку отделки:

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

Диск был установлен со следующими параметрами:

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

Но когда я запускаю команду trim вручную, я получаю сообщение об ошибке:

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

Я использовал этот диск до того, как работал внутренний диск и обрезка, пожалуйста, помогите мне поблагодарить вас.

здесь некоторые сведения о 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

Как узнать, поддерживает ли запоминающее устройство большой емкости с использованием UASP (USB Attached SCSI Protocol), который должен поддерживать TRIM?

С уважением

Luckyrings     

задан Luckyrings 27.02.2013 в 22:32
источник

3 ответа

1

Ваши SSD отчеты для hdparm для поддержки TRIM (hdparm -I = Запросить информацию идентификации непосредственно с диска).

Однако TRIM управляется контроллером привода.

Весьма вероятно, что жесткий диск USB3 с жестким диском внешнего закрытия жесткого диска не поддерживает TRIM (большинство внешних контроллеров этого не делают).

В этом случае вы не получите никаких возможностей TRIM, даже если ваш SSD его поддерживает.

    
ответ дан thom 03.03.2013 в 23:11
источник
9

Это проблема с программным обеспечением, Linux, похоже, в настоящее время не поддерживает TRIM через USB. Проблема в том, что устройства хранения USB используют набор команд SCSI, тогда как накопитель SSD реализует набор команд ATA. Корпус USB должен обеспечивать переводчик между этими наборами команд. Операция, называемая TRIM в ATA, называется UNMAP в SCSI и DISCARD в ядре Linux. Когда Linux получает команду обрезать устройство, он ищет правильную команду для отправки на устройство. Поскольку устройства хранения USB выглядят как диски SCSI, Linux пытается использовать UNMAP или пару других возможных команд SCSI. В принципе, переводчик в USB-корпусе часто мог переводить запросы UNMAP на соответствующий ATA TRIM, хотя, вероятно, есть сложные случаи. На практике вложения не делают этого, и вместо этого они указывают, что устройство не поддерживает МНООНД. Тем не менее, во многих приложениях реализована команда SCSI для выдачи команд ATA непосредственно на устройство. Он называется транзитным транзитом ATA. Для этого есть стандартная команда, но вместо этого в некоторых приложениях есть собственная команда. Фактически, hdparm -I использует транзитную передачу ATA для получения информации с устройства. Такая же сквозная пересылка может использоваться для выдачи TRIM непосредственно на устройство, но драйвер Linux в настоящее время этого не делает. Это должно было бы обнаружить, что SCSI-диск на самом деле является транслятором SCSI-to-ATA, который поддерживает транзитную передачу ATA и использует сквозную передачу для DISCARD вместо собственных команд SCSI.

    
ответ дан Juho Östman 23.06.2014 в 18:07
источник
1

Если UNMAP неверно переведено вашим корпусом, вы можете по крайней мере вручную обрезать весь диск с помощью hdparm (это использует сквозную передачу протокола SCSI и отлично работает на док-станции hdd UASP). Но вам нужно вычислить сектора вручную, потому что hdparm поддерживает только обрезку 65535 секторов за раз. Я написал короткий скрипт для математики:

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

Сохраните его как sectors.py и выполните chmod +x sectors.py . Он дает список секторов, используемых с hdparm --trim-sector-ranges-stdin . Теперь выполните hdparm -I /dev/sdX (как root) и продержитесь за строку, которая выглядит так:

LBA48  user addressable sectors:   62533296

Это подсчет сектора устройств (как вы могли бы рассчитать это SSD емкостью 32 ГБ, который я часто использую для тестирования).

Скопируйте номер в следующую команду:

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

ПРЕДУПРЕЖДЕНИЕ: это приведет к стиранию ПОЛНОГО ПРИВОДА!

По завершении запустите sync и подождите несколько секунд. Теперь вы можете перечитать таблицу разделов с помощью hdparm -z /dev/sdX или просто включить питание устройства. Поздравляем, теперь у вас есть «свежий» SSD.

    
ответ дан Socke 01.10.2014 в 09:06
источник

Ознакомьтесь с другими вопросами по меткам