Linux下对USB移动硬盘进行trim操作
trim操作可主动告知硬盘哪些区域的数据是已经删除的,使主控可以主动释放这部分空间,可以一定程度上提高SMR机械硬盘或具有模拟SLC缓存的固态硬盘的性能。但在一般的Linux环境下,使用硬盘盒通过USB连接的硬盘不会开启trim功能。本文记录了Debian下对移动硬盘手动启用trim功能的操作。
主要步骤参考自:https://www.jeffgeerling.com/blog/2020/enabling-trim-on-external-ssd-on-raspberry-pi
以下操作均在root权限下进行。
首先安装软件包:
apt-get install -y sg3-utils lsscsi
假设移动硬盘是/dev/sdc,先将Provisioning_mode从full修改为unmap:
cd /sys/block/sdc/device/scsi_disk/*/
echo "unmap" > provisioning_mode
然后需要确定最大的trim指令的块大小。执行以下命令:
sg_vpd -p bl /dev/sdc
sg_readcap -l /dev/sdc
从sg_vpd的输出结果中找到"Maximum unmap LBA count"项(例如我的硬盘是65536),从sg_readcap的输出结果中找到"Logical block length"项(例如我的硬盘是512),随后即可设置trim指令的最大块大小:
cd /sys/block/sdc/queue/
echo $((512*65535)) >discard_max_bytes
之后就可以对支持的文件系统的挂载路径执行fstrim了,例如挂载路径是/mnt/sdc1,fstrim指令为:
fstrim -v /mnt/sdc1