AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 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

通过支持 UASP 的 USB 适配器连接的 SATA SSD 没有 TRIM/DISCARD?

  • 772

我刚买了一个 SATA SSD 和一个 USB-SATA 适配器。我选择了支持 UASP 的适配器,因为我认为它可以运行 TRIM/DISCARD 命令,而且我认为这对 SSD 的使用寿命很重要。

当我将适配器连接到基于 Debian 的计算机时,Linux 内核会按预期检测到它并启用与 UAS 协议的通信。这是内核报告的内容:

[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)

lsusb确认使用了uas驱动程序:

/:  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

但我无法blkdiscard在此设备上运行:

# 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

lsblk确认块设备不支持丢弃:

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

问题出在哪里?有没有希望我可以使用此设置运行 TRIM/DISCARD?

linux sata
  • 1 1 个回答
  • 134 Views

1 个回答

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

    经过一番阅读(感谢 harrymc 评论中的链接),我想我现在可以更好地理解发生了什么。

    首先,认为使用支持 UASP 的 USB-SATA 桥接器和最近的 SATA SSD(支持 TRIMming)显然会支持 UNMAPping 是天真的。

    现实情况是,支持 UASP 的 USB-SATA 桥接器有两个主要功能:

    • 第一个是UAS接口,是封装SCSI命令的USB接口,
    • 第二个是将 SCSI 命令转换为 ATA 命令的转换器。

    SCSI 协议定义的命令集非常大,并不是所有的 SCSI 设备都支持所有命令。因此,有几个命令可用于 UNMAP。SCSI-ATA 转换器可能支持其中一个,也可能支持其中几个,但也可能不支持。在后一种情况下,无法取消映射 SSD 的块。幸运的是,我的 USB-SATA 桥接器中的 SCSI-ATA 转换器确实支持 UNMAP 命令。

    由于 SCSI 命令集的丰富性,驱动程序必须知道设备支持哪些功能。这是通过设备提供给驱动程序的一些信息页面完成的,称为 VPD(重要产品数据)页面。“第一个”页面是“支持的 VPD 页面”页面,其中列出了设备支持的页面。

    通常,驱动程序会查询“第一个”页面,然后查询感兴趣的页面(如果它们受支持)。至于 UNMAP 的能力,有趣的页面是“逻辑块配置”页面。

    使用 linux,可以像这样查询“支持的 VPD 页面”和“逻辑块配置”页面:

    # 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]
    

    在这里,可以看到“我的”SCSI-ATA 转换器支持取消映射命令,但不支持带取消映射位的写入相同 (16) 或写入相同 (10) 命令。

    通常,驱动程序会读取这些页面并相应地配置设备。不幸的是,当查询某些 VPD 页面时,显然有损坏的 USB 设备锁定或变砖的历史。因此,Linux 内核的开发人员默认决定不为 USB 连接的 SCSI 设备查询 VPD 页面,并且不设置诸如 UNMAP 之类的高级功能。

    好消息是仍然可以使用特殊文件从用户空间设置这些功能/sys/block/sdb/device/scsi_disk/1:0:0:0/provisioning_mode(路径可能会有所不同)。当我插入适配器时,它显示为“full”,但我可以将其设置为“unmap”,因为我的设备支持 unmap 命令。其他支持的值是“writesame_16”、“writesame_10”、“writesame_zero”和“disabled”。

    可以进一步设置 udev 规则来自动配置该设备:

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

    (idVendor、idProduct 和 provisioning_mode 取决于 USB-SATA 桥接器)

    无论如何,我不建议这样做,因为一个错误可能会使您的设备变砖,甚至可能会尝试阅读 VPD 页面sg_vpd。

    我也不知道设置设置有多大用处discard_max_bytes,正如Raspberry Pi文章上的在外部 SSD 上启用 TRIM所建议的那样。

    又是一个好消息,有一个补丁可以绕过对连接 USB 的 SCSI 设备的限制,在某些情况下这样做看起来是安全的,我想它应该适用于最新的支持 UASP 的 USB-SATA 桥接器。我还没有(还)尝试过;它显然还没有进入 linux 6.0-rc4;我不知道在不久的将来是否有计划要求其合并。

    • 0

相关问题

  • 如何让我的 Linux 机器看起来像是在运行 Windows?

  • 对于 cp 或 mv,是否有等同于 cd - 的东西?

  • 以 root 身份运行 docker 容器

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 如何在CentOS 7 中将Ctrl+C 永久更改为Ctrl+K?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve