固态硬盘的Trim是什么原理?

ooolinux 2024-02-21 19:05:11

百度了一下好像都没说清楚,没有Trim的时候固态硬盘是什么动作,有Trim以后呢?操作系统删除文件,固态硬盘擦除块,操作系统在可用块写入文件,这个之间的具体流程动作和时序,没有Trim和有Trim时分别是怎样的?

 

...全文
415 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanqth 02-23
  • 打赏
  • 举报
回复 1

在发送TRIM命令之后,数据不会立即被擦除——它要么在驱动器空闲时在后台进行,要么在下一次向块写入数据时操作。使用哪种方法取决于固件和主控方案。一般来说,消费级固态硬盘方案喜欢在系统空闲时处理擦除,而企业级SSD通常在写入时处理擦除操作。

如果操作系统或SSD配置不支持TRIM,垃圾收集仍然会进行,但这个过程没有那么有效。旧数据最终会被删除,因为SSD最终会在某个时间点覆盖所有不需要的页。

ooolinux 02-24
  • 举报
回复
@tanqth 垃圾收集指什么?
@ooolinux 就是把曾经写过数据,但是已经无效的,那些块擦除,使之成为空闲块,和某些语言中内存的垃圾收集一样。
tanqth 02-25
  • 举报
回复
@ooolinux 就是回收的不需要的、没用的。
2条回复
  • 打赏
  • 举报
回复

不支持TRIM的情况下,基本操作和使用机械硬盘一样,不同之处在于,SSD由于不能在原位置直接重写数据,重写已存在数据的某页要做块迁移,同一块中有数据的页都要复制,而这些页中的数据可能是文件系统中已经标记为删除的无效数据,复制它们浪费一些时间和SSD的寿命。

ooolinux 02-23
  • 举报
回复
@日立奔腾浪潮微软松下联想 不支持Trim时删除文件,对应的页也会标记为删除?
@ooolinux 不会,存储设备是文件系统的载体,更底层,它不了解上层的变动情况,所以需要通知。
ooolinux 02-24
  • 举报
回复
@日立奔腾浪潮微软松下联想 那文件系统中标记为删除,是记录在哪里呢?
14条回复
  • 打赏
  • 举报
回复

那些文章都写得不够透彻,虽然但是... 简单说吧
目前的SSD绝大部分使用NAND Flash存储器,NAND Flash的基本特点是不能直接覆写,对于已经写入数据的区域,要先擦除才能重写,擦除的单位是块(一般是128K的倍数),每块包含若干页(页大小一般是4K,早期也有小于4k的设计)。
而操作系统中删除文件时,为了优化性能,只是在文件系统的某种结构(FAT、$BITMAP文件之类的)中把文件的分配块标记为空闲,并不实际删除数据。所以当操作系统重新使用这些分配块的时候,对于硬盘(不管是机械硬盘还是SSD)看到的,就是重写了某些扇区/块页,而SSD因为不能直接覆写,当重写某页时,需要重新分配一个空闲块,把之前块的所有已用页都复制过去(这就导致了所谓的“写入放大”)。然后把之前的块标记为删除(主控会在空闲时擦除该块)。但是这块中可能有一页或者多页是在文件系统中已经删除的分配块,所以没必要复制,只是SSD的主控不知道,所以就产生了TRIM命令,操作系统中删除文件时,会把对应分配块的LBA通过TRIM命令通知给SSD的主控,主控会把对应的页标记为删除,以后重写某页时就不需要复制同一块中已经标记为删除的页了(如果有的话),这样可以提高性能,也能延长SSD的寿命。
另外,据说intel optane固态硬盘使用的是PCM相变内存,可以直接重写,重写次数达到几千万次,远非一般SSD可比,当然我没用过这种高档货,也就这么一说~~~

ooolinux 02-22
  • 举报
回复
@日立奔腾浪潮微软松下联想 没有Trim的时候(比如XP系统使用SSD),系统删除一个文件,系统和SSD主控是什么动作?
tanqth 02-21
  • 打赏
  • 举报
回复
ooolinux 02-22
  • 举报
回复
@tanqth 有些环节还是get不到有点模糊

5,736

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