[Galaxy S] Galaxy S のプチフリ対策(外部SDカード利用)
2010/07/17 2件のコメント
[更新] プチフリに関して検索でこのページを訪れる方が多いので、更新しておきます。
現在、プチフリ対策として、SDカード利用は古いです。また、キーワードとしては、LagFix を使ってみてください。
CFLagFix や、OnClickLagFix apk Voodoo LagFix があります。
[Galaxy S] CFLagFix v1.70 for SGSをやってみた
本ブログでも最新の LagFix を試しているのでそちらも参照してみてください。
Galaxy S は、内部のデータファイルを置いてあるパーティションが遅くアプリケーションの切替時や日本語入力時に一瞬止まるプチフリが起こります。
ファームのバージョンアップでかなり改善されて来ていますが、日本語入力時に止まるのは、やはり辛いです。
アプリケーションのデータを別のパーティションに移動して対処する方法がいくつかあり、特に高速化が期待出来るのが /dbdata にデータを移動する方法です。
しかし、/dbdata パーティションは容量が少なく大きなアプリケーションをダウンロードしてインストールする場合に問題が出たりします。
別の方法として、速度の速いタイプのSD カードに別パーティションを作成しデータを置く方法を考えていました。
外部のSDカードは、FAT32でフォーマットされ /sdcard/sd にマウントされますが、マウントされるのは1番目のパーティションだけで2番目以降のパーティションは自動ではマウントされません。
この2番目のパーティションを ext3/ext4 でフォーマットし利用する方法です。
SDカード上のパーティションをマウントするには、
- kernel でのファイルタイプのサポート
- /init.rc での mount 指定
が必要になり、Custom ROM を作る必要があります。
Custom ROM を作る為に情報を集めていたところすでにやっている方がいました。
UPDATED : Real fix for the “stalling/lagging” problem (Android @ MoDaCo)
ext3, ext4 対応の kernel と mount 設定した /init.rc を作成し、イメージを公開しています。
早速導入してみました。
Galaxy S は rooted してrootが取れている必要があります。
※ Linuxの操作知識が必要になります、自己責任で実施してください
パーティションを作るだけなら、Galaxy S でも可能ですが ext3/ext4のフォーマットが出来ないため、Linuxかツールを使ってパーティション作成とフォーマットを行います。
ツールについては、フォーラムに記載してある、gparted か paragon hard disk manager が使えるようです。
(このblogで紹介しているLiveCD から ブートUSBを作成する方法でも可能です)
私は、KURO-SHEEVA を使ってパーティション作成とフォーマットを行いました。
MicroSDカードは、Transced の Class6 8GB microSDHC カードを使っています。

