2011年2月6日 星期日

Link to SD

幾天前國外知名論壇 XDA 放出一個讓 Android 2.1 使用者開心的消息,
就是:2.1 也可以將 App 移動到 SD 卡上啦!!

不過當然沒有那麼簡單,首先要做的事情就是要 root,使用步驟也很簡單
先將 SD 卡分割成 FAT32 和 ext2 兩個分割區,都必須是 Primary
(第一個分割區是 FAT32,第二個是 ext2)

我是使用 MiniTool Partition Wizard Home Edition 5.2 這套免費軟體分割的
但是初步推測是我筆電的讀卡機驅動程式的問題,一直無法正常分割...
到最後是用 Linux Base 的磁碟分割 Live CD 工具完成的...



完成後回到 Windows 用 MiniTool查看,確實分割成功我才放心。
(MiniTool 有一個 Resize 很好用,不會清除卡上的資料~)

Step 1: 準備一張含有 ext2 分割區的 SD 卡

Step 2~ Step6 is for MOTO User
Step 2: 原廠 ROM 不支援 ext2 磁區,所以要下載 ext2.ko 檔案
Step 3: 將 ext2.ko 放到 /system/lib/modules/ 底下(可以使用 RootExplorer)
Step 4: ext2.ko 的權限是 rw-r--r--
Step 5: 將手機連接上電腦,adb shell 指令,先 su 成 root (注意手機上的 superuser 警告)
Step 6: 下指令 insmod /system/lib/modules/ext2.ko 載入這個模組

Step 7: 安裝 Link2SD.apk,reboot 完工

Link2SD 會先在 /data/ 底下建立 sdext2 目錄
接著改寫 /system/etc/install-recovery.sh
將底下資料寫入:
insmod /system/lib/modules/ext2.ko
sleep 2
mount -t ext2 /dev/block//void/179:2 /data/sdext2

個人猜測 install-recovery.sh 應該是開機啟動的東西吧...
MOTO 的話裡面好像有檢查一些東西的指令碼... 不太清楚...
希望有人可以告訴我這個檔案的功能是啥...

暫時就先當成開機啟動的指令稿吧XD(玩過 Linux 應該知道什麼是 .sh XD)

第一行就是載入 ext2.ko 模組
第二行是暫停 2 秒(我記得 sh 的 sleep 單位是秒)
第三行稍微複雜,分成幾個部份:
mount -t ext2 ← 掛載類型是 ext2 (-t 是指定類型參數)
/dev/block//void/179:2 是來源,這裡指的是 sd card 上的 ext2 分割區
是不是每個機器都是這個位置我就不清楚了
/data/sdext2 就是掛載目的

整體來說就是把 /dev/(略)/179:2 以 ext2 的格式掛載到 /data/sdext2/ 上

所以每次開機就會幫我們掛載好了~


最多人詢問的問題是,這個程式和 App2SD 有什麼差別
簡單的說,App2SD 是把分割區掛載成 /data
這個 /data 就是我們在系統資訊裡面看到使用者還有多少空
間可以使用的分割區:



使用 RootExplorer 可以看到掛載的分割區是誰:





剛好發現這版的 RootExplorer 沒辦法顯示剩餘空間...
害我囧了一下.... 所以只好改顯示掛載的地方...


從圖上可以看到, /data 和 /data/sdext2 掛的分割區不同
如果是 App2SD 則是把 /data 掛給 SD 卡的 ext2 分割區,這是最大的差異

Link2SD 是把 .apk 檔案移動到 /data/sdext2 裡面,並在 /data/app 裡面留下
連結(玩過 linux 的應該對於 ln 指令不陌生吧?)
讓系統可以找對應的檔案。
也就是能節省的空間只有 .apk 的檔案大小而已 所有程式儲存的資料都還是放在 /data 中,也就是還會佔用一些內存。

而 App2SD 因為是把 /data 掛給 SD 卡,所以所有資料都是在 SD 卡上。

"聽說" Link2SD 的作法和 2.2 的 move to SD 作法相同是將 apk 移動
也就是儲存資料還是在內存裡,但是 2.2 的 Move to SD 在 SD 被掛到
電腦上時(傳輸線連接電腦),apk 檔案就會找不到,所以不見意放置系統
類型的程式和 Widget。

不過 Link2SD 因為只有 FAT32 的分割區會被掛載上去,所以在連接到電腦時
ext2 的分割區還是可以被系統找到,不會有問題。

不過經過比較,其實最理想的節省內存空間方式還是 App2SD 不過建議
SD Card Class 6 以上再來做會比較實際吧XD

另外關於幾個 Link2SD 常見的問題:

【移動 Market 下載的 App 】
移動後這個程式會從 Market 的 database 被刪除,並設定成未下載
這時候開啟程式,點選 Market Fix ,就可以修正這個 database。
如果修正後還是沒有出現,到 Market 隨便安裝一個東西就會出現了。
注意:點選 Market Fix 時,請確保沒有在下載東西、並不要執行 Market 程式

【更新 Market 的程式】
要更新 Market 的程式之前,請先 unlink 該程式,否則新的程式會被安裝到
/data/app/ 中, ext2 的舊程式還會存在。

【移除程式】
要移除被連結的程式,要先 unlink 回來,否則只會刪掉連結檔, apk 還是存在
ext2 中,不過新的 1.3.0 版本有提供 uninstall 按鈕,可以一並刪除 ext2 的 apk

【程式消失】
2.2 之前的系統,程式在link後程式不會被系統找到,移動完成後請重新開機才可以正常
的看到,不過目前我自己測試導航王(Naviking)好像重開機後也沒有出現,只好 unlink

最後附上我的使用圖XD


光是移動到 ext2 的 apk 舊有塊 70 MB,如果這些東西都在我的內存...
83MB 的 Free Space 就爆炸囉XD

2 則留言:

  1. 請問大俠,你是如何將“憤怒的小鳥”移至ext2?我的手機試了好幾遍還是不行。

    我現在發現憤怒的小鳥與GPS軟體無法用link2sd轉移至ext2.

    感謝

    回覆刪除
  2. 你好,我觉得那个应该是vold,而不是void

    回覆刪除