一、前言
真是搞不懂MTP(媒體傳輸模式)這種傳輸模式為什麼會廣泛使用
不僅慢還常常會發生圖片資料毀損的情況
還我MSC(大量儲存模式)啊...
二、研究動機與目的
在處理手機.thumbnails資料夾的時候
發現刪除了容量還是回不來
只好備份資料後格式化內建儲存空間
備份拉出資料的速度還算可以
12G大檔混小檔的檔案一個小時左右完成
但要還原的時候真的讓人吐血
事前就知道MTP傳零碎檔超級慢
所以我放著12小時去睡覺
睡醒居然還沒跑完那堆資料(LINE的零碎檔和2萬張照片占大多數)
有人可能會問,為什麼不手機開FTP直接扔過去比較快
1.零碎檔斷線又傳斷線又傳
而且多檔連線常常會跳出失敗
不會快到哪裡去
2.如果使用FTP傳輸或adb backup
adb backup -shared -nosystem -f "sd.ab"
還原回去的時候會是一個「全新」的檔案
一些跟日期沒有關係的檔案可能無傷大雅
但照片及影片的檔案排序會整個亂掉
在看圖的時候會非常不方便
三、文獻探討
上網爬完之後發現不只我在罵
原來已經幹聲一片好幾年了= =
現在除了少部分廠商的4.x系統可以使用MSC模式以外
5.x以上基本都已經是強制走MTP了
而有人就質疑了「明明還可以用push,為什麼把MSC取消了?」
這段話明顯是兩個不同的東西看起來很搞笑XD
但卻讓我想到可以用adb pull和push來達到我要的效果
備份: adb pull /sdcard x:\ooo (全部備分)
adb pull /sdcard/aaa x\ooo\aaa (單獨備份資料夾)
註3.1. x:\ooo\為你要在電腦上放置的目錄,不寫就是同adb.exe位置
註3.2. 它是複製「該資料夾內的檔案」不是「資料夾」直接過去
因此備份及還原時請務必在目的路徑加上原資料夾名稱
還原: adb push x:\ooo /sdcard (全部還原)
adb push x:\ooo\123 /sdcard/123 (單獨還原資料夾)
四、結論
1.零碎小檔還原傳輸速度(以LINE零碎圖片暫存檔為例)
a.使用MTP的速度是: 2秒1個
b.使用FTP的速度是: 1秒5~10個
c.使用adb pull/push的速度是: 1秒25個以上 (說以上是因為跑太快我看不清...)
2.單就資料結構完整性來說
a.MTP 可以保留 媒體拍攝時間
b.FTP 無法保留 媒體拍攝時間
c.adb pull/push 可以保留 媒體拍攝時間
3.檔名名稱編碼支援度
a.MTP 支援 非英數檔名
b.FTP 支援 非英數檔名
c.adb pull/push 不支援 非英數檔名
註4.1. 下指令後日語及簡體錯誤會馬上告知,不會跑一半才報錯
註4.2. 中文不會報錯,但會產生資料錯誤及檔案遺漏
綜合以上結果可知
目前尚有與MSC同樣效能與穩定性的傳輸方式
英文文件使用adb pull/push,非英文文件另外獨立使用MTP
是現在備份/還原內建儲存空間最好的折衷方法