fstrim 失败并显示“不支持丢弃操作”

vid*_*aju 4 ssd trim hard-drive

我运行的是 ubuntu 18.04。没有lvm或加密。我正在尝试在 USB 外壳 ADATA ED600 中的全新外部 sdd、西部数据 wd green 120 GB 上运行修剪,显示 hdparm 上可用的修剪。

但 fstrim 报告

须藤 fstrim -v /media/****/644f7d88-df12-4d0e-9423-bdf787d0fd78

fstrim: /media/****/644f7d88-df12-4d0e-9423-bdf787d0fd78:不支持丢弃操作

我不知道我还能做些什么来让 fstrim 运行。

hdparm 输出如下。

****:~$ sudo hdparm -I /dev/sdb

/dev/sdb:

ATA 设备,带有不可移动介质
    型号:WDC WDS120G2G0A-00JH30                  
    序列号:1821B3802831        
    固件版本:UE450000
    媒体序列号:   
    媒体制造商:
    传输:串行、ATA8-AST、SATA 1.0a、SATA II 扩展、SATA Rev 2.5、SATA Rev 2.6、SATA Rev 3.0
标准:
    使用:未知(次要修订代码 0x0110)
    支持:9 8 7 6 5
    可能使用:9
配置:
    逻辑最大电流
    气缸 16383 0
    头 16 0
    扇区/磁道 63 0
    --
    LBA用户可寻址扇区:234455040
    LBA48 用户可寻址扇区:234455040
    逻辑扇区大小:512 字节
    物理扇区大小:512 字节
    逻辑扇区 0 偏移量:0 字节
    M = 1024*1024 时的设备大小:114480 MBytes
    M = 1000*1000 时的设备大小:120040 MBytes (120 GB)
    缓存/缓冲区大小=未知
    外形尺寸:2.5 英寸
    标称介质旋转速率:固态设备
能力:
    LBA、IORDY(可禁用)
    队列深度:32
    待机定时器值:由标准指定,没有特定于设备的最小值
    R/W 多扇区传输:最大值 = 1 当前 = 1
    高级电源管理级别:禁用
    DMA:mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
         周期时间:min=120ns 建议=120ns
    PIO:pio0 pio1 pio2 pio3 pio4
         周期时间:无流量控制=120ns IORDY流量控制=120ns
命令/功能:
    已启用 支持:
       * 智能功能集
            安全模式功能集
       * 电源管理功能集
       * 写入缓存
       * 展望
       * 主机保护区功能集
       * WRITE_BUFFER命令
       * READ_BUFFER命令
       * 下载_微码
            高级电源管理功能集
            SET_MAX 安全扩展
       * 48位地址功能集
       * 设备配置覆盖功能集
       * 强制FLUSH_CACHE
       * FLUSH_CACHE_EXT
       * 智能错误记录
       * 智能自检
       * 通用日志记录功能集
       * 64 位全球通用名称
       * WRITE_UNCORRECTABLE_EXT命令
       * {READ,WRITE}_DMA_EXT_GPL 命令
       * 分段下载_微码
            未知 119[8]
       * Gen1 信号传输速度 (1.5Gb/s)
       * Gen2 信号传输速度 (3.0Gb/s)
       * Gen3 信号传输速度 (6.0Gb/s)
       * 本机命令队列 (NCQ)
       * 物理事件计数器
       * READ_LOG_DMA_EXT 等同于 READ_LOG_EXT
            设备发起的接口电源管理
            软件设置保存
            设备睡眠 (DEVSLP)
       * 消毒功能集
       * BLOCK_ERASE_EXT命令
       * 设置最大密码/解锁 DMA 命令
       * 写缓冲区 DMA 命令
       * 读取缓冲区 DMA 命令
       * 设备配置设置/识别 DMA 命令
       * 支持数据集管理TRIM(限制8块)
       * TRIM后确定性读取数据
安全:
    主密码修改代码 = 65534
        支持的
    未启用
    未锁定
    没有冻结
    未过期:安全计数
    不支持:增强擦除
    安全擦除单元 2 分钟。
逻辑单元 WWN 设备标识符:5001b448b60a0235
    NAA:5
    IEEE OUI:001b44
    唯一 ID:8b60a0235
设备睡眠:
    DEVSLP 退出超时 (DETO):50 ms(驱动器)
    最短 DEVSLP 有效时间 (MDAT):31 ms(驱动器)
校验和:正确

补充评论

最终让它发挥作用。

****:/media$ sudo hdparm --user-master u --security-set-pass 123456 /dev/sdb
安全密码:“123456”

/dev/sdb:
 发出 SECURITY_SET_PASS 命令,密码=“123456”,用户=用户,模式=高
****:/media$ sudo hdparm --user-master u --security-erase 123456 /dev/sdb
安全密码:“123456”

/dev/sdb:
 发出 SECURITY_ERASE 命令,密码=“123456”,用户=用户
SG_IO:检测数据错误/丢失,sb[]:70 00 01 00 00 00 00 0a 00 00 00 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

它等待大约 10 秒钟并返回,但没有进一步的信息。安全性“已启用”标志变为“未启用”。我假设这可以解决问题。

All*_*len 6

市场上有支持修剪的 USB 外壳。例如,如果您的外壳使用 JMICRON JMS583 芯片,则它支持修剪。我不知道你的是否这样做,但如果是:

以下是在受支持的情况下使其正常工作所需的步骤,但如果您想要更详细的演练,请参阅下面的源链接。

  1. 获取供应商和产品 IDlsusb
  2. /etc/udev/rules.d/50-usb-ssd-trim.rules使用以下内容进行创建,但更改供应商和产品 ID 以匹配步骤 1 中找到的内容:
ACTION=="add|change", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="0583", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"
Run Code Online (Sandbox Code Playgroud)
  1. 重新加载 udev 配置sudo service udev force-reload
  2. 确保未安装 USB 外壳,然后重新插入 USB 外壳。
  3. 您可以检查是否支持修剪lsblk --discard /dev/sda

请参阅:https ://www.glump.net/howto/desktop/enable-trim-on-an-external-ssd-on-linux