fstrim不是整理磁盘工具,而是向ssd发送trim指令通知失效块的系统调用;它不释放可见空间,但可防写入变慢、延长寿命;必须先验证硬件、内核和文件系统支持,再以root权限对挂载点执行sudo fstrim -v /等命令。

fstrim 不是“整理磁盘”工具,而是向 SSD 发送 TRIM 指令、通知它哪些块已失效的系统调用。它不移动数据、不重组文件,也不释放你肉眼可见的“可用空间”,但能防止 SSD 写入变慢、延长寿命。
确认 SSD 和文件系统真支持 TRIM
跳过这步直接运行 fstrim 很可能报错或静默失败。
- 检查硬件是否支持:运行
sudo hdparm -I /dev/sda | grep "TRIM supported"(把/dev/sda换成你的 SSD 设备),看到Data Set Management TRIM supported才算过关 - 检查内核是否识别:运行
lsblk --discard,找到对应 SSD 行,看DISC-GRAN和DISC-MAX是否为非零值——有数字才代表驱动层已就绪 - 确认挂载点文件系统支持:比如 ext4 需启用
discard特性(tune2fs -l /dev/sda1 | grep "Features"中含discard),但手动执行fstrim并不要求该特性开启
手动执行 fstrim 的正确姿势
必须以 root 权限运行,且目标必须是已挂载的文件系统路径(不是设备节点)。
- 对单个挂载点执行(推荐先试这个):
sudo fstrim -v /——-v显示实际丢弃字节数,比干跑更安心 - 对所有支持 TRIM 的已挂载文件系统批量执行:
sudo fstrim -a -v - 只处理 /home 分区(假设它单独挂载):
sudo fstrim -v /home - 误用常见错误:
sudo fstrim /dev/sda1会失败(fstrim只接受挂载点,不是设备路径);fstrim /mnt而/mnt未挂载也会报错 “not mounted”
别乱用 -o/-l/-m 参数,除非你真懂碎片分布
这些参数用于限定 TRIM 范围或过滤小空闲块,但普通用户几乎不需要。
-
-o 1G -l 2G:从文件系统第 1 GiB 处开始、只扫描接下来 2 GiB 区域——适合调试某分区局部问题,日常无意义 -
-m 4M:忽略所有小于 4 MiB 的空闲块——在高度碎片化的旧文件系统上可提速,但会漏掉大量本可回收的小块,得不偿失 - 默认行为(不加任何范围参数)最稳妥:全量扫描整个挂载点,通知 SSD 所有已释放的逻辑块
执行后没变化?这是正常现象
fstrim 完成后,df 显示的“可用空间”不会增加,du 统计也不会变——它不清理文件,只通知 SSD 主控:“这些 LBA 已失效,请后台擦除”。效果体现在后续写入速度是否稳定、IO 延迟是否升高。
真正容易被忽略的是:如果你的 SSD 是 NVMe 类型,某些老内核(如 5.4 之前)对 nvme0n1p1 的 TRIM 支持不完整,lsblk --discard 可能显示 DISC-MAX=0,此时 fstrim 会静默跳过——务必先验证再操作。











