I have been reading another thread in tips/theory section. and here it says.
I want to thank JVene for his work and confirm that I implemented this successfully. JVene's posts are informative, but long-winded, so here is a TL;DR for people that want to try this. I'm assuming you vaguely know what you're doing (comfortable with linux command line), so I'm not going into extreme detail. Read all the steps first and if it doesn't make sense, I wouldn't recommend trying it as you could mess something up.
1. Partition and format an SD card with a Fat32 partition (1st) and an Ext4 partition (2nd). Choose your size for each. Fat32 will be your new "sd card" and Ext4 will be your new "internal storage".
2. Download and extract the app_process binary that JVene attached to one of his posts.
3. Mount /system read-only ("mount -o remount,rw /system", you need root). Rename your original /system/bin/app_process to something else for backup. Copy JVene's app_process to /system/bin/app_process.
4. Create /system/etc/init.d/zinit.sh (in a nutshell, JVene's modified app_process runs this script before Android initializes) and chmod 755 zinit.sh.
5. Insert "#!/system/bin/sh" as the first line in zinit.sh, then insert your boot-time commands below it. You have several options for your commands, what I personally did was mount the ext4 partition at a temp mount point, copy /data to it, then mount it at /data. This will copy /data to the ext4 partition of the sd card while keeping your original /data partition intact. You can also enable USB debugging beforehand and enter sleep x as your command where x is the number of seconds you want the device suspended prior to loading Android. This will give you time to connect with ADB and manually perform file operations. You could also just mount the new partition at /data and start with a clean slate. The ext4 partition on the sd card is /dev/block/mmcblk1p2, so to mount it at /data: "mount -o rw -t ext4 /dev/block/mmcblk1p2 /data".
6. zinit.sh will be executed during each boot. If you added commands to temporarily mount your sd card partition and copy your current data partition to it, remember to remove them after the first reboot. Your first reboot will also take a fair amount of time at the boot screen as your /data partition is copied. The only command that stays in your zinit.sh file after the first boot is the mount command (unless you want to do more).
It's pretty specific to start. but then goes kinda general. i.e. 1-3 no problem, 4 split, first part I get second part I don't. First part of 5 I think I understand, the second part not sure where to insert what it's talking about. Hopefully the Dev team can figure this out.