如何判断 Linux 块设备是否可修剪?

如何判断 Linux 块设备是否可修剪?

fstrim需要挂载Linux块设备,而且不是很冗长。blkdiscard可以看出,但这也需要写操作。

我能否以某种方式判断块设备是否支持修剪/丢弃,而不实际尝试修剪/丢弃其上的某些内容?

答案1

您可以检查设备的最大丢弃尺寸,例如

$ cat /sys/block/X/queue/discard_max_hw_bytes

X酌情更换)。

如果这显示的值大于 0,该设备支持丢弃:

discard_max_hw_bytes0 表示设备不支持丢弃功能。

最大值支持的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实用程序。如果设备的丢弃限制(例如granularitymax_sectors)非零,则启用丢弃/修剪支持,例如,

$ lsblk -D
NAME      DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda              0      512B       2G         0

相关内容