スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Date: --.--.-- Category: スポンサー広告   

data2sd

Desire の弱点のひとつである、/data 容量をなんとかする方法で、APP2SD のように一部を SD カードに移すのではなく、/data 全体を SD カードに移してしまいます。
単純に SD カードを /data にマウントすると何かと問題があるらしく、SD カードにイメージファイルを作成し、それをループバックマウントするようです。ループバックマウントするとなぜ大丈夫なのかは知りません。
詳細はこちらを参照してください http://forum.xda-developers.com/showthread.php?t=852219

まずは必要なものです。
・早い MicroSD カード (早ければ早いほど可)
・最新の busybox コマンド (busybox のサイトか、上記 XDA フォーラムの添付ファイルをダウンロード)
・使用する ROM のカーネルが、ループバックパーティションと EXT2/3/4 パーティションをサポートしている
・使用する ROM が、init.d スクリプトをサポートしている

以上です。
添付ファイルがいくつかありますが、それぞれ以下のとおりだと思います。必要なファイルをダウンロードして使用してください。
今回は「01data.txt」「e2fsck_recvy.zip」「busybox-1.17.3.zip」をダウンロードしました。
e2fsprogs-arm.zip :EXT2/3/4 パーティション関連のツール。ディスクのチェックやフォーマットをする為に必要。
01data.txt :data2sd を実施するスクリプト。必須。
e2fsck_recvy.zip :01data.txt から使用されるコマンド。必須。
install-recovery.zip :init.d スクリプトをサポートするように設定するスクリプト。使用する ROM が init.d をサポートしていない場合は必要。
busybox-1.17.3.zip :data2sd で動作確認している busybox。busybox のバージョン違いなどで動作しない場合はこれを使用する。

ちなみに、手動で data2sd を使用するのであれば、root 権限が取れていて、上記必要な物を満たしている ROM ならどんな ROM でも (理論上は) data2sd を使用できると思います。


では実施していきます。

Step1 データのバックアップ
なにがあっても取りかえしがつくように、必要なデータはバックアップしておきます。既に App2SD 等を使用していた場合は、ちゃんと /data/app 等の内容も忘れずにバックアップしておきましょう。
どこのファイルをバックアップする、とかではなく、すべてをバックアップしておくべきです。

Step2 SD カードにパーティションを二つ作成する
SD カード (MicroSD カード) を、通常のデータ用と /data パーティション用の二つのパーティションに分割します。Linux を使える PC から実施するか、Desire で実施することも可能だと思います。
なお、/data パーティションに割り当てる領域ですが、2GB 以上にすると問題があるそうです。報告があったのは Market アプリだとか。なので、最大でも 2GB 以内を割り当てるようにすると良いかと思われます。
推奨は 1GB と書いてあります。
同じく /data パーティションに割り当てる領域ですが、リンク先では FAT32 にする必要があると書いてあります。この領域自体のファイルシステムは関係ないような気もしますが。。。(mount コマンドでも、ファイルシステムタイプを指定していないので、ext2 などでもマウントできると思います) なにか不具合があっても大変なので、FAT32 でフォーマットしました。もし Desire で第二パーティションを FAT32 フォーマットする場合は、リンク先から busybox をダウンロードしてきて、
/system/xbin/busybox mkdosfs -F 32 /dev/block/mmcblk0p2
のような感じでフォーマットできると思います (busybox を /system/xbin に配置した場合)

Step3 Desire をリカバリモードで起動して、必要なファイルを配置する
方法は問わないので、リカバリモードで起動します。要は /system が書き込める状態にするということです。リカバリモードで起動したら、PC から
adb shell
を実行し、Desire のシェルに入って
mount /system
と /system をマウントして
exit
で PC のシェルに戻ります。

必要なファイルを Desire にコピーします。e2fsck_recvy は既に含まれている ROM もあるようですので、その場合は e2fsck_recvy に関しては実行しなくても大丈夫のはずです。
PC から、
adb push busybox /system/xbin
adb push e2fsck_recvy /system/bin
adb push 01data.txt /system/etc/init.d/01data
続いて Desire のシェルに入り、コマンドのパーミッションと所有権を変更します。
adb shell
chmod 755 /system/bin/e2fsck_recvy
chown 0.2000 /system/bin/e2fsck_recvy
chmod 755 /system/xbin/busybox
chown 0.0 /system/xbin/busybox
chmod 755 /system/etc/init.d/01data
chown 0.0 /system/etc/init.d/01data
exit

