I have a SanDisk Extreme USB Flash Drive
(http://www.sandisk.com/products/usb/drives/extreme/), which does NOT
support UASP so is running under "usb-storage".
According to `hdparm`, it seems to supports TRIM; and according to
`sg3_opcodes`, it seems to support ATA Pass-Through (12/16). However,
all TRIM/DISCARD related ioctl doesn't work with it at all.
So my question is, is TRIM/DISCARD possible at all in linux for usb
drives? If so, what are the requirements? If not, is it just not
implemented yet or an inherit problem of usb which cannot be fixed?
P.S. Although there's an SG_IO error, ATA Secure Erase seems to works
according to hexdump, and the drive is NOT bricked after many trials.
[tom@localhost ~]$ sudo blkdiscard /dev/sdc
blkdiscard: /dev/sdc: BLKDISCARD ioctl failed: Operation not supported
[tom@localhost ~]$ sudo blkdiscard -s /dev/sdc
blkdiscard: /dev/sdc: BLKSECDISCARD ioctl failed: Operation not supported
[tom@localhost ~]$ sudo mount /dev/sdc1 /mnt/
[tom@localhost ~]$ sudo fstrim /mnt/
fstrim: /mnt/: the discard operation is not supported
[tom@localhost ~]$ sudo hdparm -I /dev/sdc
/dev/sdc:
ATA device, with non-removable media
Model Number: SanDisk pSSD
Serial Number: 0a1e4434c
Firmware Revision: 3
Transport: Serial, ATA8-AST, SATA Rev 2.6
Standards:
Used: ATA-8-ACS revision 2d
Supported: 8 7 6 5
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 61282631
LBA48 user addressable sectors: 61282631
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
device size with M = 1024*1024: 29923 MBytes
device size with M = 1000*1000: 31376 MBytes (31 GB)
cache/buffer size = unknown
Form Factor: 1.8 inch
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 1 Current = 1
Advanced power management level: disabled
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
Write cache
Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
Advanced Power Management feature set
* 48-bit Address feature set
* Device Configuration Overlay feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
* WRITE_UNCORRECTABLE_EXT command
* Segmented DOWNLOAD_MICROCODE
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Software settings preservation
* DEVICE CONFIGURATION SET/IDENTIFY DMA commands
* Data Set Management TRIM supported (limit 8 blocks)
* Deterministic read ZEROs after TRIM
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5001b400e4a14c43
NAA : 5
IEEE OUI : 001b40
Unique ID : 0e4a14c43
Checksum: correct
[tom@localhost ~]$ sudo sg_opcodes /dev/sdc
SanDisk Extreme 0001
Peripheral device type: disk
Opcode Service CDB Name
(hex) action(h) size
-----------------------------------------------
00 6 Test Unit Ready
03 6 Request Sense
04 6 Format Unit
08 6 Read(6)
0a 6 Write(6)
12 6 Inquiry
15 6 Mode select(6)
1a 6 Mode sense(6)
1b 6 Start stop unit
1d 6 Send diagnostic
1e 6 Prevent allow medium removal
23 10 Read Format capacities
25 10 Read capacity(10)
28 10 Read(10)
2a 10 Write(10)
2f 10 Verify(10)
35 10 Synchronize cache(10)
3b 10 Write buffer
3c 10 Read buffer
43 10 Read TOC/PMA/ATIP
55 10 Mode select(10)
5a 10 Mode sense(10)
85 16 ATA pass-through(16)
88 16 Read(16)
8a 16 Write(16)
8f 16 Verify(16)
91 16 Synchronize cache(16)
9e 10 16 Read capacity(16)
a0 12 Report luns
a1 12 ATA pass-through(12)
a2 12 Security protocol in
a3 c 12 Report supported operation codes
a8 12 Read(12)
aa 12 Write(12)
af 12 Verify(12)
[tom@localhost ~]$ sudo hdparm --security-set-pass wipe /dev/sdc
security_password: "wipe"
/dev/sdc:
Issuing SECURITY_SET_PASS command, password="wipe", user=user, mode=high
[tom@localhost ~]$ sudo hdparm --security-erase wipe /dev/sdc
security_password: "wipe"
/dev/sdc:
Issuing SECURITY_ERASE command, password="wipe", user=user
SG_IO: bad/missing sense data, sb[]: f0 00 01 00 50 40 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
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html