AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1740543
Accepted
user2233709
user2233709
Asked: 2022-09-04 11:46:58 +0800 CST2022-09-04 11:46:58 +0800 CST 2022-09-04 11:46:58 +0800 CST

Sem TRIM/DISCARD com um SSD SATA conectado por meio de um adaptador USB habilitado para UASP?

  • 772

Acabei de comprar um SSD SATA e um adaptador USB-SATA. Escolhi um adaptador com suporte a UASP, pois achei que possibilitaria a execução de um comando TRIM/DISCARD, e acho importante para a vida útil do SSD.

Quando conecto o adaptador ao meu computador baseado em Debian, o kernel linux o detecta como esperado e habilita a comunicação com o protocolo UAS. Aqui está o que o kernel relata:

[23886.083296] usb 2-1: new SuperSpeed Gen 1 USB device number 6 using xhci_hcd
[23886.104497] usb 2-1: New USB device found, idVendor=174c, idProduct=55aa, bcdDevice= 1.00
[23886.104508] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[23886.104513] usb 2-1: Product: 00SSD1
[23886.104518] usb 2-1: Manufacturer: CT500MX5
[23886.104522] usb 2-1: SerialNumber: 12345678D9DA
[23886.110042] scsi host1: uas
[23886.110883] scsi 1:0:0:0: Direct-Access     CT500MX5 00SSD1           0    PQ: 0 ANSI: 6
[23886.111967] scsi 1:0:0:0: Attached scsi generic sg1 type 0
[23886.112698] sd 1:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[23886.112702] sd 1:0:0:0: [sdb] 4096-byte physical blocks
[23886.112841] sd 1:0:0:0: [sdb] Write Protect is off
[23886.112846] sd 1:0:0:0: [sdb] Mode Sense: 43 00 00 00
[23886.113013] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[23886.113224] sd 1:0:0:0: [sdb] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)

lsusbconfirma que o uasdriver é usado:

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/7p, 5000M
    |__ Port 1: Dev 6, If 0, Class=Mass Storage, Driver=uas, 5000M

Mas não consigo executar blkdiscardneste dispositivo:

# blkdiscard -f /dev/sdb
blkdiscard: /dev/sdb contains existing partition (dos).
blkdiscard: Operation forced, data will be lost!
blkdiscard: /dev/sdb: BLKDISCARD ioctl failed: Operation not supported

lsblkconfirma que o dispositivo de bloco não suporta descarte:

