前言(除非新卡新手機、建議先稍看一下)
自Android 6.0開始支援Adoptable Storage(將SD卡格式化為「內部儲存(延伸)空間」)、透過合併SD卡擴增裝置儲存容量,將SD卡部分或全部格式化為F2FS或EXT4並加密。因此設定為Adoptables Storage的合併儲存區(SD卡)將無法如同一般SD卡可任意取出存取。類似於欠缺擴充能力的筆電、設定將SD卡或隨身碟視為固定硬碟模式使用。
注意:由於Android 10對於儲存媒體權限更動以提升安全性,因此啟用Adoptable Storage後、有可能發生合併儲存區檔案消失甚至分區損毀的情況,尤其也進行「遷移資料(Migrate Data)」、將「內部共用儲存空間/主儲存區」遷移至被合併SD卡的情況下。若要使用此功能、務必多加測試以確認穩定性。目前部分用戶在Android 10以上、多個品牌機種啟用Adoptable Storage多有資料遺失或損壞的情況,尤其重啟裝置後、或一天內就會發生。
此外、此項操作宜於新Android裝置使用或重置後進行,以免長時間安裝過多apps以及儲存過多資料、而導致操作失敗,或者運作後發生資料流失情況。若堅持在已長期運作系統操作,遷移資料(Migrate Data)必須在「安全模式(Safe Mode)」執行,否則極可能過程中發生記憶卡存取逾時而離線、或提示內容損毀(若有此狀況、通常重開機即可恢復),而導致操作失敗。
除非只想嘗鮮玩玩,正式使用千萬別隨便亂找些低效能爛卡、尤其是網拍那類來路不明的1折擴容假卡、而抱怨Adoptable Storage是個損壞資料的爛功能--爛的是心存僥倖用爛卡的人、不是Adoptable Storage的問題。UHS-1 U3是起碼條件、A1或A2更佳,尤其若要遷移資料與日後穩定運作更是關鍵。Adoptable Storage記憶卡傳輸穩定性與隨機存取IOPS效能息息相關、而非偏重於循序大量資料傳輸效能。文末將提供測試範例參考,在PC能跑出漂亮數據的記憶卡、不必然在手機的Adoptable Storage也能有出色表現。
Adoptables Storage表面上似乎讓SD卡與裝置儲存區「整合」、可以任意搬移apps至SD卡並建立連結,但實際上仍有使用限制--
1.若同時啟用「開發人員選項--強制允許將應用程式寫入外部存儲空間(Force allow apps on external)」設定、而將apps移轉至合併空間(SD卡),但在安裝安全更新與Google Play系統更新、或者其他apps更新時若失敗(如瀏覽器共用元件 com.google.android.trichromelibrary 無法更新),請先暫時停用此設定再安裝或更新之後再啟用(不建議啟用此設定:其一有可能造成系統運作異常或更新失敗的疑慮;其二SD卡效能遠不如裝置儲存空間,透過資料移轉(migrate data)功能將「主要資料儲存區(內部共用儲存空間)」轉移至合併空間、以節省裝置儲存空間、以安裝更多apps是較佳的應用方式)。
2.需配合「裝置管理員應用程式」設定的apps、若移至合併後的SD卡,將無法出現於「裝置管理員應用程式」清單中並設定,如Microsoft Authenticator。
3.若遷移具有螢幕小工具的apps至合併的SD卡,小工具將消失、無法啟用,此種情況只能將需使用螢幕小工具的apps存放於裝置儲存區內。
4.即便設定強制將apps安裝至外部空間、也非所有apps都能隨意移轉至Adoptable Storage,必須apps本身設定可安裝或遷移至SD卡;若為系統內建(含更新後的)、或受限只能安裝於裝置儲存區的apps也無法移轉。
但不將裝置root的情況下,Adoptable Storage是最佳也是唯一以合併SD卡、取代裝置「內部共用儲存空間」(主儲存區 /storage/emulated/0/)存放使用者資料,而釋出更多裝置儲存容量、以安裝更多apps的手段--畢竟仍有apps只能將外部資料存放於「內部共用儲存空間」、無法設定存放至「可攜式儲存裝置」的SD卡(/storage/sdcard/),而耗用裝置的儲存容量;也適於遷移佔用龐大空間、且重要性或效能取向偏低的apps至合併的SD卡,進一步減低對裝置儲存空間的消耗。
以下介紹如何透過ADB啟用隱藏的Adoptable Storage功能
某些Android裝置並未開放此功能設定(在儲存裝置的SD卡格式化未顯示「作為內部儲存裝置」項目),也可嘗試透過ADB shell以指令方式完成;此外若欲將SD卡設置為混和模式(mixed)並按比例分配分區,也需要透過ADB以指令操作。
1.首先在裝置開啟「開發人員選項--USB除錯模式」,接著透過USB傳輸線與PC連接(PC端Windows必要的ADB工具下載、索取OEM ADB驅動或公版ADB驅動下載)。
2.在PC(以下操作環境為Windows)命令提示字元透過指令adb shell進入遠端操作模式。
3.在指令模式可透過sm指令與相應參數進行操作(可直接執行sm列舉可用參數)。
sm has-adoptable 可查詢系統是否啟用Adpotable Storage功能,若為結果為 true 則可設定。
sm set-force-adoptable [true|false] 若系統預設未開啟Adoptable Storage功能、可嘗試透過sm set-force-adoptable true強行開啟;也可以sm set-force-adoptable false關閉。
sm list-disks adoptable 列出可設定為Adoptable Storage的SD卡,結果為 disk:xxx,yy 。
sm list-volumes [public|private|emulated|all] 分區列舉--
sm list-volumes all --可列出SD卡全部分區(類似磁碟分割區)。
sm list-volumes public 或 emulated --列出SD卡上的一般儲存區(可攜式儲存裝置、FAT32或exFAT)。
sm list-volumes private --列出SD 卡上掛載為Adpotable Storage的儲存區(合併空間、加密F2FS或EXT4),結果為 private:xxx,yy mounted UUID,作為以指令 pm move-primary-storage UUID 設定「遷移資料」至Adpotable Storage參照之用。
sm partition disk:xxx,yy [public|private|mixed] [ratio] 設定SD卡使用模式。注意、進行此操作將完全刪除SD卡內容、務必先備份SD卡。
sm partition disk:xxx,yy public 將SD卡100%格式化為一般儲存空間(FAT32或exFAT)、即SD卡格式化為「可攜式儲存裝置」;
sm partition disk:xxx,yy private 將SD卡100%格式化為Adoptable Storage(合併空間、加密F2FS或EXT4)、即SD卡格式化為「內部儲存裝置」;
sm partition disk:xxx,yy mixed ratio 將SD卡按比例格式化為一般儲存空間與Adoptable Storage混和模式。
disk:xxx,yy為支援Adoptable Storage的SD卡、以 sm list-disks adoptable 查詢;ratio為指定一般儲存區分配空間所佔百分比(整數)、剩餘空間則為Adoptable Storage。並非所有裝置皆可支援混和模式(mixed)、有可能執行變更後回報儲存區損毀,此時只能將SD卡配置為單一public或private模式、無法使用mixed混和模式。混和模式唯一的好處是、分配一部分的SD卡空間以「可攜式儲存裝置」模式存取,若SD卡發生邏輯性存取錯誤、存於該處的資料有較大的機會取回。務必使用品質與效能較可靠的SD卡、並建議完全格式化為100%合併空間、情況也較單純;畢竟那些連SD卡都沒得用的裝置、出問題資料一樣完蛋,常備份才是正途。完全合併後的SD卡加密也可避免遭盜卡竊取資料。
4.a.合併SD卡為內部儲存空間後、可查看「設定--儲存空間」已合併的SD卡是否有「遷移資料」(Migrate Data)的項目,若不設定、系統將繼續以裝置「主要資料儲存區」作為主儲存區存放外部資料,例如相片、影片、音樂等使用者資料,以及apps的外部資料;完成「遷移資料」設定後、才會將上述檔案移轉至合併的SD卡、取代裝置的「主要資料儲存區」成為主要儲存空間(/storage/emulated/0 將指向該處)。
b.若已合併的SD卡設定介面無「遷移資料」項目、也可透過指令 pm move-primary-storage UUID 遷移「主要資料儲存區」至合併的SD卡、UUID可透過 sm list-volumes private 查詢。
合併SD卡配合「遷移資料」變更主要儲存空間位置、能更有效提升裝置儲存容量。但執行此功能可能遭遇轉移後資料損壞的問題、請注意本文開頭介紹別用低效能卡、務必先備份重要資料並重開機確認功能正常、檔案無遺失損毀情況。
另可透過指令 sm get-primary-storage-uuid 確認作為主要資料儲存區的UUID。完成遷移、查詢結果將顯示為SD卡的UUID(與 sm list-volumes private 查詢結果一致);若查詢結果為 null,表示主要資料儲存區未移轉或移轉失敗。
若要取消「遷移資料」連結至合併的SD卡,可至「設定--儲存空間--內部共用儲存空間」執行「遷移資料」、即可將SD卡的外部資料再遷回裝置「內部共用儲存空間」、或透過指令 pm move-primary-storage internal 遷回,但執行前須注意裝置可用儲存容量是否大於遷回資料量。遷移資料(Migrate Data)務必在「安全模式(Safe Mode)」執行、以避免操作失敗甚至資料損毀。「安全模式」在行動裝置關機畫面輕觸「關機」或「重新啟動」1~2秒以上即會提示進入。
※5.某些Android裝置的apps管理功能已取消搬移apps至外部SD卡(Adoptable Storage)功能,可嘗試開啟「開發人員選項--強制允許將應用程式寫入外部存儲空間」設定(Force allow apps on external、不建議開啟此項設定、請參考開頭「使用限制」可能發生的問題),再進入欲搬移的apps儲存空間管理介面,應會出現「變更」按鈕,點擊即能強制搬移指定apps。若無「變更」按鈕出現、即該app無法轉移至合併空間。
其餘用處不大的指令--
sm mount VOLUME 掛載SD卡指定分區
sm unmount VOLUME 卸載SD卡指定分區
sm format VOLUME 格式化SD卡指定分區(系統依SD卡分區類型自行決定格式)
sm benchmark VOLUME 測試Adoptable Storage分區效能 sm benchmark private:xxx,yy
sm fstrim 執行Trim(似乎無效)
sm forget [UUID|all] 取消指定UUID或全部可卸除裝置(SD卡)的Adoptable Storage設定
若要將SD卡重新格式化為「可攜式儲存空間」,將會直接刪除SD卡所有資料。因此將SD卡轉換回「可攜式儲存空間」前、務必將apps以及「主要資料儲存區」轉移回裝置內、並備份SD卡「主資料儲存區」的所有資料。
此外某些SD卡使用Adoptable Storage發生容量顯示異常的情況,SD卡標示容量被誤報一倍、但同時多出的空間也會被視為已使用。手邊測試過Samsung EVO Plus MB-MC256HA有此現象,但Kingston Canvas Go Plus SDCG3/256GB則正常。猜測應當是實際容量(二進位)轉換為標示容量(十進位)導致此一情況--一般標示容量256GB實際約238GB,MB-MC256HA實際容量近239GB、SDCG3/256GB則為230GB,實際容量超過238GB轉換為標示容量就被誤判為512GB。超量換誤報似乎也滿愉快的~
附上前後測試的兩張256GB SDXC卡、在Nokia 5.3 (Android 11) Adoptable Storage的性能表現。雖有些評論認為A2卡並未比A1卡效能翻倍、甚至還有衰退的情況,實測後、雖A2的SDCG3/256G的4K隨機寫入IOPS未達A2的2000,但也比另一張準A1的MB-MC256HA數值翻倍。當然還是遠比不上eMMC甚至UFS的IOPS。
在Windows 10 PC以Anvil測試的結果、MB-MC256HA的4K隨機讀取IOPS反倒略高於SDCG3/256HA。
平台效能各有差異、只能親身體驗。不過前面提到「遷移資料」、即便在安全模式下MB-MC256HA仍是會發生記憶卡消失、遷移失敗的情況,尤其若遷移資料過多。但SDCG3/256GB即便在一般模式進行遷移資料也無此問題;且平常使用、IOPS效能較佳也不會在重開機後發生MTP主機停止運作的問題。





