数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 4182|回复: 25

[Other] 关于固态存储设备TRIM功能的一些研究

[复制链接]
发表于 2024-1-7 21:32:22 来自手机浏览器 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
好久没发帖了,上号发现M币都给我扣成负数,还是发个贴赚点币吧
这里简单说说我对TRIM机制的研究,大伙随便看看,如果有哪里不对也请指出来。
下面这段是复制我博客的:

Trim是固态硬盘中的一种垃圾回收机制。百度上的废话这里就不复制粘贴了,说一说笔者的理解:
操作系统向固态硬盘发起Trim命令,将文件系统中无用块的信息发送给固态硬盘主控,主控收到命令后会在空闲时对无用块进行擦除。由于SSD的特性,如果一块空间中有垃圾数据,想要写新的数据进去就必须将垃圾数据先擦除后写入,经常进行Trim操作理论上可以改善磁盘的读写性能。
目前已知Windows和Linux都支持固态硬盘的Trim操作。

然后,由于Windows不开源嘛,就只能基于开源的Linux研究了
通过查看内核源码(6.1)中的文件系统相关驱动,以下文件系统支持Trim:
ext4、btrfs、ecryptfs、f2fs、fat、gfs2、hpfs、jfs、nilfs2、ntfs3、exfat、ocfs2、xfs

Linux下TRIM很简单,使用util-linux包中的fstrim工具即可:
  1. sudo fstrim -av
  2. /var/log: 137.7 MiB (144424960 bytes) trimmed on /dev/zram1
  3. /boot: 912.2 MiB (956493824 bytes) trimmed on /dev/mmcblk0p1
  4. /: 1.6 GiB (1746763776 bytes) trimmed on /dev/mmcblk0p2
复制代码

然后,楼下简单追一下Trim的实现:

打赏

参与人数 2家元 +96 收起 理由
perter + 6 原創內容
家睦 + 90

查看全部打赏

发表于 2024-2-6 09:57:45 | 显示全部楼层

看不懂,有点深奥了。收藏了,以后留着备用。
回复 支持 反对

使用道具 举报

发表于 2024-2-5 16:13:15 | 显示全部楼层
很好,不错,看不懂。
回复 支持 反对

使用道具 举报

发表于 2024-1-29 16:55:28 | 显示全部楼层
flysky_hunan 发表于 2024-1-24 19:35
格式化应该就是去掉了分区头部(和尾部?)的文件系统信息,不过我没看过源码,瞎猜的。
因为之前搞过一 ...

我发现小文件恢复的几率也更大。尤其是那种十几KB的文件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-24 19:35:54 来自手机浏览器 | 显示全部楼层
渣星海力士 发表于 2024-1-24 11:16
原理原来是这样,我之前测试过Windows10下硬盘盒主控对SSD数据恢复影响。
结论就是不支持trim的,在删除文 ...

格式化应该就是去掉了分区头部(和尾部?)的文件系统信息,不过我没看过源码,瞎猜的。
因为之前搞过一次数据恢复,放在文件夹下的东西拿工具一扫就能扫出来,而放在根目录下(也就是直接放在磁盘下)的文件扫不出来,只能winhex一点点抓文件头这样。。。所以我估计是,根目录下文件夹和文件的信息都存到了分区头部的文件系统信息区域内,然后格式化只是擦除了这个分区,并没有把整个磁盘所有记录文件结构(也就是inode)的块清掉,这样扫盘软件扫到这些还没有被删除的inode的时候可以顺着它还原出目录结构。
总之就是文件丢文件夹里面,哪天误格式化了能恢复出来的概率更大
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-24 11:16:39 来自手机浏览器 | 显示全部楼层
原理原来是这样,我之前测试过Windows10下硬盘盒主控对SSD数据恢复影响。
结论就是不支持trim的,在删除文件后使用Windows优化功能,或者Windows格式化SSD后,都可以正常恢复文件。
支持trim的主控,在删除文件后,使用Windows优化或者格盘,只能读取到文件列表,无法恢复正确的文件内容。
有时候误删了东西,只要能看到文件列表,也能重新收集到,还是不错。
安全擦除则是全部清空,没有任何痕迹。
回复 支持 反对

使用道具 举报

发表于 2024-1-23 21:58:12 | 显示全部楼层
非常感谢公开经验
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-23 14:09:16 来自手机浏览器 | 显示全部楼层
perter 发表于 2024-1-21 15:00
给楼主点个赞,你这分析的应该是手动trim,现在SSD都支持CG+trim了,你不用管,很多主控做CG的时候就自行tr ...

大部分Linux系统都带一个叫fstrim.timer的服务,启用之后会每周定期执行我上面说的那个trim命令。。。其实我也很好奇这个自动trim,按理说(ext4)删掉文件实际上就是从某个块的inode节点上删掉了文件索引,需要支持自动trim的话那么那套固件里面就得做一个可以解析ext4 inode结构的实现。。。世界上这么多文件系统,岂不是fat fat32 exfat ntfs这些都得做好对应的数据结构解析实现放在固件里面。。。不大可能

我个人认为只靠磁盘里的固件是没办法实现自动trim的,因为固件不知道在nand flash里面文件系统的数据结构,所以没有办法自动清理无用块。然后像Windows那种碎片检查机制,我估计是操作系统闲了没事就把文件系统扫一遍(或者是每次删除的时候实际上在某个区域里面存了这个文件的信息),扫出无用块之后把这些信息发给SSD,SSD接收到之后再找时机进行擦除操作。

以上观点均为猜测哈,毕竟我也没有Windows源码 :lol:
回复 支持 反对

使用道具 举报

发表于 2024-1-23 00:10:53 | 显示全部楼层
Windows XP不支持TRIM,可惜了,以后的系统都支持的。LZ也研究下
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-22 20:31:52 | 显示全部楼层
太深奥了,感谢楼主
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-22 10:11:46 | 显示全部楼层
专业,建议不要给杂牌固态做磁盘清理,教训深刻
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-21 18:58:43 | 显示全部楼层
593323292 发表于 2024-1-21 16:03
常见的46 58 59主控支持自动trim吗

当然支持。。。。紫薯补丁
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-21 16:03:34 来自手机浏览器 | 显示全部楼层
perter 发表于 2024-1-21 15:00
给楼主点个赞,你这分析的应该是手动trim,现在SSD都支持CG+trim了,你不用管,很多主控做CG的时候就自行tr ...

常见的46 58 59主控支持自动trim吗
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-21 15:06:20 | 显示全部楼层

那就是个有点技术的神棍
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-21 15:00:38 | 显示全部楼层
给楼主点个赞,你这分析的应该是手动trim,现在SSD都支持CG+trim了,你不用管,很多主控做CG的时候就自行trim了
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-21 10:00:22 | 显示全部楼层
lz这可以拿高薪了吧
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-20 21:52:23 | 显示全部楼层
给楼主加分
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-17 11:19:08 | 显示全部楼层
看不懂,有点深奥了。
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-13 22:49:31 | 显示全部楼层
楼主牛人,底层原理也研究得明明白白,真的很厉害。7楼说的那个人我不好评价,
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-1-9 20:18:11 来自手机浏览器 | 显示全部楼层
yongjie 发表于 2024-1-9 10:38
此处想艾特一下dongfangw 希望他发表一下意见  想听听他的更高的见解

这哥们咋了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-2 19:13 , Processed in 0.171600 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表