Linux平台下SSD的TRIM指令的最佳使用方式(不区别对待NVMe)
SSD写数据会出现什么问题
SSD读写的单位不是位,而是一个块。如果要改变这个块中的一位,首先要将整个块擦写成1,然后再写入更新的数据。
为了解决擦写块的低效,SSD的策略是将需要改写的块,读取出来,进行数据修改,然后写入到新的,已经擦除完的块中。
新的SSD,没用的块很多,无需擦写,直接写入,性能很高。随着使用量增加,当写入时无可用块时,则只能先擦写再写入。此时SSD性能很差。
理论上,SSD内部定期将垃圾块进行回收擦写,但是SSD无法确认哪些数据是需要回收的。
解决问题的思路
针对SSD使用时间越长可用块变少以致于性能变差,可以让SSD“知道”哪些块可以回收,从而提前擦写垃圾块,以提升性能。
那么怎么做呢?解释这个问题需要先了解文件系统是如何“删除文件”的。
文件系统只是将文件头作一个已删除的标记,表明文件被删除了,即没有真正删除文件,只是标识删除。(Linux下真正删除的时机可能是写满、ramdisk、断电等时刻,此处不作深究)
SSD 具有一种称为 TRIM 的功能。从本质上讲,这是一种用于回收设备上未使用的块的方法,该块可能先前已被写入,但不再包含有效数据,因此可以返回到通用存储池以供重用。
TRIM就是这种“告知”SSD:“这些文件(块)已经删除了,你可以提前擦写以提高性能!”
经过众多资料的洗礼,我发现TRIM仿佛并非有想像中那么好,因为开启TRIM功能后,每次删除文件是真正的删除,SSD就可能去回收那些垃圾块,会降低SSD的性能!
解决之法是定时TRIM,而Systemd管理的Linux系统中都有一个命令 fstrim
,就是作TRIM操作,可以用于普通SSD与NVMe
一次清理垃圾块的操作:(释放了这么多,难怪满了)
sudo fstrim --fstab --verbose
Systemd管理的系统有一个专用的fstrim服务与定时器,开启定时器方法:
#查看fstrim定时器状态 sudo systemctl status fstrim.timer #开启fstrim定时器自启 sudo systemctl enable --now fstrim.timer #列出timer定时器列表 sudo systemctl list-timers --all
以上就是本文内容。
引文:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了