Nexus Sの内部ストレージを増やす

Nexus SはROMが16GBもあるのに、アプリ等のインストールに使われる内部ストレージには0.98GBしか割り当てられておらず、SDカードとして見えるUSBストレージには13.3GBも割り当てられている。しかし、プリインストールされているGoogle関連アプリは更新するとかなりの容量が内部ストレージから消費される為、空き容量がほとんど無くなり使い物にならなくなる。
同じようにROMが16GBあるGalaxy Nexusでは内部ストレージとして13.33GBが割り当たっており、SDカードとして見えるUSBストレージの代わりに内部ストレージがMTPモードでUSB接続して読み書きできるようになっている。
Nexus Sでも同じ構成に出来ないかと思っていたところ、XDA-Developersのフォーラムに[HOWTO]Combined emulated storage for the Nexus S (LVM)[UPDATE!: TWRP 2.8.4.0]とそのままの投稿があったので早速この手順に従ってやってみた。

概要

ストレージのパーティションを切り直すと思っていたが、それをリスキーと考えているのか論理ボリュームマネージャ(LVM)を使って/systemと/dataと/sdcardの各パーティションを1つにまとめ、そこから/systemに1GB、/dataに13GBを割り当てて使うというものだった。
当然ながらboot.imgやrecovery.imgにはlvmコマンドや設定ファイル、fstab.herring、init.herring.rc、init.herring.usb.rc、default.propのmountオプション等を論理ボリューム対応に書き換える必要がある。また、system.imgのframework-res.apkはstorage_list.xmlをUSBマスストレージからMTP対応となるように書き換える必要も出てくる。これらはsteven676氏のLVM関連リポジトリKreAch3R氏のNexus S用LVM対応リポジトリから必要なファイル等を取得できる。
これらを使えばAOSP KitKat 4.4.2 Mod for Nexus S等もLVMおよびMTPに対応させることが出来るような気がする。

ダウンロード

[HOWTO]Combined emulated storage for the Nexus S (LVM)[UPDATE!: TWRP 2.8.4.0]Downloadsからcustom built 2.8.4.0 TWRP(LVM対応カスタムリカバリ)とCM11-M12 ROM(LVM対応カスタムROM)を予めダウンロードしておく。

手順

これを行うとNexus SのデータがSDカード領域も含めて完全に全て消えてしまうので必要に応じて予めバックアップを取っておく。

  1. Nexus Sの音量(上)を押しながら電源を押し続けてドロイド君が表示されたら手を離す
  2. Android SDKをインストールしたPCとUSB接続して「fastboot flash recovery lvm-twrp-ext4-2.8.4.0.img」で先ほどダウンロードしたcustom built 2.8.4.0 TWRPをリカバリ領域に焼く
  3. Nexus Sの音量(上)と音量(下)で「RECOVERY」を選択して電源を押して今焼いたTWRPリカバリを起動する
  4. Android SDKをインストールしたPCとUSB接続して「adb shell」でシェルを起動する
  5. 「/lvm/sbin/lvm pvcreate /dev/block/mmcblk0p1 /dev/block/mmcblk0p2 /dev/block/mmcblk0p3」で/system、/data、/sdcardの各パーティションを物理ボリュームとして登録する
  6. 「/lvm/sbin/lvm vgcreate lvpool /dev/block/mmcblk0p1 /dev/block/mmcblk0p2 /dev/block/mmcblk0p3」で/system、/data、/sdcardの各パーティションをまとめたボリュームグループ lvpoolを作成する
  7. 「/lvm/sbin/lvm lvcreate -L 1G -n system lvpool」でボリュームグループ lvpoolから1GBを割り当てた論理ボリューム systemを作成する
  8. 「/lvm/sbin/lvm lvcreate -L 13G -n userdata lvpool」でボリュームグループ lvpoolから13GBを割り当てた論理ボリューム userdataを作成する
  9. 「exit」でシェルを終了する
  10. 画面が消灯していたら電源を押して「Swipe to Unlock」のメッセージに従って(→)アイコンを右へスライドしてロックを解除する
  11. 「Reboot」→「Recovery」の順をタップして「Swipe to Reboot」のメッセージに従って(→)アイコンを右へスライドしてリカバリを再起動する
  12. 「Wipe」→「Advanced Wipe」の順にタップして「System」にチェックを入れて「Swipe to Wipe」のメッセージに従って(→)アイコンを右へスライドして/systemをext4フォーマットする
  13. 「Back」→「Format Data」の順にタップして「yes」と入力(最後にEnterを押す)して/dataをフォーマットする
  14. 「Back」をタップして、戻るボタンを押して、「wipe」をタップして「Swipe to Factory Reset」のメッセージに従って(→)アイコンを右へスライドしてデータの初期化を行う
  15. PCとUSB接続して「Back」→「Mount」→「Enable MTP」をタップしてMTPモードで認識したら、「Nexus S」の「Internal Storage」に「cm11-m12-lvm-crespo.zip」(先ほどダウンロードしたCM11-M12 ROM)をコピーする
  16. 「Disable MTP」をタップして、戻るボタンを押して、「Install」→「cm11-m12-lvm-crespo.zip」の順にタップして「Swipe to Confirm Flash」のメッセージに従って(→)アイコンを右へスライドしてインストールする
  17. 「Reboot System」をタップして再起動する

これでMTPで読み書き可能な内部ストレージが12.7GBになったCyanogenMod 11 M12(Android 4.4.4)が起動する。