FORUMS

Galaxy S6 & Edge get €100 Price Cut—New Models Incoming

Samsung has dropped the price of both the Galaxy S6 and S6 Edge by … more

How To Port Fully Featured Sony Xperia Z4 Camera

Xperia Z4’s hardware may not impress, but its software is definitely … more

Experimental TWRP Available For Moto G 2015

XDA Senior Member squid2 has posted experimental builds of TWRP for the Moto G … more

Sunday Debate: How Can We Get a No-Compromise Phone?

Join us in a fun Sunday Debate on Compromises. Come with your opinions and … more

[HOWTO] Combined emulated storage for the Nexus S (LVM) [UPDATE!: TWRP 2.8.4.0]

555 posts
Thanks Meter: 269
 
By KreAch3R, Senior Member on 15th August 2014, 05:05 PM
Post Reply Subscribe to Thread Email Thread
Combined emulated storage for the Nexus S (LVM)

UPDATE! NEW 2.8.4.0 TWRP RECOVERY!

This is a guide to make your Nexus S use an internal emulated SDcard, and mount it using MTP (just like the Nexus 4 and newer smartphones)!
In order to do that, we have to enable the Logical volume partitioning (LVM) on our rom and recovery, using this great guide. Kudos to @steven676 because without him, this wouldn't be possible.

The end result is this:



in a Nexus S running latest CM11 M12

It’s going to be a long run, so take your time. This is a summary of what we are going to do:

Summary:
  1. TAKE A FULL BACKUP OF EVERYTHING, INCLUDING SDCARD! EVERYTHING WILL BE ERASED! WE ABSOLUTELY NEED A TWRP BACKUP!
  2. Create a modified recovery Use my custom built TWRP recovery, which will recognize the logical volumes and use the internal storage as SDcard
  3. Create the specified logical volumes
  4. Reboot into the recovery, and restore the twrp backup
  5. Modify the updater-script of the ROM you want to use and change the partition directories
  6. Create a modified boot image.
  7. Archive the modified boot image inside the rom .zip
  8. Create a modified framework-res.apk
  9. Archive the modified framework-res.apk inside the ROM .zip
  10. Copy the now-ready ROM .zip inside the mounted storage, and install it
  11. Boot into CM11 with ~13GB data+sdcard combined storage!

