Ubuntu 22.04下NVMe SSD异常卡顿过热,手动执行fstrim后恢复,如何判断NVMe是否需要TRIM?
Ubuntu 22.04下NVMe SSD异常卡顿过热,手动执行fstrim后恢复,如何判断NVMe是否需要TRIM?
咱们先拆解你遇到的问题根源,再一步步讲怎么判断NVMe是否需要TRIM:
一、你的SSD异常问题到底是什么原因?
你这次遇到的卡顿、过热甚至只读模式,本质是NVMe SSD的垃圾回收(GC)压力过载导致的:
- 你在11月13日自动TRIM执行后,16日一次性写入了600GB的大量文件,这个过程中产生了巨量「已被系统标记为删除,但SSD还没收到TRIM指令、没把这些块标记为可复用」的无效空间
- Ubuntu默认的
fstrim.service是每周自动执行一次,而你不常重启系统,这三天里自动TRIM还没到触发时间,SSD的GC只能反复处理这些未被标记的无效块——这个过程会占用大量磁盘资源,导致性能暴跌、温度飙升,甚至触发SSD的只读保护机制来避免数据损坏 - 你手动执行
fstrim -av后,一次性标记了2.9TiB的无效块,GC终于能高效工作,所以SSD立刻恢复了正常性能
从你的日志也能佐证:11月13日自动TRIM处理了2.9TiB,16日手动TRIM又处理了差不多的量,说明这三天内确实产生了巨量的无效数据;而20日的自动TRIM只处理了31.5GiB,这就是正常状态下的TRIM量。
二、怎么判断NVMe是否需要手动执行TRIM?
可以从这几个实用维度来判断:
直观的系统表现
- 如果磁盘突然变得卡顿,打开文件、执行读写操作时响应极慢,同时SSD温度远高于平时(比如你平时35℃,突然涨到70℃+),大概率是需要TRIM了
- 磁盘直接进入只读模式,这是SSD的最后保护手段,几乎肯定是GC压力过载导致的,优先试试手动TRIM
查看TRIM历史日志
- 用这个命令看每次TRIM处理的空间大小:
如果最近一次自动TRIM处理了几百GB甚至几TB的空间,而之后你又做了大量文件写入/删除操作,那可以考虑手动触发TRIMjournalctl | grep "fstrim.*/:" - 也可以用这个命令确认自动TRIM的执行时间和状态:
cat /var/log/syslog | grep -a fstrim
- 用这个命令看每次TRIM处理的空间大小:
结合SMART数据判断
- 执行
sudo smartctl -a /dev/nvme0查看SSD健康状态,重点关注:Percentage Used:你的是0%,说明SSD损耗极低,硬件没问题Data Units Written:如果近期这个数值暴涨(比如几天内增加了几百GB),而自动TRIM还没执行,那大概率需要手动TRIM- 只要
SMART overall-health self-assessment test result: PASSED,就说明硬件本身没故障,优先考虑TRIM问题
- 执行
预查可TRIM空间(干运行)
- 用这个命令可以查看如果执行TRIM会处理多少空间,不会真的执行TRIM:
如果输出的数值很大(比如几百GB以上),说明当前有大量无效块等待被标记,适合手动执行TRIMfstrim --verbose --dry-run /
- 用这个命令可以查看如果执行TRIM会处理多少空间,不会真的执行TRIM:
三、要不要调整自动TRIM的频率?
因为你不常重启系统,每周一次的自动TRIM可能跟不上你的使用节奏(比如经常有大文件写入/删除),可以把自动TRIM改成每天执行:
- 编辑fstrim的定时器配置:
sudo nano /etc/systemd/system/timers.target.wants/fstrim.timer - 把
OnCalendar=weekly改成OnCalendar=daily,保存退出 - 重新加载systemd配置并重启定时器:
sudo systemctl daemon-reload sudo systemctl restart fstrim.timer
备注:内容来源于stack exchange,提问作者sotirov
相关产品推荐
相关产品推荐

