1. 程式人生 > >Linux平臺下SSD的TRIM指令的最佳使用方式(不區別對待NVMe)

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 一次清理垃圾塊的操作:(釋放了這麼多,難怪滿了) ```bash sudo fstrim --fstab --verbose ``` ![](https://img2020.cnblogs.com/blog/1149398/202007/1149398-20200723181326044-1280930677.png) Systemd管理的系統有一個專用的fstrim服務與定時器,開啟定時器方法: ```bash #檢視fstrim定時器狀態 sudo systemctl status fstrim.timer #開啟fstrim定時器自啟 sudo systemctl enable --now fstrim.timer #列出timer定時器列表 sudo systemctl list-timers --all ``` ![](https://img2020.cnblogs.com/blog/1149398/202007/1149398-20200723182149108-1173500151.png) 以上就是本文內容。 引文: - [在 Linux 下使用 fstrim 延長 SSD 驅動器的壽命](https://linux.cn/article-11959-1.html) - [什麼!NVMe不支援TRIM?你不會搞錯了吧...](https://zhuanlan.zhihu.com/p/113871374) - [Linux檔案系統和inode](https://cloud.tencent.com/developer/article/