Transcend microSDHCカード Class6 (amazon.co.jp)
KURO-SHEEVA に USBアダプター(amazon.co.jp)で接続します。
KURO-SHEEVA に接続すると、/dev/sda として認識されます。
USBブートした場合などは、/dev/sdb 等になりますので、dmesg などでログを確認してください。
# fdisk -l /dev/sda Disk /dev/sda: 8017 MB, 8017412096 bytes 247 heads, 62 sectors/track, 1022 cylinders Units = cylinders of 15314 * 512 = 7840768 bytes Disk identifier: 0x00000000
パーティションを作成します。1番目をFAT32で約6.8Gにし、残りを2番目としてext4で約1.2G割り当てます。
(ext4の方が若干早いらしいです。)
# fdisk /dev/sda Command (m for help): p Disk /dev/sda: 8017 MB, 8017412096 bytes 247 heads, 62 sectors/track, 1022 cylinders Units = cylinders of 15314 * 512 = 7840768 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 <-- 1番目のパーティション作成 First cylinder (1-1022, default 1): <リターン> Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1022, default 1022): +6800M Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 <-- 2番目のパーティション作成 First cylinder (869-1022, default 869): <リターン> Using default value 869 Last cylinder or +size or +sizeM or +sizeK (869-1022, default 1022): <リターン> Using default value 1022 Command (m for help): t <-- 1番目のパーティションタイプをLinux -> FAT32に変更 Partition number (1-4): 1 Hex code (type L to list codes): L <-- パーティションタイプの確認(知っていれば不要) 0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot 1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris 2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx 6 FAT16 42 SFS 86 NTFS volume set da Non-FS data 7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT 10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b 12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor 16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT 1c Hidden W95 FAT3 75 PC/IX Hex code (type L to list codes): c <-- W95 FAT32 (LBA) を指定 Changed system type of partition 1 to c (W95 FAT32 (LBA)) Command (m for help): w <-- パーティション情報の書き込み The partition table has been altered! Calling ioctl() to re-read partition table. sd 2:0:0:0: [sda] Assuming drive cache: write through sda: sda1 sda2 sd 2:0:0:0: [sda] Assuming drive cache: write through sda: sda1 sda2 WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. Syncing disks. # fdisk -l /dev/sda <-- パーティション情報の確認 Disk /dev/sda: 8017 MB, 8017412096 bytes 247 heads, 62 sectors/track, 1022 cylinders Units = cylinders of 15314 * 512 = 7840768 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sda1 1 868 6646245 c W95 FAT32 (LBA) /dev/sda2 869 1022 1179178 83 Linux # # mkfs.vfat /dev/sda1 <-- 1番目のパーティションをvfatでフォーマット mkfs.vfat 3.0.1 (23 Nov 2008) # mkfs.ext4 /dev/sda2 <-- 2番目のパーティションをext4でフォーマット mke2fs 1.41.3 (12-Oct-2008) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 73728 inodes, 294794 blocks 14739 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=301989888 9 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 36 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. #
USBアダプターをKURO-SHEEVAから取り外してパーティションの作成は完了です。
パーティション変更前のSDカードの状態(Total space 7.46GB)
パーティション変更後のSDカードの状態(Total space 6.34GB)
次に、Galaxy S で SDカードの2番目のパーティションの ext4 のマウントを出来るようにします。
フォーラムから、Download v4 (ext4) support: からファイルをダウンロードします。
ダウンロードしたファイル(Kernel_GalaxyS_mimo_ext4_v4.tar)を、odin3を使ってGalaxy Sに書込みます。
手順は、Galaxy Sのファームアップデートの手順と同じです。
Odin3を起動して、PDAにダウンロードしたKernel_GalaxyS_mimo_ext4_v4.tar だけ を指定します。
Galaxy Sのボリューム下+HOME+電源ボタンを押してダウンロードモードにしPCに接続します。
Odin3の “Start” ボタンを押して書込みます。
書込みが完了すると、Galaxy Sが再起動してきます。
About Phone を見ると Kernel versionが2.6.29 root@ubuntu #1 になっています。
パーティションを確認するとSDカードの2番目のパーティション(/dev/block/mmcblk1p2)が/diskにext4でマウントされています。
# mount mount rootfs / rootfs ro 0 0 tmpfs /dev tmpfs rw,mode=755 0 0 devpts /dev/pts devpts rw,mode=600 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 /dev/block/stl6 /mnt/.lfs j4fs rw 0 0 tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0 none /dev/cpuctl cgroup rw,cpu 0 0 /dev/block/stl9 /system rfs rw,vfat,llw,check=no,gid/uid/rwx,iocharset=utf8 0 0 /dev/block/mmcblk1p2 /disk ext4 rw,noatime,nodiratime,barrier=1,data=ordered 0 0 /dev/block/mmcblk0p2 /data rfs rw,nosuid,nodev,vfat,llw,check=no,gid/uid/rwx,iocharset=utf8 0 0 /dev/block/stl10 /dbdata rfs rw,nosuid,nodev,vfat,llw,check=no,gid/uid/rwx,iocharset=utf8 0 0 /dev/block/stl11 /cache rfs rw,nosuid,nodev,vfat,llw,check=no,gid/uid/rwx,iocharset=utf8 0 0 /dev/block/stl3 /efs rfs rw,nosuid,nodev,vfat,llw,check=no,gid/uid/rwx,iocharset=utf8 0 0 /dev/block//vold/179:1 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0102,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 /dev/block//vold/179:9 /sdcard/sd vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 # df df /dev: 166704K total, 0K used, 166704K available (block size 4096) /mnt/.lfs: Function not implemented /sqlite_stmt_journals: 4096K total, 0K used, 4096K available (block size 4096) /system: 282432K total, 255072K used, 27360K available (block size 4096) /disk: 1160632K total, 34212K used, 1126420K available (block size 4096) /data: 1963952K total, 159760K used, 1804192K available (block size 16384) /dbdata: 130280K total, 13176K used, 117104K available (block size 4096) /cache: 30792K total, 44K used, 30748K available (block size 4096) /efs: 6064K total, 4103K used, 1961K available (block size 1024) /sdcard: 6060544K total, 12096K used, 6048448K available (block size 32768) /sdcard/sd: 6644576K total, 32K used, 6644544K available (block size 32768)
次は、SDカードの2番目のパーティションにアプリケーションの data をコピーします。(フォーラムに書いてあります)
adb shell su - busybox cp -rp /data/data /disk/ busybox mv /data/data /data/data.bak busybox ln -s /disk/data /data/data marketの問題を修正するために行う手順です。 busybox mv /system/media /disk/ busybox ln -s /disk/media /system/media 設定が終わったらGalaxy Sを再起動します。 reboot
これで、アプリケーションデータが外付けSDカードを参照するようになりました。
使ってみたところ、日本語入力時のプチフリが無くなり快適に入力出来るようになりました。
手順としては、SDカードのフォーマットが大変ですが、ツールを使うなりすれば出来るかと思います。
Galaxy S用のext4フォーマットソフト(mkfs.ext4)を移植すれば、Galaxy S単体で出来るようになるので、どっかに落ちてないか調べてみたいと思います。





ピンバック: [Galaxy S] プチフリ対策後のベンチマーク結果 « Gagdet's Blog
ピンバック: [Galaxy S] I9000XWJM1+プチフリ対策のベンチマーク « Gagdet's Blog