USB 连接的 SSD 上的 TRIM 支持

USB 连接的 SSD 上的 TRIM 支持

我有一个通过 USB-SATA 适配器连接的 SSD(三星 860 EVO)(我尝试了两者这个这个) 到 ARM 计算机 (Odroid N2) 运行 Armbian(Linux 4.9.180)。

我使用 LVM 对其进行了分区(简单设置:单个 PV、VG 和 LV;无加密)。但是当我挂载它时,我在 dmesg 中收到此警告:

[87990.092895] EXT4-fs (dm-0): mounting with "discard" option, but the device does not support discard

并且 fstrim 失败:

# fstrim /var/lib/postgresql 
fstrim: /var/lib/postgresql: the discard operation is not supported

我检查了一下,hdpart 表明硬件应该支持 TRIM:

# hdparm -I /dev/sda | grep TRIM
       *    Data Set Management TRIM supported (limit 8 blocks)
       *    Deterministic read ZEROs after TRIM

lsusb 和 dmesg 确认这是一个 UAS/SCSI 设备:

# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 3: Dev 5, If 0, Class=Mass Storage, Driver=uas, 5000M
# dmesg
[...]
[87893.325796] scsi host0: uas
[87893.337014] scsi 0:0:0:0: Direct-Access     Samsung  SSD 860 EVO 500G 3202 PQ: 0 ANSI: 6
[87893.394341] sd 0:0:0:0: Attached scsi generic sg0 type 0
[87893.394928] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[87893.394938] sd 0:0:0:0: [sda] 4096-byte physical blocks
[87893.395718] sd 0:0:0:0: [sda] Write Protect is off
[87893.395729] sd 0:0:0:0: [sda] Mode Sense: 53 00 00 08
[87893.396153] sd 0:0:0:0: [sda] Disabling FUA
[87893.396163] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[87893.396322] xhci-hcd xhci-hcd.0.auto: ERROR Transfer event for disabled endpoint or incorrect stream ring
[87893.396331] xhci-hcd xhci-hcd.0.auto: @00000000cf6128b0 00000000 00000000 1b000000 03078001
[87893.396593] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[87893.401435]  sda: sda1
[87893.404218] sd 0:0:0:0: [sda] Attached SCSI disk
[87990.092895] EXT4-fs (dm-0): mounting with "discard" option, but the device does not support discard
[87990.092901] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: discard

但 lsblk 指示设备不支持 DISCARD/TRIM(“在 DISC-GRAN 和 DISC-MAX 中 [...] 非零值表示支持 TRIM”):

# lsblk --discard
NAME             DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda                     0        0B       0B         0
`-sda1                  0        0B       0B         0
  `-vg0-pg_data0        0        0B       0B         0

编辑:我尝试将磁盘+适配器连接到另一台计算机;结果相同(除了 dmesg 中没有错误)


我应该怎么做才能启用对 TRIM/DISCARD/fstrim 的支持?

答案1

我无法让这些特定的适配器传递 TRIM 命令,但我确实找到了解决方案。

首先,您需要一个使用 JMicron JMS578 芯片的适配器。我找到了两个:hardkernel 的 Bridge Board Plus(您需要“Plus”),或者这是我在亚马逊上找到的

我只尝试了后者(对我来说更便宜、更快捷),但是odroid 的论坛报告说,同样的程序也适用于前者

然后,您必须升级 JMS578 的固件(这些说明仅适用于 armhf 系统,但它可能适用于模拟器):

wget https://wiki.odroid.com/_media/odroid-xu4/software/jms578fwupdater.tgz
tar xzf jms578fwupdater.tgz
cd jms578fwupdater
./JMS578FwUpdate -d /dev/sda -f ./JMS578-Hardkenel-Release-v173.01.00.02-20190306.bin -b ./backup.bin

Hardkernel 的维基页面提供有关如何使用它以及其他功能的更多详细信息。

相关内容