fstrim
需要挂载Linux块设备,而且不是很冗长。blkdiscard
可以看出,但这也需要写操作。
我能否以某种方式判断块设备是否支持修剪/丢弃,而不实际尝试修剪/丢弃其上的某些内容?
答案1
您可以检查设备的最大丢弃尺寸,例如
$ cat /sys/block/X/queue/discard_max_hw_bytes
(X
酌情更换)。
如果这显示的值大于 0,该设备支持丢弃:
值
discard_max_hw_bytes
0 表示设备不支持丢弃功能。
最大值支持的discard_max_bytes
丢弃大小在同一目录中用 表示;这可以小于硬件支持的值以限制丢弃延迟(并且可以写入以更改限制):
虽然
discard_max_hw_bytes
是设备的硬件限制,但此设置是软件限制。某些设备在发出大量丢弃时会表现出较大的延迟,设置较低的值将使 Linux 发出较小的丢弃,并可能有助于减少由大量丢弃操作引起的延迟。
这适用于许多不同的块设备,而不仅仅是磁盘:循环设备、设备映射器设备等。
答案2
使用该hdparm
命令,您可以在磁盘设备上执行低级命令。
该选项hdparm -I /dev/sda
(或插入块设备而不是 sda)将查询驱动器的信息。有一个部分列出了驱动器支持的操作。
hdparm -I /dev/sda | grep TRIM
在 TRIM 支持驱动器上运行将输出如下内容:
* Data Set Management TRIM supported (limit 1 block)
输出中还有很多其他有用的信息,hdparm 命令非常有用。
请注意,这仅适用于 SATA 和某些 SCSI 设备,因为hdparm
其设计目的是在设备上运行 SATA 命令。
答案3
要检查设备是否支持修剪/丢弃,还可以使用 Linuxlsblk
实用程序。如果设备的丢弃限制(例如granularity
和max_sectors
)非零,则启用丢弃/修剪支持,例如,
$ lsblk -D
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda 0 512B 2G 0