TRIM指令是微软联合各大SSD厂商所开发的一项技术,属于ATA8-ACS规范的技术指令。
TRIM是告诉NAND闪存固态存储设备要擦除哪些数据的SATA接口指令。当相关页面的数据可以被覆盖时,操作系统会发给SSD一个TRIM指令。SSD控制器等到主机开始删除和再次写入操作的时候,执行安全擦除操作。因为在写入操作过程中不用花时间去擦除原本的数据,写入速度要快得多。
Trim指令也叫disable delete notify(禁用删除通知),当我们在操作系统中删除一个文件时,系统并没有真正删掉这个文件的数据,它只是把这些数据占用的地址标记为‘空’,即可以覆盖使用。但这只是在文件系统层面的操作,硬盘本身并不知道那些地址的数据已经‘无效’,除非系统通知它要在这些地址写入新的数据。
在HDD上本无任何问题,因为HDD允许覆盖写入,但到SSD上问题就来了,我们都已知道闪存不允许覆盖,只能先擦除再写入,要得到‘空闲’的闪存空间来进行写入,SSD就必须进行GC(垃圾回收)操作。在没有Trim的情况下,SSD无法事先知道那些被‘删除’的数据页已经是‘无效’的,必须到系统要求在相同的地方写入数据时才知道那些数据可以被擦除,这样就无法在最适当的时机做出最好的优化,既影响GC的效率(间接影响性能),又影响SSD的寿命。
而当Windows识别到SSD并确认SSD支持Trim后,在删除数据时,会不向硬盘通知删除指令,只使用Volume Bitmap来记住这里的数据已经删除。Volume Bitmap只是一个磁盘快照,其建立速度比直接读写硬盘去标记删除区域要快得多。这一步就已经省下一大笔时间了。然后再是写入数据的时候,由于NAND闪存保存数据是纯粹的数字形式,因此可以直接根据Volume Bitmap的情况,向快照中已删除的区块写入新的数据,而不用花时间去擦除原本的数据。
Trim的作用可参考下图:
![](https://i-blog.csdnimg.cn/blog_migrate/4d7e0d37a8103d5f5790911b85a4932e.png)
Trim的支持需要3个要素:
1.SSD主控制器和当前搭配的固件需要支持Trim命令接收。
2.当前操作系统需要支持Trim指令发送。(Win7/2008R2及后续版本)
3.当前使用的磁盘驱动程序必须支持Trim命令传输。
只有同时满足以上3个条件,才能做到系统Trim命令发送,驱动传输Trim命令,SSD固件接收到传输来的Trim命令。
1.SSD主控制器和当前搭配的固件需要支持Trim命令接收。
2.当前操作系统需要支持Trim指令发送。(Win7/2008R2及后续版本)
3.当前使用的磁盘驱动程序必须支持Trim命令传输。
只有同时满足以上3个条件,才能做到系统Trim命令发送,驱动传输Trim命令,SSD固件接收到传输来的Trim命令。
Trim目前不支持以下几种情况:
1. Trim目前不支持RAID阵列中的SSD。(操作系统下进行软件RAID除外)
2. Trim目前不支持磁盘镜像文件内操作。(VM等虚拟机软件使用的虚拟磁盘文件)
3. Trim目前不支持加密的文件系统。(以防止暴露加密文件系统信息)
在window系统下查看SSD Trim功能是否开启:
1.启动CMD命令行窗口。
2.输入fsutil behavior query disabledeletenotify。
3.显示DisableDeleteNotify = 0 表示已开启。
4.如果没有开启,输入fsutil behavior set disabledeletenotify 0 进行设置。
5.可以手动关闭Trim功能,输入fsutil behavior set disabledeletenotify 1
注意:我们是不需要关闭该功能的,因为只有开启了这项功能,我们安装上的固态硬盘才可以享受到更长久的使用寿命。如果你安装的固态硬盘不支持该项功能,那么此功能在开启的时候会失败。