Requirements:
  1. My git repository: https://github.com/KreAch3R/crespo-lvm-emulated-storage
  2. LVM repository: https://github.com/steven676/android-lvm-mod
  3. A ROM .zip (CM11-M12)
  4. A kernel boot.img (as of M12, I used stock)(Guru kernel)
  5. A custom built TWRP recovery (you can download mine from the Downloads post, or build it yourself)
  6. Android SDK tools configured on your PC (ADB running etc)
  7. Android Image Kitchen
  8. Apktool 2 (setup and ready, using this guide and this file (renamed to apktool.jar).
  9. Basic linux, terminal, adb knowledge

This is my first guide, so any help is appreciated! I have used these steps and they worked for me, but YMMV. I will try to help you as much as I can, but you should be aware that using this guide may brick your phone. Please, be patient, read the guide carefully, take any precautions you want, and of course, I cannot be held responsible for whatever happens to your device. You are following this guide with your own risk (DISCLAIMER). Also, please excuse my wrong terminology, if there is any, and correct any mistakes.

So, if you are ready, let's start!
Last edited by KreAch3R; 25th January 2015 at 10:31 PM. Reason: custom built 2.8.4.0 TWRP
The Following 13 Users Say Thank You to KreAch3R For This Useful Post: [ View ]
 
 
15th August 2014, 05:06 PM |#2  
KreAch3R's Avatar
OP Senior Member
Flag Thessaloniki
Thanks Meter: 269
 
More
Instructions
  1. BACKUP, BACKUP, BACKUP!

    Backup everything you can, we need a nandroid backup, sdcard backup, etc. Try to imagine you have lost your phone, and backup what you would have missed!


  2. USE MY CUSTOM BUILT TWRP RECOVERY
    Or, if you want to modify it yourself folllow the instructions:

    If you only want to take an existing build of a recovery and modify it to accept and recognize LVM volumes, but you don't care about the internal media storage depicted as sdcard, follow the steps below:

    1. Unpack the recovery image you want using the Android Image Kitchen
    2. Copy the contents of lvm-bin/ in the lvm repository to lvm/ in the ramdisk folder
    3. Copy devices/crespo/lvm.conf to lvm/etc/lvm.conf in the ramdisk folder
    4. Intergrate the changes from my git files
      (NOTE: I think fstab.herring and recovery.fstab should be identical to fstab.herring from boot.img, and twrp.fstab should be the only different, - but it is just a theory, not tested)
    5. Repack
    6. Flash using fastboot

    If you want to compile your own TWRP build and make it accept LVM, you have to build TWRP from source using @daxxter 's build flags from this post (c/p here for clarity):

    BoardConfig.mk (device_samsung_crespo):
    Code:
    PRODUCT_COPY_FILES += device/samsung/crespo/twrp.fstab:recovery/root/etc/twrp.fstab
    DEVICE_RESOLUTION := 480x800
    RECOVERY_SDCARD_ON_DATA := true
    RECOVERY_GRAPHICS_USE_LINELENGTH := true
    BOARD_HAS_NO_REAL_SDCARD := true
    TW_NO_USB_STORAGE := true
    
    TW_INTERNAL_STORAGE_PATH := "/data/media"
    TW_INTERNAL_STORAGE_MOUNT_POINT := "data"
    twrp.fstab
    Code:
    # mount point	fstype		device
    
    /system		ext4		/dev/lvpool/system
    /cache		yaffs2		cache
    /data		ext4		/dev/lvpool/userdata
    /misc 		mtd 		misc
    /boot		mtd		boot
    /recovery	        mtd		recovery
    /bootloader	mtd		bootloader
    /radio		mtd		radio
    /efs                  yaffs2      efs   flags=display="EFS";backup=1;canbewiped
    You also have to include the other modifications needed for LVM, such as the LVM folder and the necessary changes to init.rc. I suppose you can incorporate them in the building process, possibly doing modifications in the crespo tree files, but I didn't build it this way because I didn't think of it at the time, so the process is undocumented. I just built the modified twrp and then used the above process (with apktool) to make the lvm changes. Gross and ugly, I know, but I learn with all of this, too. Next time will be better.




  3. CREATE SPECIFIED LOGICAL VOLUMES

    I created 2 logical partitions on the device, on top of the mmcblk0p1, mmcblk0p2, mmcblk0p3 partitions.

    LVs:
    1. /dev/lvpool/system 1G
    2. /dev/lvpool/userdata 13.5G

    Gracious command sharing by @RappyBMX :
    Code:
    # adb shell
    # /lvm/sbin/lvm pvcreate /dev/block/mmcblk0p1 /dev/block/mmcblk0p2 /dev/block/mmcblk0p3
    # /lvm/sbin/lvm vgcreate lvpool /dev/block/mmcblk0p1 /dev/block/mmcblk0p2 /dev/block/mmcblk0p3
    # /lvm/sbin/lvm lvcreate -L 1G -n system lvpool
    # /lvm/sbin/lvm lvcreate -L 13G -n userdata lvpool
    OLD WAY:
    Android OS is supposed to only recognize and mount the first two, (/system and /userdata). SDcard is created and symlinked in the /data/media folder, as per official Google examples.
    TWRP Recovery, on the other hand, can mount all three of them, and uses the "media" partition as sdcard storage. I had to hack it like that for now, because I could not build the twrp recovery from source, using the correct make-configs (32bit system only here!), and the current crespo recovery can't recognize the emulated storage correctly, at least as far as I could try.

    NOTE #2:
    The plan is to build a correctly modified twrp for this crespo configuration when I get to my main PC and ditch the /lvpool/media partition. At this point I should mention that /media/ for a recovery-only partition is a terrible name, but I was following the lvm guide to the point, and I didn’t have time to re-do it just for a name change. If you want to change it, also change it in every .fstab file / mount point you find it.

    CURRENT WAY:
    Android OS is recognizing and mounting /system and /userdata as /data. The SDcard is created and symlinked in the /data/media folder, as per official Google examples.

    Steps:
    1. Boot into the recovery you just created (hope it boots)
    2. Use the LVM guide and give the necessary lvm commands to create the logical volumes (ATTENTION! THIS WILL ERASE EVERYTHING!)
    3. Reboot
    4. Advanced format /system to ext4
    5. Advanced format /data (type "yes")
    6. Full Wipe-factory reset
      In general, format everything you can to ext4 to make TWRP recognize them. No harm done, as your device is empty.
    7. Now our phone is ready to take our modified rom.zip, once we build it!



  4. ROM UPDATER-SCRIPT
    1. Open the ROM .zip and navigate to the updater-script. Replace the block partitions with the logical ones (I didn’t mess with ‘EMMC’ tag at all). Example, from this:
      Code:
      mount("ext4", "EMMC", "/dev/block/platform/s3c-sdhci.0/by-name/userdata ", "/data")
      To this:
      Code:
      mount("ext4", "EMMC", "/dev/lvpool/userdata", "/data")
    2. Save the file.

    This is an example of a working updater-script file (the one used in my latest LVM-CM11-M12 rom):
    Code:
    assert(getprop("ro.product.device") == "crespo" ||
           getprop("ro.build.product") == "crespo" ||
           abort("This package is for device: crespo; this device is " + getprop("ro.product.device") + "."););
    mount("ext4", "EMMC", "/dev/lvpool/system", "/system");
    package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
    package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");
    set_metadata("/tmp/backuptool.sh", "uid", 0, "gid", 0, "mode", 0755);
    set_metadata("/tmp/backuptool.functions", "uid", 0, "gid", 0, "mode", 0644);
    run_program("/tmp/backuptool.sh", "backup");
    unmount("/system");
    show_progress(0.500000, 0);
    mount("ext4", "EMMC", "/dev/lvpool/userdata", "/data");
    package_extract_file("system/bin/otasigcheck.sh", "/tmp/otasigcheck.sh");
    package_extract_file("META-INF/org/cyanogenmod/releasekey", "/tmp/releasekey");
    set_metadata("/tmp/otasigcheck.sh", "uid", 0, "gid", 0, "mode", 0755);
    run_program("/tmp/otasigcheck.sh");
    sha1_check(read_file("/tmp/releasekey"),"7241e92725436afc79389d4fc2333a2aa8c20230") && abort("Can't install this package on top of incompatible data. Please try another package or run a factory reset");
    unmount("/data");
    format("ext4", "EMMC", "/dev/lvpool/system", "0", "/system");
    mount("ext4", "EMMC", "/dev/lvpool/system", "/system");
    package_extract_dir("recovery", "/system");
    package_extract_dir("system", "/system");
    symlink("../bin/fsck.f2fs", "/system/bin/dump.f2fs");
    symlink("../xbin/su", "/system/bin/su");
    symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf");
    symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");
    symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
            "/system/xbin/adjtimex", "/system/xbin/arp", "/system/xbin/ash",
            "/system/xbin/awk", "/system/xbin/base64", "/system/xbin/basename",
            "/system/xbin/bbconfig", "/system/xbin/blkid", "/system/xbin/blockdev",
            "/system/xbin/brctl", "/system/xbin/bunzip2", "/system/xbin/bzcat",
            "/system/xbin/bzip2", "/system/xbin/cal", "/system/xbin/cat",
            "/system/xbin/catv", "/system/xbin/chattr", "/system/xbin/chcon",
            "/system/xbin/chgrp", "/system/xbin/chmod", "/system/xbin/chown",
            "/system/xbin/chroot", "/system/xbin/chvt", "/system/xbin/clear",
            "/system/xbin/cmp", "/system/xbin/comm", "/system/xbin/cp",
            "/system/xbin/cpio", "/system/xbin/crond", "/system/xbin/crontab",
            "/system/xbin/cut", "/system/xbin/date", "/system/xbin/dc",
            "/system/xbin/dd", "/system/xbin/deallocvt", "/system/xbin/depmod",
            "/system/xbin/devmem", "/system/xbin/df", "/system/xbin/diff",
            "/system/xbin/dirname", "/system/xbin/dmesg", "/system/xbin/dnsd",
            "/system/xbin/dos2unix", "/system/xbin/du", "/system/xbin/echo",
            "/system/xbin/ed", "/system/xbin/egrep", "/system/xbin/env",
            "/system/xbin/expand", "/system/xbin/expr", "/system/xbin/false",
            "/system/xbin/fbsplash", "/system/xbin/fdisk", "/system/xbin/fgconsole",
            "/system/xbin/fgrep", "/system/xbin/find", "/system/xbin/findfs",
            "/system/xbin/flash_lock", "/system/xbin/flash_unlock",
            "/system/xbin/flashcp", "/system/xbin/flock", "/system/xbin/fold",
            "/system/xbin/free", "/system/xbin/freeramdisk", "/system/xbin/fstrim",
            "/system/xbin/fsync", "/system/xbin/ftpget", "/system/xbin/ftpput",
            "/system/xbin/fuser", "/system/xbin/getenforce", "/system/xbin/getopt",
            "/system/xbin/getsebool", "/system/xbin/grep", "/system/xbin/groups",
            "/system/xbin/gunzip", "/system/xbin/gzip", "/system/xbin/halt",
            "/system/xbin/head", "/system/xbin/hexdump", "/system/xbin/hwclock",
            "/system/xbin/id", "/system/xbin/ifconfig", "/system/xbin/inetd",
            "/system/xbin/insmod", "/system/xbin/install", "/system/xbin/ionice",
            "/system/xbin/iostat", "/system/xbin/ip", "/system/xbin/kill",
            "/system/xbin/killall", "/system/xbin/killall5", "/system/xbin/less",
            "/system/xbin/ln", "/system/xbin/losetup", "/system/xbin/ls",
            "/system/xbin/lsattr", "/system/xbin/lsmod", "/system/xbin/lspci",
            "/system/xbin/lsusb", "/system/xbin/lzcat", "/system/xbin/lzma",
            "/system/xbin/lzop", "/system/xbin/lzopcat", "/system/xbin/man",
            "/system/xbin/matchpathcon", "/system/xbin/md5sum", "/system/xbin/mesg",
            "/system/xbin/mkdir", "/system/xbin/mke2fs", "/system/xbin/mkfifo",
            "/system/xbin/mkfs.ext2", "/system/xbin/mkfs.vfat",
            "/system/xbin/mknod", "/system/xbin/mkswap", "/system/xbin/mktemp",
            "/system/xbin/modinfo", "/system/xbin/modprobe", "/system/xbin/more",
            "/system/xbin/mount", "/system/xbin/mountpoint", "/system/xbin/mpstat",
            "/system/xbin/mv", "/system/xbin/nanddump", "/system/xbin/nandwrite",
            "/system/xbin/nbd-client", "/system/xbin/netstat", "/system/xbin/nice",
            "/system/xbin/nmeter", "/system/xbin/nohup", "/system/xbin/nslookup",
            "/system/xbin/ntpd", "/system/xbin/od", "/system/xbin/openvt",
            "/system/xbin/patch", "/system/xbin/pgrep", "/system/xbin/pidof",
            "/system/xbin/ping", "/system/xbin/pipe_progress", "/system/xbin/pkill",
            "/system/xbin/pmap", "/system/xbin/poweroff", "/system/xbin/printenv",
            "/system/xbin/printf", "/system/xbin/ps", "/system/xbin/pstree",
            "/system/xbin/pwd", "/system/xbin/pwdx", "/system/xbin/rdate",
            "/system/xbin/rdev", "/system/xbin/readlink", "/system/xbin/realpath",
            "/system/xbin/renice", "/system/xbin/reset", "/system/xbin/resize",
            "/system/xbin/restorecon", "/system/xbin/rev", "/system/xbin/rm",
            "/system/xbin/rmdir", "/system/xbin/rmmod", "/system/xbin/route",
            "/system/xbin/run-parts", "/system/xbin/runcon", "/system/xbin/rx",
            "/system/xbin/sed", "/system/xbin/selinuxenabled", "/system/xbin/seq",
            "/system/xbin/sestatus", "/system/xbin/setconsole",
            "/system/xbin/setenforce", "/system/xbin/setfiles",
            "/system/xbin/setkeycodes", "/system/xbin/setsebool",
            "/system/xbin/setserial", "/system/xbin/setsid", "/system/xbin/sh",
            "/system/xbin/sha1sum", "/system/xbin/sha256sum",
            "/system/xbin/sha3sum", "/system/xbin/sha512sum", "/system/xbin/sleep",
            "/system/xbin/smemcap", "/system/xbin/sort", "/system/xbin/split",
            "/system/xbin/stat", "/system/xbin/strings", "/system/xbin/stty",
            "/system/xbin/sum", "/system/xbin/swapoff", "/system/xbin/swapon",
            "/system/xbin/sync", "/system/xbin/sysctl", "/system/xbin/tac",
            "/system/xbin/tail", "/system/xbin/tar", "/system/xbin/taskset",
            "/system/xbin/tee", "/system/xbin/telnet", "/system/xbin/telnetd",
            "/system/xbin/test", "/system/xbin/tftp", "/system/xbin/tftpd",
            "/system/xbin/time", "/system/xbin/timeout", "/system/xbin/top",
            "/system/xbin/touch", "/system/xbin/tr", "/system/xbin/traceroute",
            "/system/xbin/true", "/system/xbin/ttysize", "/system/xbin/tune2fs",
            "/system/xbin/umount", "/system/xbin/uname", "/system/xbin/uncompress",
            "/system/xbin/unexpand", "/system/xbin/uniq", "/system/xbin/unix2dos",
            "/system/xbin/unlzma", "/system/xbin/unlzop", "/system/xbin/unxz",
            "/system/xbin/unzip", "/system/xbin/uptime", "/system/xbin/usleep",
            "/system/xbin/uudecode", "/system/xbin/uuencode", "/system/xbin/vi",
            "/system/xbin/watch", "/system/xbin/wc", "/system/xbin/wget",
            "/system/xbin/which", "/system/xbin/whoami", "/system/xbin/xargs",
            "/system/xbin/xz", "/system/xbin/xzcat", "/system/xbin/yes",
            "/system/xbin/zcat");
    symlink("libGLESv2.so", "/system/lib/libGLESv3.so");
    symlink("logcat", "/system/bin/lolcat");
    symlink("mksh", "/system/bin/sh");
    symlink("mount.exfat", "/system/bin/fsck.exfat",
            "/system/bin/mkfs.exfat");
    symlink("pigz", "/system/xbin/unpigz");
    symlink("toolbox", "/system/bin/cat", "/system/bin/chcon",
            "/system/bin/chmod", "/system/bin/chown", "/system/bin/clear",
            "/system/bin/cmp", "/system/bin/cp", "/system/bin/date",
            "/system/bin/dd", "/system/bin/df", "/system/bin/dmesg",
            "/system/bin/du", "/system/bin/getenforce", "/system/bin/getevent",
            "/system/bin/getprop", "/system/bin/getsebool", "/system/bin/grep",
            "/system/bin/hd", "/system/bin/id", "/system/bin/ifconfig",
            "/system/bin/iftop", "/system/bin/insmod", "/system/bin/ioctl",
            "/system/bin/ionice", "/system/bin/kill", "/system/bin/ln",
            "/system/bin/load_policy", "/system/bin/log", "/system/bin/ls",
            "/system/bin/lsmod", "/system/bin/lsof", "/system/bin/md5",
            "/system/bin/mkdir", "/system/bin/mkswap", "/system/bin/mount",
            "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat",
            "/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv",
            "/system/bin/ps", "/system/bin/r", "/system/bin/readlink",
            "/system/bin/renice", "/system/bin/restart", "/system/bin/restorecon",
            "/system/bin/rm", "/system/bin/rmdir", "/system/bin/rmmod",
            "/system/bin/route", "/system/bin/runcon", "/system/bin/schedtop",
            "/system/bin/sendevent", "/system/bin/setconsole",
            "/system/bin/setenforce", "/system/bin/setfattr", "/system/bin/setprop",
            "/system/bin/setsebool", "/system/bin/sleep", "/system/bin/smd",
            "/system/bin/start", "/system/bin/stop", "/system/bin/swapoff",
            "/system/bin/swapon", "/system/bin/sync", "/system/bin/top",
            "/system/bin/touch", "/system/bin/umount", "/system/bin/uptime",
            "/system/bin/vmstat", "/system/bin/watchprops",
            "/system/bin/wipe");
    set_metadata_recursive("/system", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata_recursive("/system/addon.d", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata_recursive("/system/bin", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/bin/app_process", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:zygote_exec:s0");
    set_metadata("/system/bin/clatd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:clatd_exec:s0");
    set_metadata("/system/bin/debuggerd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:debuggerd_exec:s0");
    set_metadata("/system/bin/dhcpcd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dhcp_exec:s0");
    set_metadata("/system/bin/dnsmasq", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dnsmasq_exec:s0");
    set_metadata("/system/bin/drmserver", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:drmserver_exec:s0");
    set_metadata("/system/bin/hostapd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:hostapd_exec:s0");
    set_metadata("/system/bin/installd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:installd_exec:s0");
    set_metadata("/system/bin/keystore", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:keystore_exec:s0");
    set_metadata("/system/bin/mediaserver", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mediaserver_exec:s0");
    set_metadata("/system/bin/mksh", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:shell_exec:s0");
    set_metadata("/system/bin/mtpd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mtp_exec:s0");
    set_metadata("/system/bin/netcfg", "uid", 0, "gid", 3003, "mode", 02750, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/bin/netd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:netd_exec:s0");
    set_metadata("/system/bin/ping", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:ping_exec:s0");
    set_metadata("/system/bin/pppd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:ppp_exec:s0");
    set_metadata("/system/bin/racoon", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:racoon_exec:s0");
    set_metadata("/system/bin/rild", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:rild_exec:s0");
    set_metadata("/system/bin/run-as", "uid", 0, "gid", 2000, "mode", 0750, "capabilities", 0xc0, "selabel", "u:object_r:runas_exec:s0");
    set_metadata("/system/bin/sdcard", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sdcardd_exec:s0");
    set_metadata("/system/bin/servicemanager", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:servicemanager_exec:s0");
    set_metadata("/system/bin/surfaceflinger", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:surfaceflinger_exec:s0");
    set_metadata("/system/bin/vold", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:vold_exec:s0");
    set_metadata("/system/bin/wpa_supplicant", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:wpa_exec:s0");
    set_metadata_recursive("/system/etc/dhcpcd", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:dhcp_system_file:s0");
    set_metadata("/system/etc/dhcpcd/dhcpcd-run-hooks", "uid", 1014, "gid", 2000, "mode", 0550, "capabilities", 0x0, "selabel", "u:object_r:dhcp_system_file:s0");
    set_metadata_recursive("/system/etc/init.d", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/etc/init.d", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/etc/install-cm-recovery.sh", "uid", 0, "gid", 0, "mode", 0544, "capabilities", 0x0);
    set_metadata_recursive("/system/etc/ppp", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0555, "capabilities", 0x0, "selabel", "u:object_r:ppp_system_file:s0");
    set_metadata("/system/recovery-from-boot.p", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0);
    set_metadata("/system/vendor", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata_recursive("/system/vendor/bin", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:gpsd_exec:s0");
    set_metadata("/system/vendor/bin", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/vendor/bin/pvrsrvinit", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:pvrsrvinit_exec:s0");
    set_metadata("/system/vendor/etc", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/vendor/firmware", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/vendor/lib", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/vendor/lib/egl", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/vendor/lib/hw", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata_recursive("/system/xbin", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/xbin/librank", "uid", 0, "gid", 0, "mode", 06755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/xbin/procmem", "uid", 0, "gid", 0, "mode", 06755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/xbin/procrank", "uid", 0, "gid", 0, "mode", 06755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
    set_metadata("/system/xbin/su", "uid", 0, "gid", 0, "mode", 06755, "capabilities", 0x0, "selabel", "u:object_r:su_exec:s0");
    show_progress(0.200000, 0);
    delete("/system/bin/otasigcheck.sh");
    show_progress(0.200000, 10);
    package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
    package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");
    set_metadata("/tmp/backuptool.sh", "uid", 0, "gid", 0, "mode", 0755);
    set_metadata("/tmp/backuptool.functions", "uid", 0, "gid", 0, "mode", 0644);
    run_program("/tmp/backuptool.sh", "restore");
    delete("/system/bin/backuptool.sh");
    delete("/system/bin/backuptool.functions");
    show_progress(0.200000, 10);
    package_extract_file("boot.img", "/tmp/boot.img");write_raw_image("/tmp/boot.img", "boot");
    show_progress(0.100000, 0);
    unmount("/system");




  5. MODIFY BOOT.IMG

    1. Unpack boot.img
    2. Copy the contents of lvm-bin/ in the git repository to lvm/ in the ramdisk folder.
    3. 2)Copy devices/crespo/lvm.conf to lvm/etc/lvm.conf in the ramdisk folder.
    4. Intergrate the changes for the following files: fstab.herring, init.herring.rc, init.herring.usb.rc, default.prop
    5. Repack


  6. UPDATE ROM .ZIP W/ NEW BOOT.IMG

    Open the ROM .zip again and drag ‘n’ drop the kernel boot.img inside. It should replace the other one.


  7. MODIFY FRAMEWORK-RES.APK

    1. Extract the .apk from the ROM .zip
    2. Install the framework to apktool [apktool if ...]
    3. Decode the framework-res.apk [apktool d ...]
    4. Intergrate the changes
    5. Build the .apk [apktool b ...]
    6. Open simultaneously the created apk and the unmodified one. Drag ‘n’ drop the changed file from the created one to the unmodified. Save the unmodified file. Be careful to use the now-modified-previously-unmodified .apk from now on.

    TIP: DO NOT use spaces in the apktool directories. Keep it simple to avoid errors.


  8. UPDATE ROM .ZIP W/ NEW FRAMEWORK-RES.APK

    Open the ROM .zip again, drag ‘n’ drop the new framework-res.apk inside /system/framework, and save the file.


  9. INSTALLATION

    Copy the modified ROM .zip inside the mounted USB storage. Install it using the recovery.


  10. BOOT

    Let’s hope that everything went as planned and now you are rocking a Nexus S with a ~13GB combined internal storage! MTP should work, too.
Last edited by KreAch3R; 25th February 2015 at 06:13 PM. Reason: custom built 2.8.4.0 TWRP
The Following 9 Users Say Thank You to KreAch3R For This Useful Post: [ View ]
15th August 2014, 05:07 PM |#3  
KreAch3R's Avatar
OP Senior Member
Flag Thessaloniki
Thanks Meter: 269
 
More
Downloads
My TWRP, BOOT, ROM files, if you want to use them (MOVED TO AFH):


Current Download: CM11-M12 ROM (12/2014)
CM11-M12 ROM
CM11-M12 boot.img only

NEW FILE!: custom built 2.8.4.0 TWRP
@daxxter 's custom built TWRP 2.8.0.0 recovery (modifed by me for ext4)



CM11-M9 ROM Files (9/2014)

Mediafire links:
TWRP Recovery
BOOT img
CM11-M9 ROM
Attached Files
File Type: img lvm-twrp-ext4-2.8.4.0.img - [Click for QR Code] (6.35 MB, 48 views)
Last edited by KreAch3R; 25th January 2015 at 10:31 PM. Reason: custom built 2.8.4.0 TWRP
The Following 5 Users Say Thank You to KreAch3R For This Useful Post: [ View ]
15th August 2014, 05:08 PM |#4  
KreAch3R's Avatar
OP Senior Member
Flag Thessaloniki
Thanks Meter: 269
 
More
So, this is it. I hope I covered all edges, and did not make any mistakes (it is a big guide). Please let me know if something is wrong, or you have any suggestions or advice.
Last edited by KreAch3R; 15th August 2014 at 05:14 PM.
16th August 2014, 04:52 AM |#5  
Member
Thanks Meter: 29
 
More
did the partition is compatible with art?can i install much app in art mode?
16th August 2014, 11:16 AM |#6  
Member
Thanks Meter: 19
 
More
Hi!
I'm trying to follow your guide but i'm struck with the twrp recovery, i can boot in the twrp but the recovery doesn't mount any partition and i can't lunch the lvm commands from the other thread (i got "permission denied"). So i made successfully to the lvm partitions with the modded clockwork recovery, format the usb storage, copy the twrp backup and the reflash the modded twrp but even after that the twrp recovery won't mount anything and won't find the backup.
I'll attach my twrp img, can you post yours or help me someway?
Attached Files
File Type: img openrecovery-twrp-2.7.1.0-crespo.img - [Click for QR Code] (5.84 MB, 24 views)
16th August 2014, 12:12 PM |#7  
KreAch3R's Avatar
OP Senior Member
Flag Thessaloniki
Thanks Meter: 269
 
More
Quote:
Originally Posted by cshnz

did the partition is compatible with art?can i install much app in art mode?

I have not tried ART at all, sorry. You can install many apps using the Dalvik runtime, though, just like any other phone.

Quote:
Originally Posted by Zeratul91

Hi!
I'm trying to follow your guide but i'm struck with the twrp recovery, i can boot in the twrp but the recovery doesn't mount any partition and i can't lunch the lvm commands from the other thread (i got "permission denied"). So i made successfully to the lvm partitions with the modded clockwork recovery, format the usb storage, copy the twrp backup and the reflash the modded twrp but even after that the twrp recovery won't mount anything and won't find the backup.
I'll attach my twrp img, can you post yours or help me someway?

Hello!

Your twrp.img looks fine! I couldn't understand if you managed to actually create the lvm partitions though. Did you get past this "permission denied" error?
If you are using Linux, try:
Code:
adb kill-server
sudo adb start-server
In Windows try to launch it using administrator privileges

Also, after "adb shell" you can try to "su".
Code:
adb shell
su
If you think you managed to create the lvs successfully, use this command:
Code:
#/lvm/sbin/lvm lvs
to actually see what you have created.

Did you use the same partitions names as the guide? If you changed something, you also change it in all the fstabs, too.

I flashed your recovery, and you are right, no partition is mounted. Re-flashed back to mine and everything works. I can't find any difference though! I will keep searching. For now wait 5 mins for the upload.

I have started uploading my twrp.img, my boot.img and my ROM .zip, to help you test things, I didn't think of that earlier. I will post the links ASAP.
Last edited by KreAch3R; 16th August 2014 at 01:20 PM.
16th August 2014, 12:31 PM |#8  
Member
Thanks Meter: 19
 
More
Quote:

Hello!

Your twrp.img looks fine! I couldn't understand if you managed to actually create the lvm partitions though. Did you get past this "permission denied" error?
If you are using Linux, try:

Code:
adb kill-server
sudo adb start-server
In Windows try to launch it using administrator privileges

Also, after "adb shell" you can try to "su".
Code:
adb shell
su
If you think you managed to create the lvs successfully, use this command:
Code:
#/lvm/sbin/lvm lvs
to actually see what you have created.

Did you use the same partitions names as the guide? If you changed something, you also change it in all the fstabs, too.

I flashed your recovery, and you are right, no partition is mounted. Re-flashed back to mine though and everything works. I can't find any difference though! I will keep searching. For now wait 5 mins for the upload.

I have started uploading my twrp.img, my boot.img and my ROM .zip, to help you test things, I didn't think of that earlier. I will post the links ASAP.

I created the partitions with the names and sizes you said using the modded clockwork from the steven676's guide, I lunched #/lvm/sbin/lvm lvs under clockwork and everything was right and i formatted the 1gb media partition as FAT. TWRP wouldn't anything, not even mount the usb storage, and the adb shell would give me "~ # ←[6n" and permission denied with every command
16th August 2014, 12:47 PM |#9  
KreAch3R's Avatar
OP Senior Member
Flag Thessaloniki
Thanks Meter: 269
 
More
Quote:
Originally Posted by Zeratul91

I created the partitions with the names and sizes you said using the modded clockwork from the steven676's guide, I lunched #/lvm/sbin/lvm lvs under clockwork and everything was right and i formatted the 1gb media partition as FAT. TWRP wouldn't anything, not even mount the usb storage, and the adb shell would give me "~ # ←[6n" and permission denied with every command

Let's take this one step at a time. Grab the twrp image from the third post and test it. I can't understand what I forgot to include to the instructions. Testing now.

UPDATE: I think I found the culprit. Are you using Linux or Windows? your "lvm/sbin'lvm" file didn't have executing permissions.
Code:
cd /ramdisk/lvm/sbin
chmod +x lvm
Once I changed that, the twrp recovery worked. I don't know why yours was different from mine, I didn't have to change that.
Last edited by KreAch3R; 16th August 2014 at 01:14 PM.
16th August 2014, 01:28 PM |#10  
Member
Thanks Meter: 19
 
More
Quote:
Originally Posted by KreAch3R

Let's take this one step at a time. Grab the twrp image from the third post and test it. I can't understand what I forgot to include to the instructions. Testing now.

UPDATE: I think I found the culprit. Are you using Linux or Windows? your "lvm/sbin'lvm" file didn't have executing permissions.

Code:
cd /ramdisk/lvm/sbin
chmod +x lvm
Once I changed that, the twrp recovery worked. I don't know why yours was different from mine, I didn't have to change that.

Unfortunately I'm on windows :S
BRB I'm going to try with your files

EDIT

I flashed your twrp, now i can use lvm commands and i created successfully the partitions:

Code:
C:\android-sdk-windows\platform-tools>adb shell
~ # ←[6n/lvm/sbin/lvm lvs
/lvm/sbin/lvm lvs
File descriptor 8 (/dev/__properties__) leaked on lvm invocation. Parent PID 120
: /sbin/sh
File descriptor 9 (socket:[1993]) leaked on lvm invocation. Parent PID 120: /sbi
n/sh
  LV       VG     Attr      LSize   Pool Origin Data%  Move Log Copy%  Convert
  media    lvpool -wi-ao---   1.00g
  system   lvpool -wi-a---- 552.00m
  userdata lvpool -wi-a----  13.00g
Now i should format the 1gb media to fat, but usb storage mount does nothing and i still get "unable to mount" error in the twrp log
Last edited by Zeratul91; 16th August 2014 at 01:40 PM.
16th August 2014, 01:45 PM |#11  
KreAch3R's Avatar
OP Senior Member
Flag Thessaloniki
Thanks Meter: 269
 
More
Quote:
Originally Posted by Zeratul91

Unfortunately I'm on windows :S

I guess Windows created the permission error, then.

Quote:
Originally Posted by Zeratul91

I flashed your twrp, now i can use lvm commands and i created successfully the partitions:
...
Now i should format the 1gb media to fat, but usb storage mount does nothing

I don't know if that is going to work in Windows, but try to go to Disk Management, and see if your usb storage is seen. It shouldn't popup a "new removable media" detected, it has to be formatted first.

In Lubuntu, I had to go to the "Disks" program, and locate the usb storage there.

Quote:
Originally Posted by Zeratul91

and i still get "unable to mount" error in the twrp log

Unable to mount what? /system or /data?

Read More
Post Reply Subscribe to Thread

Tags
emulated, internal, lvm, nexus s, storage
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes