[G2 and Desire Z Android Development] amazinglarry311:
Pretty simple.

A rom with busybox, and init.d support are required.

all zips assume normal mmcblk1p2 ext partition on your sdcard.

If you have completely wiped your device flash this (WIPE):

apps2sd-simplev2-G2-DZ-WIPE.zip - sets up /data/app /data/data and dalvik-caches on ext partition

If you have apps in /data and want to keep them, but switch to apps2sd, flash this (NO-WIPE):

apps2sd-simplev2-G2-DZ-NOWIPE.zip - moves all apps installed to ext, moves all app data installed to ext, moves dalvik caches to ext, fixes permissions after moving depending on how many apps you have this takes a LONG TIME the be patient message should be followed, you can open adb shell during the update and check the sd-ext with df -h to make sure it's growing (give it twenty to thirty second between df -h runs) I flashed this with about 400mb of apps and data, booted perfectly. YMMV

after flashing your favorite rom update (no-wipe updates with roms that DO NOT PROVIDE APPS2EXT Support already, or you will need to disable this function first) flash this (MOUNTEXT):

app2sd-simplev2-mountext-G2-DZ.zip - creates a mount script that has more luck than the provided 05mountsd from cyanogen.

whats happening under the hood?

well i used a very common way of implementing apps2sd with symlinks. the fun part was having the updater-script pretty much do the whole process. instead of making a script and having that executed by the updater-script i used the updater-script itself to perform the scripting.

example (NO-WIPE)

assert(getprop("ro.product.device") == "vision" || getprop("ro.build.product") == "vision" || getprop("ro.product.board") == "vision");
run_program("/sbin/busybox", "mount", "/dev/block/mmcblk0p26", "/data");
run_program("/sbin/busybox", "mount", "/dev/block/mmcblk0p25", "/system");
package_extract_dir("system", "/system");
set_perm(0, 0, 0777, "/system/etc/init.d/05mountsd");
run_program("/sbin/busybox", "umount", "/system");
ui_print("Simple APPS2SD");
ui_print("Hope you made a backup of /data!!");
run_program("/sbin/busybox", "mount", "/dev/block/mmcblk1p2", "/sd-ext");
delete_recursive("/sd-ext/data/app/");
delete_recursive("/sd-ext/data/data/");
delete_recursive("/sd-ext/data/dalvik-cache/");
ui_print("Destroying dalvik-cache...");
delete_recursive("/data/dalvik-cache/");
delete_recursive("/cache/dalvik-cache/");
ui_print("Creating external data folders...");
run_program("/sbin/busybox", "mkdir", "-p", "/sd-ext/data/dalvik-cache");
ui_print("Moving existing apps.. BE PATIENT.");
run_program("/sbin/busybox", "cp", "-R", "/data/app", "/sd-ext/data");
run_program("/sbin/busybox", "cp", "-R", "/data/data", "/sd-ext/data");
delete_recursive("/data/data/");
delete_recursive("/data/app/");
ui_print("Linking directories...");
run_program("/sbin/busybox", "ln", "-s", "/sd-ext/data/app", "/data/app");
run_program("/sbin/busybox", "ln", "-s", "/sd-ext/data/data", "/data/data");
run_program("/sbin/busybox", "ln", "-s", "/sd-ext/data/dalvik-cache", "/data/dalvik-cache");
run_program("/sbin/busybox", "ln", "-s", "/sd-ext/data/dalvik-cache", "/cache/dalvik-cache");
run_program("/sbin/chown", "1000:1000", "/data/app");
run_program("/sbin/chown", "1000:1000", "/data/data");
run_program("/sbin/chown", "1000:1000", "/data/dalvik-cache");
run_program("/sbin/chown", "1000:1000", "sd-ext/data/app");
run_program("/sbin/chown", "1000:1000", "/sd-ext/data/data");
run_program("/sbin/chown", "1000:1000", "/sd-ext/data/dalvik-cache");
run_program("/sbin/busybox", "umount", "/data");
ui_print("Fixing permissions...");
set_perm(0, 0, 0777, "/sbin/fix_permissions");
run_program("/sbin/sh", "/sbin/fix_permissions");
ui_print("Done, give it a whirl.");

is this easier? no way. could have just done a script in two minutes, but where's the fun in that?

the mountext zip is for situations where you already have links setup, you just need to reflash /system for some reason (update, weirdness etc) just flash this directly afterward, and unless you wiped data you should be able to boot right back up.

why make flashable zips? a request, also people want this for rom's that don't natively support it, works on almost any rooted rom. i cant be sure of sense roms, but it shouldnt be any different.

Have fun everyone. let the flaming begin (for some reason my threads just attract trolls, go figure..)

i tested these for hours, seem to be working as planned, MAKE A BACKUP. if you dont, dont come a cryin'.

I don't endorse using external sd partitioning on the g2, but i'll try to stay up with suggestions or fixes should problems arise.