Step4 ループバックマウント用のイメージファイルを作成する
まずは Desire のシェルに入ります。
adb shell
続いて /data のマウントと、SD カードの第二パーティションをマウントします。第二パーティション用のマウントポイントはデフォルトでは存在しない場合があるので、作成してからマウントします。
mount /data
mkdir /sd-ext
mount /dev/block/mmcblk0p2 /sd-ext
ループバックマウント用のイメージファイルを作成し、ext2 でフォーマットします。
dd if=/dev/zero of=/sd-ext/ext2 bs=1048576
/system/xbin/busybox mke2fs -m 0 -F -L userdata /sd-ext/ext2
dd コマンドを実行する際に、”デバイスに空き領域が足りない”のようなエラーが表示されると思いますが、これは無視して大丈夫です。パーティション全体を使い切るだけのイメージファイルを作成するため、パーティションサイズより大きい値を指定しているようです。

Step5 /data をコピーする
あとは作成したイメージファイルに /data のファイルをコピーしていきます。
mkdir /sd
/system/xbin/busybox mount -o loop /sd-ext/ext2 /sd
(もしここで「loop can't setup loop device: No space left on device」のようなエラーが出る場合、その時のカーネルがループバックマウントをサポートしていない可能性があります。補足を参照して、サポートしているかどうか確認してみてください。リカバリモードのカーネルは、通常動作の時のカーネルとは異なるので、注意が必要です。)
cd /data
cp -a * /sd
(もし App2SD を既に使用していた場合、/data/app などがシンボリックリンクになっているので、一旦リンクを削除して、ディレクトリをつくり直す必要があります。その上で、バックアップしておいた app などをコピーしてください。)
cd /
sync
終わったら、「ls -l /sd」や「df -h」コマンドを使用して、容量やディレクトリ構造がちゃんとコピーされたか確認します。
確認が終わったら、
/system/xbin/busybox umount /sd
として、マウントを解除します。

Step6 再起動
あとは Desire を再起動・・・の前に、必ず App2SD 用のスクリプトを削除します。oxygen 2.0 RC2 の場合は /system/etc/init.d/10apps2sd というファイルなので、Desire のシェルから
rm /system/etc/init.d/10apps2sd
と実行します。
それから再起動すれば、/data がループバックマウントされた領域に移動します。


こんな感じです。

*補足1 ループバックデバイスをサポートしているかどうかを調べる方法
Desire のシェルで、
zcat /proc/config.gz | grep -i loop
と実行して、
CONFIG_BLK_DEV_LOOP=m
という出力があればOKです。最後が「m」でなくても、「y」ならOKですが、「n」の場合はサポートしていません。
注意が必要なのは、通常起動のカーネルがループバックデバイスをサポートしていても、リカバリモードのカーネルでもループバックデバイスをサポートしているかどうかを確認しないと、/data をコピーすることができないので注意してください。

*補足2 ループバックマウントせずに、SD カードの第二パーティションを直接 ext2/3/4 でフォーマットして、/data にマウントする
わざわざループバックマウントする手間をせずに、直接パーティションを ext2/3/4 でフォーマットしてしまうことも、可能なようです。最初の XDA のリンクの、「7. Comments」以下にその手順が書かれています。01data スクリプトを変更する必要があるようですね。
しかし、I/O が遅く、特に小さいファイルの時に性能が落ちるようです。
もしやってみたいという方は、XDA を参考にしてみてください。

*補足3 ext2/3/4 はどれが良い?
個人的には ext2 がベターかと思いますし、上記 XDA のリンク先でも ext3,4 は「not recommended」と言っています。
ext3,4 はジャーナリングがあるので、データの安全性は高いですが、その分速度は遅くなります。また、ジャーナリングは書き込み回数も多いですので、ウェアレベル的にもあまりよろしくない可能性があります。
ext2 でも I/O 速度による動作速度の低下はみられますので、積極的に ext3,4 を使う理由必要もないのでは、と思います。btrfs とかが使えると、また違うのかもしれませんけどもね。
スポンサーサイト
Date: 2010.12.27 Category: desire  Comments (1) Trackbacks (0)
最新記事
最新コメント
ウィジェット
月別アーカイブ
カテゴリ
プロフィール

Author:SC3WO06A
FC2ブログへようこそ!


検索フォーム
RSSリンクの表示
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。