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

标签: Linux, Debian

添加新评论