Aparar e SSD com o gabinete usb 3.0 não funciona - o UASP não é suportado?

7

Instalei um disco SSD (Micron C400-MTFDDAC128MAM) em um gabinete externo usb 3.0. Agora eu quero usar este disco como segundo disco no meu laptop com o Ubuntu 12.04. O disco está funcionando, mas eu quero usar o TRIM suppport, que não está funcionando como esperado.

Verifique se há suporte à compensação:

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

O disco foi montado com as seguintes opções:

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

Mas quando eu executo o comando trim manualmente, recebo um erro:

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

Eu usei este disco antes, como um disco interno e aparar estava funcionando, por favor me ajude obrigado.

aqui alguns detalhes do 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

Como descobrir se o dispositivo de armazenamento em massa usando o protocolo UASP (USB Attached SCSI Protocol) deve suportar o TRIM?

Atenciosamente

Luckyrings

    
por Luckyrings 27.02.2013 / 23:32

3 respostas

1

O seu SSD reporta ao hdparm para suportar o TRIM (hdparm -I = Solicitar informações de identificação diretamente da unidade).

TRIM no entanto, é controlado pelo controlador de unidade.

É bastante provável que o controlador de disco rígido USB3 do fechamento do HDD externo não suporte TRIM (a maioria dos controladores externos não o faz).

Nesse caso, você não terá nenhum recurso TRIM, mesmo que seu SSD suporte-o.

    
por thom 04.03.2013 / 00:11
9

Este é um problema de software, o Linux não parece suportar atualmente TRIM através de USB. O problema é que os dispositivos de armazenamento USB utilizam o conjunto de comandos SCSI, enquanto a unidade SSD implementa o conjunto de comandos ATA. O gabinete USB deve fornecer um tradutor entre esses conjuntos de comandos. A operação chamada TRIM no ATA é chamada UNMAP em SCSI e DISCARD no kernel do Linux. Quando o Linux recebe o comando para aparar um dispositivo, ele procura o comando correto para ser enviado ao dispositivo. Como dispositivos de armazenamento USB se parecem com discos SCSI, o Linux tenta usar o UNMAP ou um par de outros comandos SCSI possíveis. Em princípio, o tradutor no compartimento USB poderia muitas vezes traduzir solicitações UNMAP para o ATA TRIM correspondente, embora provavelmente existam casos complicados. Na prática, os gabinetes não fazem isso e, em vez disso, indicam que o dispositivo não suporta o UNMAP. No entanto, muitos gabinetes implementam um comando SCSI para emitir comandos ATA diretamente para o dispositivo. É chamado de passagem ATA. Existe um comando padrão para fazer isso, mas alguns gabinetes possuem um comando proprietário. De fato, hdparm -I usa o repasse ATA para obter informações do dispositivo. O mesmo repasse pode ser usado para emitir TRIMs diretamente para o dispositivo, mas o driver do Linux não faz isso atualmente. Ele teria que detectar que um disco SCSI é na verdade um conversor SCSI-para-ATA que ofereça suporte a passagem ATA e use o repasse para DISCARDs em vez dos comandos SCSI nativos.

    
por Juho Östman 23.06.2014 / 20:07
1

Se o UNMAP não for traduzido corretamente pelo seu gabinete, você pode pelo menos aparar manualmente a unidade inteira usando o hdparm (isso usa o pass-passthrough do protocolo SCSI e funciona bem no meu dock do hdd UASP). Mas você tem que calcular os setores manualmente porque o hdparm suporta apenas o corte de 65535 setores por vez. Eu escrevi um pequeno script para fazer as contas:

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

Salve como sectors.py e faça chmod +x sectors.py . Ele produz uma lista de blocos de setores utilizáveis com hdparm --trim-sector-ranges-stdin . Agora execute hdparm -I /dev/sdX (como root) e segure por uma linha que se pareça com:

LBA48  user addressable sectors:   62533296

Esta é a contagem do setor de dispositivos (como você pode calcular, este é um SSD de ~ 32 GB que eu uso com frequência para testes).

Copie o número para o seguinte comando:

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

AVISO: Isto irá apagar o DRIVE INTEIRO!

Depois que terminar, execute sync e aguarde alguns segundos. Agora você pode reler a tabela de partições com hdparm -z /dev/sdX ou simplesmente ligar e desligar o dispositivo. Parabéns, você tem um SSD "novo" agora.

    
por Socke 01.10.2014 / 11:06

Tags