手機越用越慢不是記憶體不夠:Android 的 TRIM 與 UFS 壽命怎麼看

發表時間:2026 年 11 月 10 日 | 更新日期:2026 年 11 月 10 日 | 編輯:雅寶社區編輯團隊
手機越用越慢不是記憶體不夠:Android 的 TRIM 與 UFS 壽命怎麼看 - 雅寶社區 · 頂客論壇

換句話說,這些工具讓你「看到」記憶體變多,卻讓手機「實際」變慢。這也是為什麼每次清理完當下很順,過幾小時又打回原形——因為你並沒有解決任何根本問題。

1.3 真正拖慢手機的五個因素

以維修與實測經驗來看,Android 手機在使用 12~24 個月後出現的「慢性變慢」,通常由以下五個因素疊加造成。注意,只有最後一項與 RAM 有關。

因素

典型症狀

影響程度

儲存空間接近滿載(>90%)

全域卡頓、相機存檔慢、App 更新失敗

極高

UFS 垃圾回收與寫入放大惡化

隨機讀寫延遲上升、開啟 App 變慢

背景服務、喚醒鎖與同步風暴

待機耗電、發熱、滑動掉幀

電池老化導致電壓不穩與降頻

電量低時效能懸崖式下降

中高

RAM 不足導致後台重啟

切換 App 要重讀、多工失效

這張表的重點是:前兩項都與儲存晶片有關,而且它們會互相惡化。空間越滿,垃圾回收越沒效率;垃圾回收越沒效率,寫入放大越嚴重,控制器就越忙,延遲就越高。這就是「越用越慢」的技術本質。

二、NAND Flash、UFS 與寫入壽命的物理極限

要談 TRIM 與壽命,得先理解手機裡的儲存晶片是什麼東西。它不是硬碟,沒有旋轉盤,也沒有磁頭;它是一塊由數十億個浮閘晶胞組成的快閃記憶體。

2.1 從 NAND 顆粒講起:P/E Cycle 與抹除的代價

NAND Flash 的寫入方式很特別:它只能「整塊抹除、分頁寫入」。讀取與寫入的單位是 Page(常見 4KB~16KB),但抹除的單位是 Block(常見 2MB~8MB,內含數百個 Page)。這代表一件關鍵的事:你沒辦法只改一個 Page,必須把整個 Block 搬出來、改好、再寫回去。

每次 Block 被完整抹除再寫入,稱為一次 P/E Cycle(Program/Erase Cycle)。NAND 晶胞的絕緣層會隨每次抹寫而累積損耗,超過額定次數後就會出現位元錯誤甚至壞塊。目前手機主流使用 TLC(Triple-Level Cell,每晶胞存 3 bit),消費級 TLC 的 P/E 額定值大約落在 1,000~3,000 次之間,視製程與 3D 堆疊層數而定。

聽起來很少?換算一下:一顆 256GB 的 TLC UFS,理論總寫入量約為 256GB × 2,000 次 ÷ 寫入放大倍率。若寫入放大控制在 3 倍,就是約 170TB 的寫入壽命。以每天寫入 20GB 計算,可以撐超過 20 年。所以對絕大多數使用者來說,「把 UFS 寫壞」不是現實風險;真正的問題是「在還沒寫壞之前,效能就先垮了」。

2.2 UFS 是什麼?和 eMMC、和電腦 SSD 的差異