# lsblk -D /dev/sdb
NAME   DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sdb           0        0B       0B         0
`-sdb1        0        0B       0B         0

De onde vem o problema? Existe alguma esperança de que eu possa executar TRIM/DISCARD com esta configuração?

linux sata
  • 1 1 respostas
  • 134 Views

1 respostas

  • Voted
  1. Best Answer
    user2233709
    2022-09-07T15:33:04+08:002022-09-07T15:33:04+08:00

    Depois de alguma leitura (obrigado harrymc pelo link no comentário), acho que agora posso entender muito melhor o que está acontecendo.

    Em primeiro lugar, era ingênuo pensar que usar uma ponte USB-SATA habilitada para UASP com um SSD SATA recente (que suporta TRIMming) obviamente suportaria UNMAPping.

    A realidade é que uma ponte USB-SATA habilitada para UASP tem duas funções principais:

    • a primeira é a interface UAS, que é uma interface USB para encapsular comandos SCSI,
    • o segundo é um tradutor que converte comandos SCSI em comandos ATA.

    O conjunto de comandos definidos pelo protocolo SCSI é bastante grande e nem todos os dispositivos SCSI suportam todos os comandos. Portanto, existem vários comandos que podem ser usados ​​para UNMAP. Um tradutor SCSI-ATA pode suportar um deles, talvez vários, mas também pode não suportar nenhum. Neste último caso, não seria possível o bloco UNMAP do SSD. Felizmente, meu tradutor SCSI-ATA na minha ponte USB-SATA suporta o comando UNMAP.

    Devido à riqueza do conjunto de comandos SCSI, um driver precisa saber quais recursos são suportados por um dispositivo. Isso é feito com algumas páginas de informações, chamadas de páginas VPD (Vital Product Data), fornecidas pelo dispositivo ao driver. A “primeira” página é a página “Páginas VPD suportadas” que lista as páginas que o dispositivo suporta.

    Normalmente, o driver consulta a “primeira” página e, em seguida, consulta as páginas interessantes, se houver suporte. Quanto à capacidade de UNMAP, a página interessante é a página “Aprovisionamento de bloco lógico”.

    Com o linux, pode-se consultar as páginas “Supported VPD pages” e “Logical block provisioning” como esta:

    # sg_vpd -p sv /dev/sdb
    Supported VPD pages VPD page:
      Supported VPD pages [sv]
      Unit serial number [sn]
      Device identification [di]
      Block limits (SBC) [bl]
      Block device characteristics (SBC) [bdc]
      Logical block provisioning (SBC) [lbpv]
    # sg_vpd -p lbpv /dev/sdb
    Logical block provisioning VPD page (SBC):
      Unmap command supported (LBPU): 1
      Write same (16) with unmap bit supported (LBPWS): 0
      Write same (10) with unmap bit supported (LBPWS10): 0
      Logical block provisioning read zeros (LBPRZ): 0
      Anchored LBAs supported (ANC_SUP): 0
      Threshold exponent: 0 [threshold sets not supported]
      Descriptor present (DP): 0
      Minimum percentage: 0 [not reported]
      Provisioning type: 0 (not known or fully provisioned)
      Threshold percentage: 0 [percentages not supported]
    

    Aqui, pode-se ver que “my” SCSI-ATA tradutor suporta o comando unmap mas não suporta os comandos Write Same (16) ou Write Same (10) com unmap bit.

    Normalmente, o driver leria essas páginas e configuraria o dispositivo de acordo. Infelizmente, aparentemente há um histórico de dispositivos USB quebrados que travam ou bloqueiam quando algumas páginas VPD são consultadas. Assim, os desenvolvedores do kernel linux decidiram por padrão não consultar páginas VPD para dispositivos SCSI conectados por USB e não configurar recursos avançados como o UNMAP.

    A boa notícia é que ainda é possível configurar esses recursos a partir do userspace, usando o arquivo especial /sys/block/sdb/device/scsi_disk/1:0:0:0/provisioning_mode(o caminho pode variar). Quando conecto meu adaptador, ele lê “full”, mas posso configurá-lo como “unmap”, pois meu dispositivo suporta o comando unmap. Os outros valores suportados são “writesame_16”, “writesame_10”, “writesame_zero” e “disabled”.

    Pode-se ir além e configurar uma regra udev para configurar esse dispositivo automaticamente:

    ACTION=="add|change", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="55aa", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"
    

    (o idVendor, idProduct e provisioning_mode dependem da ponte USB-SATA)

    De qualquer forma, não posso recomendar isso, pois um erro pode bloquear seu dispositivo e até tentar ler as páginas do VPD com sg_vpdforça.

    Também não sei o quão útil é configurar a discard_max_bytesconfiguração, conforme sugerido pelo ótimo Habilitando TRIM em um SSD externo em um artigo Raspberry Pi .

    Algumas boas notícias novamente, há um patch que ignora a restrição para dispositivos SCSI conectados por USB em alguns casos em que parece seguro fazê-lo, e acho que deve fazê-lo para as pontes USB-SATA habilitadas para UASP mais recentes. Eu (ainda) não tentei; aparentemente não chegou ao linux 6.0-rc4; Não sei se há planos para solicitar sua fusão em um futuro próximo.

    • 0

relate perguntas

  • Como eu faria minha máquina Linux parecer que está executando o Windows?

  • Existe um equivalente a cd - para cp ou mv?

  • execute o contêiner do docker como root

  • Como ativar o sensor de impressão digital no domínio e no diretório ativo do Linux

  • Como alterar permanentemente Ctrl + C para Ctrl + K no CentOS 7?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve