5,736
社区成员
百度了一下好像都没说清楚,没有Trim的时候固态硬盘是什么动作,有Trim以后呢?操作系统删除文件,固态硬盘擦除块,操作系统在可用块写入文件,这个之间的具体流程动作和时序,没有Trim和有Trim时分别是怎样的?
在发送TRIM命令之后,数据不会立即被擦除——它要么在驱动器空闲时在后台进行,要么在下一次向块写入数据时操作。使用哪种方法取决于固件和主控方案。一般来说,消费级固态硬盘方案喜欢在系统空闲时处理擦除,而企业级SSD通常在写入时处理擦除操作。
如果操作系统或SSD配置不支持TRIM,垃圾收集仍然会进行,但这个过程没有那么有效。旧数据最终会被删除,因为SSD最终会在某个时间点覆盖所有不需要的页。
不支持TRIM的情况下,基本操作和使用机械硬盘一样,不同之处在于,SSD由于不能在原位置直接重写数据,重写已存在数据的某页要做块迁移,同一块中有数据的页都要复制,而这些页中的数据可能是文件系统中已经标记为删除的无效数据,复制它们浪费一些时间和SSD的寿命。
那些文章都写得不够透彻,虽然但是... 简单说吧
目前的SSD绝大部分使用NAND Flash存储器,NAND Flash的基本特点是不能直接覆写,对于已经写入数据的区域,要先擦除才能重写,擦除的单位是块(一般是128K的倍数),每块包含若干页(页大小一般是4K,早期也有小于4k的设计)。
而操作系统中删除文件时,为了优化性能,只是在文件系统的某种结构(FAT、$BITMAP文件之类的)中把文件的分配块标记为空闲,并不实际删除数据。所以当操作系统重新使用这些分配块的时候,对于硬盘(不管是机械硬盘还是SSD)看到的,就是重写了某些扇区/块页,而SSD因为不能直接覆写,当重写某页时,需要重新分配一个空闲块,把之前块的所有已用页都复制过去(这就导致了所谓的“写入放大”)。然后把之前的块标记为删除(主控会在空闲时擦除该块)。但是这块中可能有一页或者多页是在文件系统中已经删除的分配块,所以没必要复制,只是SSD的主控不知道,所以就产生了TRIM命令,操作系统中删除文件时,会把对应分配块的LBA通过TRIM命令通知给SSD的主控,主控会把对应的页标记为删除,以后重写某页时就不需要复制同一块中已经标记为删除的页了(如果有的话),这样可以提高性能,也能延长SSD的寿命。
另外,据说intel optane固态硬盘使用的是PCM相变内存,可以直接重写,重写次数达到几千万次,远非一般SSD可比,当然我没用过这种高档货,也就这么一说~~~