415 字
2 分钟
Linux下的SSD Trim
TRIM
使用lsblk -D命令来查看trim启用情况
如果DISC-GRAN非0, 代表这个设备支持TRIM
如果DISC-MAX非0, 代表这个设备启用了TRIM
DISC-GRAN DISC-MAX (1代表非0值)
0 0 不支持TRIM
1 0 支持TRIM, 但没启用
1 1 支持且启用TRIM
对于外置移动硬盘里的SSD, 需要通过如下命令查看Trim情况:
sudo apt install sg3-utils# 查看输出中的: Logical block provisioning: lbpme=0, lbprz=0, 关键是lbpme=0, 代表内核默认不会discardsudo sg_readcap -l /dev/sda
# 查看输出Logical block provisioning VPD page (SBC)部分, 主要看第一行的LBPU=XXX, 如果该值为1, 代表芯片支持unmap指令, 即支持Trimsudo sg_vpd -a /dev/sda
# 查看目前内核识别的设备的provisioning_mode, 第一个XXXXXX是设备名称, 如sda, 第二个XXXXXX是硬件编号, 直接TAB自动补全即可cat /sys/block/XXXXXX/device/scsi_disk/XXXXXX/provisioning_mode# 如果输出为full, 代表内核当前是没有检测到设备支持Trim特性, 解决方法也比较简单,直接echo unmap到这个文件echo unmap > /sys/block/XXXXXX/device/scsi_disk/XXXXXX/provisioning_mode
# 设置设备在插入时自动更新其状态 (以rtl9220为例)echo 'ACTION=="add|change", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="9220", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"' >> /etc/udev/rules.d/10-uas-discard.rules
sudo udevadm control --reload-rules在确认Trim能被启用后:
对于一个SSD, 如果格式化为ext4, 则在挂载时最好指定discard参数, 来启用TRIM功能
如果是f2fs, FS会自动定期在空闲时TRIM
TIPmount命令显示设备的挂载参数, 也能用来看是否启用了trim
Debian下有一个自动TRIM服务: /usr/lib/systemd/system/fstrim.service
默认情况下, 它会一周进行一次TRIM (/usr/lib/systemd/system/fstrim.timer)
Linux下的SSD Trim
https://daydreams1231.github.io/posts/ssdtips/