UFS(Universal Flash Storage)是手機目前主流的儲存介面標準。它與舊世代的 eMMC 最大差別在於「全雙工」與「多通道」:eMMC 是半雙工、單通道,讀寫不能同時進行;UFS 採用 MIPI M-PHY 序列介面,支援命令佇列(Command Queue),可以同時排入多個讀寫請求並平行處理。

  • UFS 2.0/2.1:HS-GEAR3,單通道雙 lane,理論頻寬約 1.2GB/s,是 2016~2018 年旗艦的主力。
  • UFS 3.0/3.1:HS-GEAR4,理論頻寬約 2.9GB/s,並導入 Write Booster(利用 SLC 快取加速寫入)與 HPB(Host Performance Booster,把邏輯位址對應表快取到手機 RAM)。
  • UFS 4.0:理論頻寬約 4.6GB/s,能效比進一步提升,2023 年後旗艦機種開始搭載。
  • 與電腦 SSD 相比,UFS 的架構其實非常相似:同樣有 FTL(Flash Translation Layer)、同樣需要 GC、同樣有 DRAM 快取(或 HMB/HPB)。差別在於手機的控制器資源更緊、功耗限制更嚴,而且手機的使用模式是「長時間待機、短時間大量寫入」,這讓垃圾回收的時機變得非常關鍵。

    2.3 FTL、抹除區塊與 GC:讓手機「越用越慢」的機械核心

    你在手機裡看到的「檔案」是邏輯位址(LBA),但 NAND 上實際存放的位置是實體位址(PBA)。負責把兩者對應起來的,就是 FTL。當你覆寫一個檔案時,FTL 不會去改舊位置的資料,而是把新資料寫到另一個乾淨的 Page,然後把舊 Page 標記為「無效」。這個技巧叫 Copy-on-Write,是延長壽命的關鍵。

    問題來了:無效的 Page 會越積越多,散落在各個 Block 裡。當控制器需要新的空間時,就必須啟動垃圾回收——挑一個「無效 Page 比例最高」的 Block,把裡面還有用的 Page 複製到別處,再整塊抹除。這個過程會產生額外的寫入,也就是寫入放大(Write Amplification, WAF)。

    WAF 的計算方式是:NAND 實際寫入量 ÷ 主機(手機)請求寫入量。理想值是 1.0,實務上手機在正常使用下大約 2~4。但當儲存空間使用率超過 90% 時,控制器能挪用的乾淨 Block 變少,GC 只能被迫更頻繁地搬移資料,WAF 可能飆到 6 甚至 10 以上。這正是「手機快滿了就會變慢」的技術解釋。

    2.4 Over-Provisioning 與「剩餘空間就是效能」

    SSD 與 UFS 都會保留一塊使用者看不到的空間,稱為 Over-Provisioning(OP),用來做為 GC 的緩衝區。但手機的 OP 比例通常比電腦 SSD 保守(因為要賣容量),所以使用者可見的剩餘空間就變得格外重要。

    實務建議:永遠保留 15%~20% 的可用空間。以 128GB 機型計算,至少留 20GB;256GB 機型至少留 35GB。低於這個水位,系統就會開始感受到明顯的寫入延遲,而這種延遲在隨機讀寫(例如開啟 App、載入資料庫)時最容易被使用者感知。

    三、TRIM 的全貌:Android 怎麼告訴快閃記憶體「這一格空了」

    理解了 GC 與寫入放大,就可以進入本文的核心:TRIM。這個指令的存在意義,說穿了就是「幫控制器省掉一次不必要的搬移」。

    3.1 沒有 TRIM 的世界:寫入放大與效能雪崩

    當你在系統中刪除一個檔案,作業系統做的事情只是「把檔案系統表格中的那一筆記錄標記為可用」,資料本身還留在 NAND 上。對 FTL 來說,那些 Page 仍然是「有效資料」——因為它不知道檔案已經被刪了。

    於是災難發生:當 GC 要回收某個 Block 時,它會把這些「其實已經被刪除」的 Page 也一起搬移到新位置,白白浪費一次寫入。這不僅拖慢效能,還浪費壽命。長期下來,控制器會越來越難找到乾淨的 Block,延遲就會上升。

    TRIM 的作用,就是讓檔案系統在刪除檔案後,主動告訴儲存控制器:「這些邏輯位址的資料已經無效了,你可以直接丟掉。」控制器收到後,會把對應的 Page 標記為無效,GC 時就不必搬移它們。

    3.2 TRIM、DISCARD、UNMAP、FITRIM 的差別

    這幾個名詞經常被混用,但它們其實分屬不同層次:

    TRIM:ATA 指令集中的術語,源自 SATA SSD。

  • UNMAP/WRITE SAME:SCSI/NVMe 世界的對應指令。UFS 走的是 SCSI 架構,因此實際上送出的可能是 UNMAP 或 DISCARD。
  • DISCARD:Linux 檔案系統層對「丟棄無效區塊」這個動作的通稱,可透過 mount option(如 ext4 的 discard)即時觸發,也可由使用者主動執行。
  • FITRIM:Linux 核心提供的一個 ioctl,讓使用者空間程式可以「一次把整個檔案系統的無效區塊批次送給裝置」。Android 的 fstrim 就是呼叫這個。
  • 換句話說,TRIM 是「指令」,DISCARD 是「動作」,FITRIM 是「批次介面」。你手上的 Android 手機,做的就是定期執行 FITRIM,把整塊 /data 分區的無效區塊一次通報給 UFS 控制器。

    3.3 Android 的 fstrim 是怎麼被排程的

    Android 從 4.3 開始支援 fstrim,並在後續版本中把它納入「閒置維護(Idle Maintenance)」機制。運作邏輯大致如下:

    系統偵測裝置是否處於「充電中 + 螢幕關閉 + 長時間閒置」的狀態。

  • 符合條件後,由 StorageManagerService 觸發一次 idle maintenance 工作。
  • 工作內容包含 fstrim,對 /data 與其他可捨棄分區執行 FITRIM ioctl。

    執行週期預設約為每 24 小時一次,但各家 OEM 可能調整。

    這個設計很聰明:它把耗時且會產生寫入的維護工作,安排在手機最不可能被使用的時段。但也因此,如果你的充電習慣很差(例如永遠在低電量才充、或睡前不插電),fstrim 可能很久才跑一次,垃圾回收就會累積。

    3.4 為什麼你的手機 TRIM 可能從沒跑過

    這是實務上最常被忽略的環節。以下幾種情況,都可能讓 fstrim 長期無法執行:

  • 從來不讓手機在充電狀態下閒置:fstrim 的前提是「充電 + 閒置」,很多人白天用、晚上也用到睡著才插電,早上就拔掉,永遠湊不到條件。
  • 系統被第三方省電工具干擾:部分「省電大師」會強制中斷背景工作,連帶影響 idle maintenance 的排程。
  • 使用非原廠充電器或無線充電導致電量判斷異常:偶爾會讓系統誤判為「未充電」。
  • 儲存空間長期低於可用水位:部分機型在空間過滿時會跳過 fstrim,以避免 GC 崩潰。
  • F2FS 檔案系統的 discard 策略:Android 10 之後部分機型改用 F2FS,並預設使用「非同步 discard」或依賴 fstrim,兩種策略的行為不同。
  • 所以「我的手機有 TRIM 功能」跟「我的手機真的跑過 TRIM」是兩件事。要確認,就得實際去查紀錄——下一節會教你怎麼做。

    3.5 ext4 與 F2FS 的差異

    Android 早期採用 ext4,2016 年後 Pixel 系列開始導入 F2FS(Flash-Friendly File System)。F2FS 是專門為 NAND 設計的檔案系統,內建了更積極的 GC 與 discard 策略,理論上對快閃記憶體更友善。

    但這也帶來一個副作用:不同機器、不同檔案系統、不同 OEM 客製化,會讓 fstrim 的實際行為差異很大。有些機型會顯示 fstrim 紀錄,有些則是透過 F2FS 的背景 GC 默默完成。這也是為什麼我們不能只看「有沒有跑 fstrim」來判斷健康度,而必須搭配 UFS 本身的健康描述元。

    四、實戰:在手機上查 TRIM 紀錄與 UFS 健康度

    以下操作需要一台電腦與 ADB 環境。若你還沒有,可在電腦安裝 Android SDK Platform-Tools,手機開啟「開發人員選項 → USB 偵錯」後連接即可。

    4.1 前置準備:ADB 環境與基本確認

    連接手機後,先在終端機輸入 adb devices,確認裝置已正確列出。接著我們可以先看整體的儲存裝置掛載狀況:

    adb shell df -h /data

    adb shell ls -l /dev/block/by-name

    你會在 /dev/block 下看到以 sda、sdb 命名的裝置節點——這正是 UFS 走 SCSI 架構的證據。Android 的 UFS 通常被辨識為 SCSI 磁碟,因此健康資訊會出現在 scsi_device 的路徑底下。

    4.2 查詢 TRIM 執行紀錄

    Android 提供了 dumpsys diskstats 這個診斷指令,會列出儲存空間的統計與最近的 fstrim 紀錄。指令如下:

    adb shell dumpsys diskstats

    輸出中會包含類似以下的段落(實際格式依 Android 版本略有差異):

    Last fstrim:

    time: 2024-xx-xx xx:xx:xx

    bytes trimmed: 12345678901

    重點看兩件事:時間與 bytes trimmed。如果最後一次 fstrim 的時間是「好幾個月前」,代表閒置維護機制長期沒有生效;如果 bytes trimmed 一直是 0,可能是檔案系統或控制器沒有正確回報。

    你也可以手動觸發一次閒置維護(部分機型需要系統權限):

    adb shell sm idle-maint run

    或 Android 11 以後

    adb shell cmd storage run-idle-maintenance

    執行後再跑一次 dumpsys diskstats,若時間更新,就代表 TRIM 正常運作。若指令回傳權限錯誤,這是正常的,多數零售機型不允許 shell 使用者觸發。

    4.3 讀取 UFS 健康描述元(Health Descriptor)

    UFS 標準定義了一組「健康描述元」,用來回報裝置的壽命與預警狀態。這些數值會出現在 sysfs 的 health_descriptor 目錄中。常見路徑有幾種:

    # 路徑一:直接走 scsi_device

    adb shell ls /sys/class/scsi_device/0:0:0:0/device/health_descriptor/

    路徑二:部分 SoC 走 ufshc 平台裝置

    adb shell ls /sys/devices/platform/soc/*.ufshc/health_descriptor/

    若能看到目錄內容,通常會包含以下檔案:

    pre_eol_info

    life_time_estimation_a

    life_time_estimation_b

    讀取方式(示意):

    adb shell cat /sys/class/scsi_device/0:0:0:0/device/health_descriptor/pre_eol_info

    adb shell cat /sys/class/scsi_device/0:0:0:0/device/health_descriptor/life_time_estimation_a

    需要提醒的是,多數機型的 sysfs 權限僅開放給 root 或系統服務。若你執行後得到「Permission denied」,屬於正常現象,這不是你的操作錯誤。此時可改用第三方工具,或透過 root 環境讀取。

    4.4 讀懂 Pre EOL 與 Life Time Estimation

    這兩個數值都是以 16 進位回報的枚舉值,換算方式如下表。先看 pre_eol_info:

    數值

    意義

    建議動作

    0x01正常(Normal)無須處理

    0x02警告(Warning),約已消耗 80% 壽命開始備份、避免大量寫入

    0x03緊急(Urgent),約已消耗 90% 壽命立即備份,準備更換裝置

    0x00未支援或未回報改用其他指標判斷

    再看 life_time_estimation_a(A 代表 SLC 快取區,B 代表 TLC 主儲存區,部分控制器只回報 A):

    數值

    已消耗壽命

    解讀

    0x010%~10%新機或輕度使用

    0x0210%~20%正常

    0x0320%~30%正常

    0x0540%~50%中度使用,仍屬健康

    0x0870%~80%需留意,建議備份

    0x0A90%~100%接近壽命終點

    0x0B超過 100%已超出額定寫入量

    實務上,一支正常使用兩年的旗艦機,這個數值通常在 0x02~0x03 之間,也就是消耗不到 30%。會看到 0x06 以上的,多半是長期大量錄影、下載、或把儲存空間塞到爆的重度使用者。

    4.5 用第三方 App 快速查看

    如果你不想碰 ADB,也可以透過第三方工具查看部分資訊。常見的選擇包括 Device Info HW、AIDA64、SD Insight 等。這些 App 能顯示 UFS 型號、容量、支援的介面版本,部分機型甚至在取得 root 後能讀出健康描述元。

    要注意的是,非 root 環境下能讀到的資訊有限。多數 App 只能顯示「UFS 3.1、256GB」這類規格,而不會給你 life_time_estimation。若你在 App 中看到「Health: N/A」,不是你選錯 App,而是權限限制。

    五、延長 UFS 壽命、讓手機回春的具體做法

    理解了機制,接下來就是可執行的改善方案。以下五點按照「效益/風險比」排序,建議從第一點開始做。

    5.1 保留 15%~20% 的可用空間

    這是最有效、也最容易被忽略的一招。前面提過,儲存空間使用率超過 90% 時,GC 效率會急劇下降,寫入放大會暴增。你可以這樣做:

    定期清理 LINE、WeChat 的快取與過期檔案(這兩個 App 的資料庫經常膨脹到數 GB)。

    把照片影片自動備份到雲端後,刪除本機副本。

    移除長期沒開的遊戲(現代手遊動輒 5~15GB)。

    使用系統內建的「儲存空間」分析工具,找出佔用大戶。

    以 128GB 機型為例,目標是永遠維持 20GB 以上可用;256GB 機型維持 35GB 以上。這個數字不是隨便估的,而是多數控制器開始有效率的門檻。

    5.2 減少不必要的寫入

    快閃記憶體的壽命是以「寫入量」計算的,所以任何能減少寫入的行為都有幫助:

  • 關閉高頻率的自動同步:例如每 15 分鐘同步一次的雲端硬碟、相簿即時上傳。
  • 避免長時間 4K 錄影:4K 60fps 每分鐘可寫入 1~2GB,是手機最傷儲存的行為之一。
  • 關閉不必要的系統日誌與診斷回報:部分開發人員選項中的記錄功能會持續寫入。
  • 不要把內部儲存當下載碟:反覆下載、刪除大型檔案會製造大量無效 Page。
  • 5.3 手動觸發 fstrim(與風險提醒)

    若你確認系統的閒置維護長期未執行,可嘗試手動觸發。在具備權限的環境下(例如 root 或工程機),可執行:

    adb shell fstrim -v /data

    這會對 /data 分區執行 FITRIM,並回報實際丟棄的位元組數。若回傳「Operation not permitted」,代表權限不足,請勿強行操作。

    風險提醒:fstrim 是安全指令,不會刪除資料,但它會強制控制器進行一次大規模的 GC 與抹除,短時間內可能造成裝置發熱與輕微卡頓。建議在電量 50% 以上、不趕時間時執行,且不要在執行過程中斷電。

    5.4 系統設定調整

    幾個對儲存友善的設定調整:

    關閉「智慧預測」類功能中不必要的背景索引。

    將相簿的「裝置上分析」設定為僅在充電時執行。

    定期重開機,讓系統有機會完成延遲的維護工作。

    保持系統更新,Google 與 OEM 會持續修正 fstrim 的排程邏輯。

    5.5 換電池還是換手機?判斷標準

    當手機變慢時,很多人直接想換機。但從技術角度看,可以先做以下判斷:

  • 檢查 UFS 健康度:若 life_time_estimation 在 0x02~0x04,儲存晶片還很健康,不需要為此換機。
  • 檢查電池健康度:iOS 有內建,Android 可透過 AccuBattery 或原廠檢測工具查看。低於 80% 時,電壓不穩會導致 CPU 降頻,換電池往往能明顯改善。
  • 檢查可用空間:若長期低於 10%,先清理再說。

  • 檢查背景服務:用開發人員選項中的「執行中的服務」觀察是否有異常常駐程式。
  • 順序建議是:先清空間 → 再換電池 → 最後才考慮換機。多數「用兩年就卡」的案例,換一顆電池加上清理空間就能解決八成問題。

    六、常見問題 FAQ

    Q1:TRIM 會不會刪掉我的資料?

    不會。TRIM 只是告訴控制器「這些區塊的資料已經無效」,它不會主動清除檔案系統中仍被標記為有效的資料。真正刪除資料的動作仍由檔案系統負責。

    Q2:每天都手動跑 fstrim 好嗎?

    不必要。過度頻繁的 fstrim 會讓控制器不斷進行抹除與 GC,反而增加寫入。系統預設的每 24 小時一次已經足夠,手動執行建議間隔數週以上。

    Q3:UFS 健康度掉到 0x05 是不是快壞了?

    0x05 代表消耗 40%~50%,仍屬健康範圍。真正需要警覺的是 0x08 以上,或 pre_eol_info 顯示 0x02/0x03。

    Q4:記憶體越大手機就越不會卡嗎?

    不完全。RAM 影響的是多工與後台保留能力;儲存 I/O 影響的才是全域流暢度。12GB RAM 配一顆塞滿的 UFS,一樣會卡。

    Q5:舊機型沒有 UFS,只有 eMMC,怎麼辦?

    eMMC 的效能與壽命本來就較低,能做的改善有限。優先順序是清空間、關閉背景同步、降低錄影解析度,並把更換裝置列入規劃。

    結語

    「手機越用越慢」不是玄學,也不是廠商的計畫性報廢,而是一連串可被觀測、可被量化的物理與軟體行為:NAND 的抹寫限制、FTL 的垃圾回收、檔案系統的 TRIM 通報、以及使用者自己的空間管理習慣。

    下次當你覺得手機卡頓時,先別急著按「一鍵加速」。打開儲存空間看看剩下多少、用 ADB 查一下 fstrim 最後執行的時間、讀一下 UFS 的健康描述元。這些動作花不到十分鐘,卻能讓你少花一筆冤枉錢,也讓你的手機多撐一兩年。

    如果你在實作過程中遇到路徑讀不到、指令被拒的情況,歡迎把機型、Android 版本與錯誤訊息貼到雅寶社區 · 頂客論壇的 3C 科技教學版,社群裡有許多實際動手過的版友可以一起協助排查。

    ```

    🏠 返回首頁