howto replace device and keep sdcard with adoptable storage - General Questions and Answers

Disclaimer: I know that there are other ways to put apps and data on a sdcard which might circumvent the problems I have. I'm not looking for a practical alternativ, but for insight why things are like they are - understanding. This might or might not lead to a 'howto replace your device and keep your sdcard which is formated as adoptable storage'. I'm aware that understanding things might not lead to any practical help.
Also I searched XDA and the internet for information on this topic various times and didn't find anything helpful. If I oversaw something I'm greatful if I'm pointed to it.
I'm testing on two Sony Xperia Z1. Up till now I did the following:
Test 1:
- made backup of everything to usb otg device in twrp on Device1 (sdcard configured as adoptable storage)
- recovered backup of Device1 on Device2 (excluding trim area)
- put sdcard (adoptable storage) from Device1 into Device2 and started the system
- /dev/block/dm-0 is mounted on /mnt/expand/[uuid], but the sdcardfs-mounts to /mnt/runtime/default/emulated, /storage/emulated, /mnt/runtime/read/emulated and /mnt/runtime/write/emulated are missing.
- relocating the sdcard to Device1 shows that it is still working
Test 2:
- made backup of everything to usb otg device in twrp on Device1 (sdcard configured as adoptable storage)
- recovered backup of Device1 on Device2 (excluding trim area) (so far same as Test1)
- started Device2 inserted blank sdcard2 and generated new adoptable storage.
- shutdown Device2, removed sdcard2 and connected original sdcard1 (removed from Device1) and sdcard2 to a computer
- set up device mapper devices for partition 2 of both devices using the keys copied from the devices.
- mounted both device mapper devices and copied files of sdcard1 encrypted filesystem to sdcard2 encrypted filesystem
- umount of device mapper devices, remove of device mapper devices.
- replaced sdcard1 to Device1 and sdcard2 to Device2. Powered on
- Device1 working with all data found (gallery pictures, maps for osmand)
- Device2 had all the expected mounts, but osmand couldn't read its maps
- logcat showed that selinux stopped osmand from reading the maps directory inside the sdcardfs mount of the adoptable storage
- set selinux to permissive: osmand works as expected
Conclusion: On Device2 and/or sdcard2 selinux policies for osmands data on adoptable storage are missing. Since everything (except trim area) is copied from Device1 to Device2 and from sdcard1 to sdcard2 the policies either have to be in trim area (which as I understood is not available on all types of devices) or they are dependend on some device attribute (uuid of sdcard, s/n of device, etc.).
Ideas?

Chri^2 said:
Disclaimer: I know that there are other ways to put apps and data on a sdcard which might circumvent the problems I have. I'm not looking for a practical alternativ, but for insight why things are like they are - understanding. This might or might not lead to a 'howto replace your device and keep your sdcard which is formated as adoptable storage'. I'm aware that understanding things might not lead to any practical help.
Also I searched XDA and the internet for information on this topic various times and didn't find anything helpful. If I oversaw something I'm greatful if I'm pointed to it.
I'm testing on two Sony Xperia Z1. Up till now I did the following:
Test 1:
- made backup of everything to usb otg device in twrp on Device1 (sdcard configured as adoptable storage)
- recovered backup of Device1 on Device2 (excluding trim area)
- put sdcard (adoptable storage) from Device1 into Device2 and started the system
- /dev/block/dm-0 is mounted on /mnt/expand/[uuid], but the sdcardfs-mounts to /mnt/runtime/default/emulated, /storage/emulated, /mnt/runtime/read/emulated and /mnt/runtime/write/emulated are missing.
- relocating the sdcard to Device1 shows that it is still working
Test 2:
- made backup of everything to usb otg device in twrp on Device1 (sdcard configured as adoptable storage)
- recovered backup of Device1 on Device2 (excluding trim area) (so far same as Test1)
- started Device2 inserted blank sdcard2 and generated new adoptable storage.
- shutdown Device2, removed sdcard2 and connected original sdcard1 (removed from Device1) and sdcard2 to a computer
- set up device mapper devices for partition 2 of both devices using the keys copied from the devices.
- mounted both device mapper devices and copied files of sdcard1 encrypted filesystem to sdcard2 encrypted filesystem
- umount of device mapper devices, remove of device mapper devices.
- replaced sdcard1 to Device1 and sdcard2 to Device2. Powered on
- Device1 working with all data found (gallery pictures, maps for osmand)
- Device2 had all the expected mounts, but osmand couldn't read its maps
- logcat showed that selinux stopped osmand from reading the maps directory inside the sdcardfs mount of the adoptable storage
- set selinux to permissive: osmand works as expected
Conclusion: On Device2 and/or sdcard2 selinux policies for osmands data on adoptable storage are missing. Since everything (except trim area) is copied from Device1 to Device2 and from sdcard1 to sdcard2 the policies either have to be in trim area (which as I understood is not available on all types of devices) or they are dependend on some device attribute (uuid of sdcard, s/n of device, etc.).
Ideas?
Click to expand...
Click to collapse
The only understanding that you need is that you can't do what you're trying to do. You can't "transfer" adoptable storage from one device to another. You have to setup adoptable storage on the new device the same way it was done on the old device, from scratch.
The new device has to make its own "links" to adoptable storage, so to speak, the new device can't use the "links" from the old device, it has to create its own the same way the first device did. When the sdcard is adopted as internal, the device creates an encryption key that is specific to that device, another device can't use the sdcard because it will not recognize the encryption key that was created by the first device. As far as it is concerned, the data on the card may as well not exist because it can't "see" the data.
The encryption key "can" be used to retrieve the data on the adopted sdcard via PC, perhaps, but this encryption key can't be used to help the new device "read" the data.
This is similar to trying to use the hard drive and OS from one PC in another PC, but in android, it is more specific.
Sent from my LGL84VL using Tapatalk

Thanks for your reply, but it didn't help, because you didn't explain why the key should not be usable by another device. I'm looking for technical background: How does android prevent the use of the card even if the target system does know the correct key?
Furthermore I think that you're not right about this point - if you were right the following wouldn't have worked and the decrypted /dev/block/dm-0 wouldn't have existed on the second device:
Test 1:
- made backup of everything to usb otg device in twrp on Device1 (sdcard configured as adoptable storage)
- recovered backup of Device1 on Device2 (excluding trim area)
- put sdcard (adoptable storage) from Device1 into Device2 and started the system
- /dev/block/dm-0 is mounted on /mnt/expand/[uuid]
Click to expand...
Click to collapse
You can try it out if you have two similar devices - maybe I have to move the thread to Sony Z1, because on other devices the test I made doesn't work the same way.

Chri^2 said:
Thanks for your reply, but it didn't help, because you didn't explain why the key should not be usable by another device. I'm looking for technical background: How does android prevent the use of the card even if the target system does know the correct key?
Furthermore I think that you're not right about this point - if you were right the following wouldn't have worked and the decrypted /dev/block/dm-0 wouldn't have existed on the second device:
You can try it out if you have two similar devices - maybe I have to move the thread to Sony Z1, because on other devices the test I made doesn't work the same way.
Click to expand...
Click to collapse
Because each device has it's own "identity" to which each key is associated. The new device has a different "identity" and "key", if the data is not encrypted with the key that the device is looking for, it can't decrypt the key assigned to the data by the previous device.
Effectively, a simplified answer is to say that it is because the two devices speak a different language when it comes to their own encrypted data and there is no way to translate between the two to make encrypted data created on "this" device accessible or readable by "that" device.
It's similar to signatures that are assigned to apps and device firmware from various manufacturers. You can't flash a firmware from a completely different device because the software tools involved will not recognize or pass the signatures of different firmware, it will only approve firmware that has the signature it is looking for.
I could also be wrong, no one knows everything, but I'm certain that it is much deeper than you think.
Maybe you can adapt something from the thread below to work something out.
https://forum.xda-developers.com/general/help/corrupted-sd-card-adoptable-storage-t3801250
Sent from my LGL84VL using Tapatalk

Droidriven said:
Because each device has it's own "identity" to which each key is associated.
Click to expand...
Click to collapse
This is what I thought after my Test1 and has been the reason I did Test2 to check if it's true. But Test2 didn't work neither, because there seems to be some selinux policies missing.
I downloaded the source of vold. I'm no programmer and I'm really bad at reading source code. That said: I searched for 'expand_' to find some hint to the key files. Found function BuildKeyPath, which seems to generate a complete path to a key file. This function is used in 'status_t Disk:artitionMixed(int8_t ratio)'. The interesting part that might be the generation of the key for the encrypted partition is
Code:
// We've had some success above, so generate both the private partition
// GUID and encryption key and persist them.
std::string partGuidRaw;
std::string keyRaw;
if (ReadRandomBytes(16, partGuidRaw) || ReadRandomBytes(16, keyRaw)) {
LOG(ERROR) << "Failed to generate GUID or key";
return -EIO;
}
std::string partGuid;
StrToHex(partGuidRaw, partGuid);
if (!WriteStringToFile(keyRaw, BuildKeyPath(partGuid))) {
LOG(ERROR) << "Failed to persist key";
return -EIO;
} else {
LOG(DEBUG) << "Persisted key for GUID " << partGuid;
}
If this is the point in code where the key is generated I read it the way that the key is purely random and not dependend on any component associated with the devices identity.
Taken together with Test2 there are - in my opinion - strong hints pointing in the direction of selinux. Maybe I should retry Test1, but start the phone without the sdcard which then would be shown as missing, set selinux to permissive and then insert the sdcard. I guess I'll give it a go...

Now I found something interesting: I used twrp 3.2.3-0 on my Sony Xperia Z1 to wipe (advanced) all of the partitions of a phone I used to experiment with adoptable storage. Afterwards I looked at the partitions and found that on data existed the following files
Code:
/data/misc/vold/expand_[uuid1]key
/data/misc/vold/expand_[uuid2].key
/data/misc/vold/expand_[uuid3].key
/data/system/storage.xml
/data/.layout_version
To me it looks like twrp conserved those files and put them back after formating the data partition. However it did it and why it pushed me in the right direction.
Test3 on Xperia Z1 using twrp 3.2.3-0:
made backup of everything excluding trim area to usb otg device in twrp on Device1 (sdcard inserted and configured as adoptable storage)
connected via 'adb shell' to Device1 and made a tar archive containing the above mentioned files in /tmp
downloaded the tar archive from Device1:/tmp using 'adb pull'
recovered backup from usb otg of Device1 on Device2
pushed tar archive with keys, .xml and layout-version to to Device2:/tmp
connected via 'adb shell' to Device2 and unpacked the tar archive from /tmp to /data
started Device2: device complains that my sdcard with adoptable storage is missing
put sdcard (adoptable storage) from Device1 into Device2: sdcard is recognized and integrated as adoptable storage
/dev/block/dm-0 is mounted on /mnt/expand/[uuid] and sdcardfs-mounts to /mnt/runtime/default/emulated, /storage/emulated, /mnt/runtime/read/emulated and /mnt/runtime/write/emulated exist also
osmand works and is able to open the files on the adoptable storage. All other applications I looked at worked also
Can anybody try to confirm that this way works to move a backup from one device to another keeping the adoptable storage?
An interesting conclusion about selinux could be that it reads sometimes storage.xml to generate policies allowing the access to adoptable storage. Might be interesting how this works and whether manipulating storage.xml could be a way to inject selinux policies...

Related

[CONCEPT] Single Partition No-Format Apps2SD

So I was using Slax. Great LiveCD/USB linux, extremely customizable, modular, fast, and small, and has the capability of either:
- saving changes to its rootfs onto an AUFS mounted on a non-linux FS (FAT32, NTFS) using posixovl (POSIX Overlay FS) with metadata (permissions, etc.) being held in files
- saving changes to a fixed-size loop mount image.
This got me thinking.
If we could insert all the necessary modules, code, etc. for posixovl into the Android linux, and make a modified a2sd script that takes advantage of posixovl, we could effectively do away with the requirement for crazy partitioning.
It should be simple enough for ROM devs to implement, assuming it's ready and installed:
1. Create folder on main partition if it doesn't exist, something like /sdcard/system/[app, app-private, dalvik-cache, app_s]
2. In the init scripts, before the a2sd stuff, mount /sdcard/system with posixovl on /system/sd
3. Run a2sd as normal, it should automatically just work.
I'll hopefully test this once I get my phone to a stable development/testing stage, and I don't need to make phone calls for a while. Anyone else is welcome to try to implement this idea.
My current test environment:
- HTC Dream (T-mo G1) with the deadly SPL of doom
- Cyanogen Experimental, latest build
- Amon_RA's modded recovery
- Wipe /data, move all existing apps to backup, remove a2sd partition, Backup for Root Users to restore some settings and data
Anyone with ideas or improvements, please let me know.
To be tested:
- Feasibility (can it work?)
- Functionality (does it work?)
- Portability (Can it work on other ROMs and devices like Hero, Pulse, Blur etc.? If so, will likely be moved to XDA's new Android board)
- Stability (Will everything Force Close on boot? Does it run fast enough? Does anything get corrupted over time?)
Links:
- http://sourceforge.net/projects/posixovl - Sourceforge page for posixovl
In desktop linux you can create a file with the touch command, and mount the file to a mountpoint after formatting it to ext4 for example.
Maybe this is the easier way?
I have done this about 5 years ago, but I will try it today and report if it worked.
edit: ok done already:
1. create a file of the desired size, eg: dd if=/dev/zero of=filename bs=filesize count=1
2. use mke2fs to format the file
3. create a mountpoint and mount the file
thats all. Now I have a 128MB file on my PC, mountable and usable like a partition.
Archont said:
In desktop linux you can create a file with the touch command, and mount the file to a mountpoint after formatting it to ext4 for example.
Maybe this is the easier way?
I have done this about 5 years ago, but I will try it today and report if it worked.
Click to expand...
Click to collapse
As far as I know, you can do that on the mobile Android, too, and that does work in theory. This technique involves mounting a loop filesystem, and it too will allow one-partition apps2sd, but it's less flexible, and I would think slower, than the overlay method.
For a 512MB apps image:
Create empty 512MB file
# dd if=/dev/zero of=/sdcard/apps.img bs=1024k count=512
Format it to Ext2
# mke2fs -L Apps2SD /sdcard/apps.img
Unmount existing a2sd
# umount /system/sd
mount new a2sd image
# mount -t ext2 -o loop /sdcard/apps.img /system/sd
Make the usual directories, and a mountpoint for the old a2sd partition
# mkdir /system/sd/app; mkdir /system/sd/app-private; mkdir /system/sd/dalvik-cache; mkdir /system/sd/apps-tmp
Mount the old a2sd partition
# mount -t ext2 /dev/mmcblk0p2 /system/sd/apps-tmp/
Move all files from the old partition to the image file
# mv /system/sd/apps-tmp/* /system/sd/
Unmount and remove the mountpoint, we don't need it anymore
# umount /system/sd/apps-tmp
# rmdir /system/sd/apps-tmp
Finally, you add the following line to the init script where the a2sd auto mount happens, and comment out the old line.
Code:
[...]
mount -t ext2 -o loop /sdcard/apps.img /system/sd
#mount -t ext2 /dev/mmcblk0p2 /system/sd/
[...]
This should do what you described, in theory. I can't say whether it will work or not. I can't tell whether it will or won't screw up your phone, I can't be held responsible if you screw something up or overlook the details. Either of us might have made a typo somewhere; apply common sense before doing anything.
This sounds great! I think this would also be usefull for someone like me, who has a sd card that doesn't want to be partitioned anymore (cross-linked files??). Only thing possible is fat32 or ntfs.
Am I correct with my assumption?
This sounds a lot harder and more complicated then partioning. Your also talking about a lot of work needing to be done just so people can avoid doing a simple thing like partioning a sd card. I would say it would be very difficult alone to get the os to run a virtual mounting service especially since that will take up resources and slow down the phone. There is a reason they only use this technique on live cds is it works but its slow. most of the computers they are running on have 1gig of ram and 2ghz cpu's. i really dont think the g1 can push this.
I do not think that this is great, it definitely is slower than a ext4 partition on a good class 6 microSD card. And it is more vulnerable to data loss since 2 different filesystems including a 20 year old non-journaling fs at the base of this construct are involved.
Another problem that came to my mind: when you mount your SD card as external USB device to a PC, the file containing your apps will no longer be accessible, or Android will make using the phone as external data storage impossible.
Interesting.
There is, however, a major problem: What happens when you unmount the fat partition on the phone in order to connect with a computer using UMS? Answer: everything on the phone will crash and burn since the apps filesystem will suddenly disappear = BAD.
posixovl is a nice find though...
Note that aufs, loopmount linux filesystems, etc., wouldn't be needed with this since posixovl appears to be vfat with posix extensions, so you should be able to just use posixovl directly on the sdcard.
There are several problems with that though... i.e. how reliable is posixovl regarding users tampering with it?
In any case, a prerequisite for use of it would be certain other changes being planned...
You might want to contribute to this thread:
http://forum.xda-developers.com/showthread.php?t=577941
(note: the thread links to a thread at android-platform, the one here has, as expected, gone off on a tangent... just ignore the junk.)
TylTru said:
So I was using Slax. Great LiveCD/USB linux, extremely customizable, modular, fast, and small, and has the capability of either:
- saving changes to its rootfs onto an AUFS mounted on a non-linux FS (FAT32, NTFS) using posixovl (POSIX Overlay FS) with metadata (permissions, etc.) being held in files
- saving changes to a fixed-size loop mount image.
This got me thinking.
If we could insert all the necessary modules, code, etc. for posixovl into the Android linux, and make a modified a2sd script that takes advantage of posixovl, we could effectively do away with the requirement for crazy partitioning.
It should be simple enough for ROM devs to implement, assuming it's ready and installed:
1. Create folder on main partition if it doesn't exist, something like /sdcard/system/[app, app-private, dalvik-cache, app_s]
2. In the init scripts, before the a2sd stuff, mount /sdcard/system with posixovl on /system/sd
3. Run a2sd as normal, it should automatically just work.
I'll hopefully test this once I get my phone to a stable development/testing stage, and I don't need to make phone calls for a while. Anyone else is welcome to try to implement this idea.
My current test environment:
- HTC Dream (T-mo G1) with the deadly SPL of doom
- Cyanogen Experimental, latest build
- Amon_RA's modded recovery
- Wipe /data, move all existing apps to backup, remove a2sd partition, Backup for Root Users to restore some settings and data
Anyone with ideas or improvements, please let me know.
To be tested:
- Feasibility (can it work?)
- Functionality (does it work?)
- Portability (Can it work on other ROMs and devices like Hero, Pulse, Blur etc.? If so, will likely be moved to XDA's new Android board)
- Stability (Will everything Force Close on boot? Does it run fast enough? Does anything get corrupted over time?)
Links:
- http://sourceforge.net/projects/posixovl - Sourceforge page for posixovl
Click to expand...
Click to collapse
lbcoder said:
Interesting.
There is, however, a major problem: What happens when you unmount the fat partition on the phone in order to connect with a computer using UMS? Answer: everything on the phone will crash and burn since the apps filesystem will suddenly disappear = BAD.
Click to expand...
Click to collapse
I kinda overlooked that point. Oops.
Though this same problem does exist on regular apps2sd when you remove the card without dismounting it, killing all apps and their processes, and freezing Dalvik's method of autostarting some apps.
I do tend to swap cards every now and then, but only after a reboot. Dalvik re-enumerates and caches dex, which makes for a slow boot, but it seems to just work in most cases that the apk install doesn't drop the app's functional payload (helper Linux/shell utils, libraries, NDK .so's) in /data/data (like some emulators, the Android Scripting Environment)
lbcoder said:
There are several problems with that though... i.e. how reliable is posixovl regarding users tampering with it?
Click to expand...
Click to collapse
As far as I know, the metadata files are marked as hidden and system files, and begin with a '.'. And I haven't tried this, but I think modifying the actual files under Windows has no negative effects, but moving, deleting, or copying files would likely be a no-no.
Also, I don't think there's a 'fsck' for posixovl, meaning that if any metadata files were screwed with the wrong way, the entire overlay FS would be trashed.
lbcoder said:
In any case, a prerequisite for use of it would be certain other changes being planned...
You might want to contribute to this thread:
http://forum.xda-developers.com/showthread.php?t=577941
(note: the thread links to a thread at android-platform, the one here has, as expected, gone off on a tangent... just ignore the junk.)
Click to expand...
Click to collapse
I checked that out. It was actually a small inspiration for what I was thinking of.
In any case, Android's package management system needs an overhaul. The package storage needs to be de-Linuxified, as all it is is a bunch of .apk files and .dex/.odex files, the UIDs of apps are in the AndroidManifest.xml, right?
In a somewhat unrelated note, app data needs to be moved to a specified folder structure on the sdcard. My card is full of folders in the root directory with random names.
If I'm understanding you correctly, you're talking about storing an image file on the normal SD card partition(which has to be FAT32 as far as I've seen) and then mounting it, correct? This idea has been talked about at length before on at least 3 separate occasions(2 of which were on this very forum) and found to be a bad idea due primarily to massive security risks since FAT32 has no permissions.
Also, I believe cyanogen ended up dumping unionfs/aufs due to rampant memory issues.
If you are talking about mounting an image from the FAT32 partition, please don't endorse this. We don't want to be throwing in security bugs into android, especially ones such as this which can't be plugged up.
As a modification to what I said: If you're suggesting doing this(or something similar) on a separate filesystem, after that project to change the AOSP to support one with permissions is finished, then I'm in full support.
If you want to go for a single partition on the sd card, why don't you just make the entire card use ext4? Your linux desktop reads it anyway, it uses journaling and so on, I guess it would be faster compared to fat32 and it is definitely safer to use.
And i guess it is not too complicated to mount this partition and use it for pictures, music and so on.
I have not tried this (yet) and I go to bed in 20 minutes, but maybe I will start testing something in that direction tomorrow.
[email protected] said:
If I'm understanding you correctly, you're talking about storing an image file on the normal SD card partition(which has to be FAT32 as far as I've seen) and then mounting it, correct? This idea has been talked about at length before on at least 3 separate occasions(2 of which were on this very forum) and found to be a bad idea due primarily to massive security risks since FAT32 has no permissions.
Also, I believe cyanogen ended up dumping unionfs/aufs due to rampant memory issues.
If you are talking about mounting an image from the FAT32 partition, please don't endorse this. We don't want to be throwing in security bugs into android, especially ones such as this which can't be plugged up.
As a modification to what I said: If you're suggesting doing this(or something similar) on a separate filesystem, after that project to change the AOSP to support one with permissions is finished, then I'm in full support.
Click to expand...
Click to collapse
UNIX permissions don't do anything in the way of "security" unless you have no access to the actual storage device from another computer (as is the case with the unrooted Dream's internal memory), or unless encryption is used. The posixovl driver OVERLAYS Unix permissions over Fat32 filesystems. But even still, with Unix permissions, nothing's stopping someone else from mounting the Ext2 partition and using chown and chmod.
And the image file on the SD card's Fat32 partition is a complete Ext2 partition complete with Permissions. Nothing is lost.
Archont said:
If you want to go for a single partition on the sd card, why don't you just make the entire card use ext4? Your linux desktop reads it anyway, it uses journaling and so on, I guess it would be faster compared to fat32 and it is definitely safer to use.
And i guess it is not too complicated to mount this partition and use it for pictures, music and so on.
I have not tried this (yet) and I go to bed in 20 minutes, but maybe I will start testing something in that direction tomorrow.
Click to expand...
Click to collapse
We'd just have to find the part in the Android that mounts /sdcard/, and change 'vfat' to 'ext2'. The only reason I wouldn't do this, is because it would immediately make it incompatible with Windows and Mac's default FS drivers. As far as I know, the only FS's that are supported universally within Linux, Mac, and Windows, are FAT and NTFS. And NTFS can be made to have crude support for permissions through security descriptors. Although, the Dream SPL, the Recovery images, and most of Android only uses FAT32.
This is discussed in android-platform Group :
http://groups.google.com/group/andr...read/thread/bf0709c157451cd9/f6aee1830c84620f
The goal is to be able to integrate this in android.
And not having to partition the SDCard is one of the requirements so far...
Unix permissions are not stored using fat or vfat, and ntfs is not really supported in desktop linux and i guess it cannot be used in android linux.
I would not use windows anyway so this is no problem to me, and there are drivers around to mount ext systems in windows. As Mac OS is based on unix there will be a solution for this too.
Access usind adb push and pull, via ftp and so on is not touched by using ext4 on the entire sd card I guess.
And if you don't go the easy way using gparted on a live cd or usb device to create 2 partitions, you will have to live with some disadvantages anyway.
Finally I want to say that my ideas are far from being perfect or usable at all, I see this thread as a kind of brainstorming.
im not as linux or android savvy as probably any of you but before the current method of creating a swap partition became the "standard", people used a swap file on the sdcard and linked that. seems similar to what you are suggesting here.
ofcourse when mounting the fat partition elsewhere (ums in windows for example) that swap file could no longer be used within android. i dont see a way to get passed the same issue, but worse here, due to android not having crucial apps when the fat partition is mounted.
then again, i am pretty much over my head in this conversation and could be over looking something...
I'm kind of fascinated by the FUSE + posixovl method of doing this. In the long run I have a feeling that it's going to perform like ****, but I think it's worth testing.
I managed to get both libfuse and mount.posixovl built and running on Android.
posix-overlay(/sdcard/fuse) on /sdcard/fuse type fuse.posixovl (rw,nosuid,user_id=0,group_id=0,default_permissions)
Giving this a little testing now, it definitely works.
Code:
/sdcard/fuse # ls -l
drwxr-xr-x 2 1000 1000 4096 Nov 5 17:17 test
TylTru said:
UNIX permissions don't do anything in the way of "security" unless you have no access to the actual storage device from another computer (as is the case with the unrooted Dream's internal memory), or unless encryption is used. The posixovl driver OVERLAYS Unix permissions over Fat32 filesystems. But even still, with Unix permissions, nothing's stopping someone else from mounting the Ext2 partition and using chown and chmod.
And the image file on the SD card's Fat32 partition is a complete Ext2 partition complete with Permissions. Nothing is lost.
We'd just have to find the part in the Android that mounts /sdcard/, and change 'vfat' to 'ext2'. The only reason I wouldn't do this, is because it would immediately make it incompatible with Windows and Mac's default FS drivers. As far as I know, the only FS's that are supported universally within Linux, Mac, and Windows, are FAT and NTFS. And NTFS can be made to have crude support for permissions through security descriptors. Although, the Dream SPL, the Recovery images, and most of Android only uses FAT32.
Click to expand...
Click to collapse
Ya, I meant more from the standpoint of a rogue app. Since FAT32 has no permissions, what would prevent such an app from modifying the stored image file to, say, change a trusted app with superuser permissions to some new code of its own making to, for example, watch for credit card numbers and send them back to the person who made the original rogue app? I'm always hesitant with any ideas that suggest storing an image file on the sdcard for appstosd for this reason.
Forget it, it's useless.
An overlay filesystem prevents you from enabling USB storage.
If you want to play around with FUSE on Android, here's a repository for my port of libfuse..
http://github.com/cyanogen/android_external_fuse
Hi,
I have an idea. I used symbian S60 of Nokia, Symbian can install app to sdcard. I see that when I mount sdcard to PC, my phone immediately hold all activations of all applications on my phone. And they have a PC sync software that help us access sdcard but not mount sdcard (like that we copy file from computer to sdcard via debug mode on android).
I think we should find out how symbian can do it and we will use their way .
I'm not a developer, I'm just an user.
I talked to a few people about this, and some deep kernel voodoo is going to be needed for this to really happen without partitioning.
Another idea is to forge ahead with this, and ditch the "unmount fs for usb storage" and use RNDIS + Samba or something like that instead to access files on SD. I kind of like this idea.

[SOLVED] Forced Close of core (or all) apps, Internal SD removed unexpectedly...

Hi All,
I got errors mentioned in the title and after few searches, found that there are few Galaxy SL owners who had got into this issue.
Currently Known Root Cause:
A hardware issue possibly due to a board issue or loose attachment of internal SD card to the motherboard (Grrrrrrr SAMSUNG!)
Symptoms:
- Suddenly core applications like phone/messaging start force closing (sometimes all open apps). Only a reboot will solve the issue.
- Sudden reboot of the phone after few hours of running (or even sleeping)
- Sometimes the restart itself hanging with a yellow message "Unknown Upload Mode"
- Message in status bar "Internal SD card has been removed unexpectedly" or "Internal SD card not accessible" or something like "Damaged SD card"
Known Solution:
1. Replacement of board from Samsung Service Center (Good for you if you are within the warranty period)
2. Do some hardware hack to remove the internal SD completely (http://forum.xda-developers.com/showthread.php?t=1651619)
I got this issue just after I finished my warranty period, and hence, I was trying to find if I can do something about this issue by my own. What I wanted was to actually swap my internal SD storage with a proper external SD storage. This is not same as the popular "swapping the internal and external SD card" topic, but that and something more as well!! This will solve the issue of force closes and sudden reboots (may still not solve issue of reboot getting stuck, but I assume phone will not need frequent reboot after solving first 2 issues!)
Galaxy SL has 3 partitions created in the card:
1. ext3 partition for data
2. another small FAT partition - (for what? not sure)
3. Third FAT partition which acts as the normal internal SD card (which is accessible when working as USB mass storage)
Intention here is to move all the partitions to the external SD. Looking at the mount points and vold.fstab, I could not find where the 2nd partition in the above list is mounted/used (If anyone knows, please let me know). So I decided to move atleast the ext3 (data) and fat (/sdcard) to the external SD.
Following are the steps I followed for doing the same:
WARNING!!!
1. Copy these at your own risk. I am not responsible if you brick your phone or lose your data/applications/settings or if the phone goes to a boot loop!
2. Do not continue if you do not understand what is written here
3. Doing this will change the /data partition. So wiping data partition in the normal way will not work (say from CWM). You may need to do 2 steps - wipe (internal) data normally (say using CWM), wipe (external SD) data manually by disabling the script mentioned in the procedure and wiping using make_ext4fs tool (steps are given in PART 3 of this post).
4. This has been tested only on CM9 Alpha 6-11 / rooted DDLF2. Theoretically it may or may not work on other ROMs, depending on other tweaks and changes in the system, no guaranty offered!
5. In case you mess it up, most of the time (but no guarantees!), you can recover by flashing from beginning using ODIN some base versions like KPE and then come to your normal ROM, followed by a nandroid recovery (so better do a nandroid backup before you try anything .
Pre-requisites:
- Rooted Phone
- Kernel with init.d support (and preferably ext4 as well if you want that)
- Basic ADB knowledge
- A blank micro SD card with at least class 4 (class 6 or greater preferred) speed and with sufficient capacity - say 8/16/32 GB
PART 1 - PREPARING THE EXTERNAL SD
--------------------------------------------------------------------
0. !!! FIRST !!!
Do a Nandroid Backup (and also other app level backups like Titanium or MyBackup)
Backup contents of your FAT partition (mmcblk0p1) - ie, the internal SD card card
Backup contents of your external SD card
1. Download sdparted-recovery.zip from web (http://forum.cyanogenmod.com/topic/6433-solved-messed-up-partitions-on-internal-storage - check messages like 11 to see the basic usage) and extract the contents
2. Using ADB, copy the extracted files in sdparted directory into /system/bin, change permission for all of them to 755 using chmod
3. Put a clean external SD card into the phone
4. In an ADB shell, run /system/bin/parted giving mmcblk1 as the target. Now resize the existing FAT partition (this is the first and default partition in the card). Tips:
print gives the existing partition(s)
help gives help on various options
for resizing and creating partitions, inputs should be derived from the initial print output (which gave the first and last points)
Eg: If card is 16GB, and you want to reserve 4GB for data, then resize the first partition to 12GB
5. Create a new partition of type ext2 with remaining size (say 4G in our case). Save and quit parted.
7. (Do this only if your kernel supports ext3/ext4) Run "tune2fs -j /dev/block/mmcblk1p2" to convert ext2 to ext3
8. (Do this only if your kernel supports ext4) Using ADB, copy "make_ext4fs" (attached) to /system/bin
9. (Do this only if your kernel supports ext4) Convert ext3 partition to ext4 using make_ext4fs ("make_ext4fs /dev/block/mmcblk1p2")
10. Now the partitions are ready
- They will be visible as mmcblk1p1 (FAT) and mmcblk1p2 (ext4) when you cat the /proc/partitions
- They will be visible as partitions 1(FAT) and 2 (ext4) in the print output of parted.
Confirm the above before proceeding further.
PART 2 - SWAPPING EXTERNAL AND INTERNAL SD
---------------------------------------------------------------------------------
1. Write a script, say 00remnt similar to the attached sample file which currently I am using (If you do not follow the script, better don't proceed. Else check if things are fine for your current base ROM settings)
2. Push this into /etc/init.d/ using ADB
3. Change permissions of the file to 755
4. If you need, copy the contents of your internal SD card FAT partition (/sdcard) to the external SD card FAT partition (/sdcard/external_sd or /emmc)
5. Use the popular (relevant methods) to swap the internal and external FAT partitions (which actually changes the vold.fstab contents). Normal search in the forum will give you the available methods - some ROMs support it as options, others have mods which will accomplish the same
5. Reboot and enjoy
Voila!!! Now the system is not using internal SD card (for most purposes) at all!! And your phone can now run for days without abrupt force closes and reboot. You still may get a message like SD card is removed/damaged, (and /emmc or /sdcard/exteranal_sd may become inaccessible - so better use it only as a temporary storage!). But you can safely ignore these messages as that is the internal SD card which we are not using anyway... Enjoy...
PART 3 - WIPING DATA PARTITION (in case you need this step later)
-----------------------------------------------------------------------------------------------------------
1. Change permission of the 00remnt to 644
2. Reboot the phone (now the phone will come up with default internal SD partition for data)
3. From ADB shell, execute "make_ext4fs /dev/block/mmcblk1p2" (see PART 1 on how to get this tool)
4. Change permission of the 00remnt to 755
5. Reboot the phone to recovery, wipe the /data as normal
rgds,
Dipu.
PS: If any one knows how our phone uses the 2nd partition in the internal SD card, please let me know... I am assuming that it is not used for any critical purposes (as my phone ran successfully for few days without any issue). May be it is used in some kernel/ROM, if so, please let me know.
Though i didn't understand a word(being an internee dentist) it will be useful to others.appreciate your efforts!!
Sent from my GT-I9003 using xda app-developers app
This is what i call a complete and useful guide.
This should become a sticky.. now... NOW!
+1 for sticky, superb info.
that would be a really nice sticky
i had the motherboard changed..
Thanks Dipu K for your efforts.
I've tried this solution in my I9003, and I have only a problem: When reboot the phone, /data is copied into de Ext4 partition on SD card, but all aplications have errors because isn´t possible to unmount /data,
Here is the messaje in remnt-log (only a few lines):
Code:
...
3. Make Directory --->
4. Mount new data partition from external SD --->
5. Copy the current files in /data
6. Remove current files in /data
7. Unmount /data
umount: can't umount /data: Device or resource busy
8. Remove dir /data as a safety measure
9. Linking external sd data partition as /data
10. Final Mount status --->
...
What can I do to correct this?
Thanks
bfsa said:
...
What can I do to correct this?
Thanks
Click to expand...
Click to collapse
Finally, I've changed a line on 00remnt, and seems to work properly: busybox umount -l /data 2>> /system/remnt-log
Where can I get make_ext4fs? Sadly the same case has happened to me...
Hi Guys.
I am using alpha 4 from last one month and experience was awesome but from last 1 week I am getting lot of FC for lot of services like exchange service gapps what's up camera and lot more. I am not sure why FC issue started happening from last one week.
History :
I was using CM 10 alpha 1 then alpha 2 then alpha 3 and now on alpha 4.
I really fed up with Force close issue from last one week . I tried reboot but still 80% of apps and services getting FC. Please guide me on this .
Sent from my GT-I9003 using xda app-developers app
Sent from my GT-I9003 using xda app-developers app
hi all, i have a galaxy i9003 with a corrupted or completely dead (not sure) internal memory chip. I have come to this conclusion after 3 days of trying to install custom and stock roms. I can access recovery and download mode but i cant install any ROM, the phone keeps rebooting after the SAMSUNG (whole screen black except SAMSUNG in the middle). All i have is atm this http://forum.xda-developers.com/showthread.php?t=1351056 installed on my phone via ODIN. I dont have knowledge about ADB, can somebody help me out with instructions more?
Pre-requisites:
- Rooted Phone
Click to expand...
Click to collapse
Is there a solution without a rooted phone or can I root it somehow, even if the there is a hardware defect? I got an error with /dev/block/mmcblk1p that rfs can't be written.
I have a problem. My friend gave me an i9003. Wipe is not working at all, even from Recovery. I connect the phone to PC and use the internal card, no matter what I do, changes don't apply. I copy/paste/delete/format/even odin flash, no good. Everything comes back as before reboot. What is it related to?
I used to have an i9000, but nothing applies to i9003. I flashed i9000 1000 times and at last got a mmcblk02 error, fixed it with external sd swap. I'm thinking of swapping emmc with sd on this one too, but cant install a rom from CWM, I can install CWM from ODIN though and can flash CFROOT too, but in CWM internal storage can't be mounted... Motherboard problem?
I will try to use this guide and report back soon...
allxx said:
I have a problem. My friend gave me an i9003. Wipe is not working at all, even from Recovery. I connect the phone to PC and use the internal card, no matter what I do, changes don't apply. I copy/paste/delete/format/even odin flash, no good. Everything comes back as before reboot. What is it related to?
I used to have an i9000, but nothing applies to i9003. I flashed i9000 1000 times and at last got a mmcblk02 error, fixed it with external sd swap. I'm thinking of swapping emmc with sd on this one too, but cant install a rom from CWM, I can install CWM from ODIN though and can flash CFROOT too, but in CWM internal storage can't be mounted... Motherboard problem?
I will try to use this guide and report back soon...
Click to expand...
Click to collapse
Please do send us a report, I'd appreciate it very much. Have to deal with a similar situation as well for an old i9003. I've tried to employ the steps mentioned here but could not get it to work as well.
Hi everybody!
Had to remove the internal SD to install everything on the external one by following the mentioned post. Nothing else worked.
http://forum.xda-developers.com/showthread.php?t=1651619
can anyone here recomended me custom rom that already with swap sdcard?
Dipu K said:
Hi All,
I got errors mentioned in the title and after few searches, found that there are few Galaxy SL owners who had got into this issue.
Currently Known Root Cause:
A hardware issue possibly due to a board issue or loose attachment of internal SD card to the motherboard (Grrrrrrr SAMSUNG!)
Symptoms:
- Suddenly core applications like phone/messaging start force closing (sometimes all open apps). Only a reboot will solve the issue.
- Sudden reboot of the phone after few hours of running (or even sleeping)
- Sometimes the restart itself hanging with a yellow message "Unknown Upload Mode"
- Message in status bar "Internal SD card has been removed unexpectedly" or "Internal SD card not accessible" or something like "Damaged SD card"
Known Solution:
1. Replacement of board from Samsung Service Center (Good for you if you are within the warranty period)
2. Do some hardware hack to remove the internal SD completely (http://forum.xda-developers.com/showthread.php?t=1651619)
I got this issue just after I finished my warranty period, and hence, I was trying to find if I can do something about this issue by my own. What I wanted was to actually swap my internal SD storage with a proper external SD storage. This is not same as the popular "swapping the internal and external SD card" topic, but that and something more as well!! This will solve the issue of force closes and sudden reboots (may still not solve issue of reboot getting stuck, but I assume phone will not need frequent reboot after solving first 2 issues!)
Galaxy SL has 3 partitions created in the card:
1. ext3 partition for data
2. another small FAT partition - (for what? not sure)
3. Third FAT partition which acts as the normal internal SD card (which is accessible when working as USB mass storage)
Intention here is to move all the partitions to the external SD. Looking at the mount points and vold.fstab, I could not find where the 2nd partition in the above list is mounted/used (If anyone knows, please let me know). So I decided to move atleast the ext3 (data) and fat (/sdcard) to the external SD.
Following are the steps I followed for doing the same:
WARNING!!!
1. Copy these at your own risk. I am not responsible if you brick your phone or lose your data/applications/settings or if the phone goes to a boot loop!
2. Do not continue if you do not understand what is written here
3. Doing this will change the /data partition. So wiping data partition in the normal way will not work (say from CWM). You may need to do 2 steps - wipe (internal) data normally (say using CWM), wipe (external SD) data manually by disabling the script mentioned in the procedure and wiping using make_ext4fs tool (steps are given in PART 3 of this post).
4. This has been tested only on CM9 Alpha 6-11 / rooted DDLF2. Theoretically it may or may not work on other ROMs, depending on other tweaks and changes in the system, no guaranty offered!
5. In case you mess it up, most of the time (but no guarantees!), you can recover by flashing from beginning using ODIN some base versions like KPE and then come to your normal ROM, followed by a nandroid recovery (so better do a nandroid backup before you try anything .
Pre-requisites:
- Rooted Phone
- Kernel with init.d support (and preferably ext4 as well if you want that)
- Basic ADB knowledge
- A blank micro SD card with at least class 4 (class 6 or greater preferred) speed and with sufficient capacity - say 8/16/32 GB
PART 1 - PREPARING THE EXTERNAL SD
--------------------------------------------------------------------
0. !!! FIRST !!!
Do a Nandroid Backup (and also other app level backups like Titanium or MyBackup)
Backup contents of your FAT partition (mmcblk0p1) - ie, the internal SD card card
Backup contents of your external SD card
1. Download sdparted-recovery.zip from web (http://forum.cyanogenmod.com/topic/6433-solved-messed-up-partitions-on-internal-storage - check messages like 11 to see the basic usage) and extract the contents
2. Using ADB, copy the extracted files in sdparted directory into /system/bin, change permission for all of them to 755 using chmod
3. Put a clean external SD card into the phone
4. In an ADB shell, run /system/bin/parted giving mmcblk1 as the target. Now resize the existing FAT partition (this is the first and default partition in the card). Tips:
print gives the existing partition(s)
help gives help on various options
for resizing and creating partitions, inputs should be derived from the initial print output (which gave the first and last points)
Eg: If card is 16GB, and you want to reserve 4GB for data, then resize the first partition to 12GB
5. Create a new partition of type ext2 with remaining size (say 4G in our case). Save and quit parted.
7. (Do this only if your kernel supports ext3/ext4) Run "tune2fs -j /dev/block/mmcblk1p2" to convert ext2 to ext3
8. (Do this only if your kernel supports ext4) Using ADB, copy "make_ext4fs" (attached) to /system/bin
9. (Do this only if your kernel supports ext4) Convert ext3 partition to ext4 using make_ext4fs ("make_ext4fs /dev/block/mmcblk1p2")
10. Now the partitions are ready
- They will be visible as mmcblk1p1 (FAT) and mmcblk1p2 (ext4) when you cat the /proc/partitions
- They will be visible as partitions 1(FAT) and 2 (ext4) in the print output of parted.
Confirm the above before proceeding further.
PART 2 - SWAPPING EXTERNAL AND INTERNAL SD
---------------------------------------------------------------------------------
1. Write a script, say 00remnt similar to the attached sample file which currently I am using (If you do not follow the script, better don't proceed. Else check if things are fine for your current base ROM settings)
2. Push this into /etc/init.d/ using ADB
3. Change permissions of the file to 755
4. If you need, copy the contents of your internal SD card FAT partition (/sdcard) to the external SD card FAT partition (/sdcard/external_sd or /emmc)
5. Use the popular (relevant methods) to swap the internal and external FAT partitions (which actually changes the vold.fstab contents). Normal search in the forum will give you the available methods - some ROMs support it as options, others have mods which will accomplish the same
5. Reboot and enjoy
Voila!!! Now the system is not using internal SD card (for most purposes) at all!! And your phone can now run for days without abrupt force closes and reboot. You still may get a message like SD card is removed/damaged, (and /emmc or /sdcard/exteranal_sd may become inaccessible - so better use it only as a temporary storage!). But you can safely ignore these messages as that is the internal SD card which we are not using anyway... Enjoy...
PART 3 - WIPING DATA PARTITION (in case you need this step later)
-----------------------------------------------------------------------------------------------------------
1. Change permission of the 00remnt to 644
2. Reboot the phone (now the phone will come up with default internal SD partition for data)
3. From ADB shell, execute "make_ext4fs /dev/block/mmcblk1p2" (see PART 1 on how to get this tool)
4. Change permission of the 00remnt to 755
5. Reboot the phone to recovery, wipe the /data as normal
rgds,
Dipu.
PS: If any one knows how our phone uses the 2nd partition in the internal SD card, please let me know... I am assuming that it is not used for any critical purposes (as my phone ran successfully for few days without any issue). May be it is used in some kernel/ROM, if so, please let me know.
Click to expand...
Click to collapse
Somebody's Samsung Galaxy SL i9003 had wiped the internal SD card by itself! Is this even possible that it just wipes/formats on it's own? Is there any advice? The contacts appear to still be there.

[MOD] 1-Click Flashable exFAT + NTFS + EXT4 support for CM10.1/AOSP + Partitioned SD!

August 4th 2013 - This script has not been maintained in a while. A big thank you to Captain_Throwback for providing continued support.
This is now minimally supported. Now that CM is adding native NTFS/exfat support, the only thing my script handles is multiple partitions.
July 21 2014 - Thank you n01ce! Please see n01ce's post for a "6.5 Alpha" that may solve some checksum problems with exFAT. I have changed devices, so this thread is for historical purposes/legacy support.
"HELP! I accidentally made my exFat card unreadable!!" -- or-- "I can't see more than 1 partition in windows!!"
Please read the instructions at the bottom of THIS POST HERE. No data will be lost!
"My card was working up until a moment ago but now the phone is showing "card damaged!!"
Re-run the script by typing "fuse-mountsd.sh" as root. The script will attempt to repair and re-mount.
If that fails, run "chkdsk /f" in Windows. Do not reformat until it is the last resort!​
TL;DR: (Flash this), put exFat/FAT32/NTFS/EXT4 sdcard in, reboot.​To remount, type "fuse-mountsd.sh" in a console (or) run using RomToolbox Lite (in /system/xbin/)
Needs to be run every time card is ejected + reinserted -- including when UMS is used
To unmount, type "fuse-mountsd.sh umount" (or if 1 partition) use Storage Manager
Non-customized multi-partitions mounted in /storage/<their name>
​
Uses init.d to fix/mount at boot
Scans for/mounts all useable block devices (with safety checks)
User-specifiable dynamic mount points
~~Create a ".mounthere" file in the partition with the first line "/location/to/mount/at"
~~Use the first line "skip" or "SKIP" to bypass that partition
Rescans for media when you re-mount
Repairs typical exFat damage caused by CM10.1 (with safety nets)
FAT32 support
NTFS-3g support (noatime set to reduce wear)
EXT4/3/2 support (*fuse built into JB/CM10.1) <- (MTP+EXT4 permissions need to be set to media_rw:media:rw 775!!))
Cleans up after itself: disables/enables ADB/root-security to what you set
BUGS:
All -- ntfsfix does not work. Binaries need to be recompiled. Not a major issue only dead weight.
exFAT may prevent deep-sleep. (NTFS on GS3 doesn't seem to have this issue.)
If you use EXT4/3/2, you need to run the following commands to allow the card to be accessed by the mobile-user:
Code:
find /storage/sdcard1/ -print0 | xargs -0 chown media_rw:media_rw
chmod -R 775 /storage/sdcard1/
(or)
find /storage/sdcard1/ -print0 | xargs -0 chown root:media_rw
Other phones -- Post a debug.txt if it works for you.
CM10 (4.1.x) -- Support is experimental. Use at your own risk.
CM 10.1 (4.2.x) -- Implemented RSA Key Signing Fix, works with BOOTICE.exe partitioned cards.
EXPERTS:
Everything is softcoded thanks to the $SECONDARY_STORAGE, $ANDROID_DATA, $ANDROID_STORAGE, $ANDROID_CACHE env variables and get/setprop command. Some locations are hardcoded in the script's "analyzePhone" function as fallbacks.
To custom-map mountpoints, create a ".mounthere" file in the root of each partition. "skip" or "SKIP" = ignore partition at mount, "/your/path/here" will use that path (or the default if bad). Defaults to "$ANDROID_STORAGE/device_id" if directory is invalid. Removes any temporary directories (in /storage/ only) at unmount. YOU HAVE TO CREATE ANY CUSTOM DIRECTORIES OUTSIDE "/storage" YOURSELF -- I set it like that as a security precaution.
To disable "Directory Creation Security", edit the line at the top of the script to say "dirSECURITY=0". This script will remount / and /storage as RW if needed.​
Here is a quick rundown of typical use-cases:
You want one large (exFat/NTFS/ext4) partition:
No customization needed, just flash and go
You want a small FAT32 partition (p1) at the beginning (for firmware/CWM/TWRP) with another big ext4 partition (p2) for your SD card mount. [ Your ROM's vold will mount (p1:fat32) as /storage/sdcard1 automatically. To get it to swap over: ]
Create a ".mounthere" file on (p2) "big" partition with the text "/storage/sdcard1"
This will override Vold and mount the (p2) as external storage. The FAT32 partition will be mounted in /storage/mmcblk1. If you want to mount it elsewhere (even /data/media/0/extSD ! ) simply add another ".mounthere" on the FAT32 partition. (The directory must already exist -- you must make it beforehand -- or disable Directory Security feature.) Be warned - Vold will mount the first partition as /storage/sdcard1 any chance it gets -- even in the background -- unless there is something mounted there already (by this script).
You have (1) partition for a game app you play (internal storage) that you want to rebind, (2) another part you want to rebind OVER an existing directory, and (3) your main storage.
Create a ".mounthere" on (1) with text "/location/of/your/game/app/data"
".mounthere" on (2) with text "/folder/you/want/substituted"
".mounthere" on (3) with text "/storage/sdcard1"
You are a long-hair-hippie Linux developer with 4 partitions, each in a different filesystem, and want them mounted hidden from apps and listed by block device so you know what partition you are on:
No customization needed, just flash and go
SUPPORT:
I can only provide support if you supply me with logs. Do so by typing "fuse-mountsd.sh > /sdcard/debug.txt 2>&1" and opening the Debug.txt in your phone's storage.
It's all automatic now - so if it mounts your modem as writeable and kicks your dog don't blame me. (It excludes dangerous block devices automatically [mmcblk0, /system, mtdblock, etc], but there is always a 1% chance it will miss something.) If it does, report it here so I can fix it.
If you intend to use this with a other ROMs/phones, IT SHOULD STILL WORK. Post any errors or weird behavior.
Code:
Changelog
[I]7.0 - TBA (Make GUI? Fix ext4 permissions automatically? Get paid?)[/I]
6.4 - No longer uses "mount" output (wasn't acting standard-ly. Using /proc/mounts instead)
- [COLOR="Red"]Got rid of conv=notrunc[/COLOR]. Be careful!
6.3 - Bugfix to scrubMount code
6.2 - No longer Experimental / final unstable
- added rough ext2/3 support
6.1 - mount command bugfix
6.0 - Added a bypass for Directory Security, fixed some bugs.
5.9 - Rewrote NOGO code from scratch -- UUIDs ignored
5.8 - (??)
5.7 - Support for Note2 formatted exFat cards + more (0xf4 bug)
5.6 - bug fixed: no longer detects zram/assumes multimount
5.5 - [COLOR="Red"]Experimental support for weird devices[/COLOR]
5.4 - [b]Major bugfix!![/b] Fix fixmyexfat.sh coding fail
5.3 - Fixed "vffat" support. Undid HARD QUIT on bad Nogo, made it a soft one.
5.2 - Increased logging of tables, HARD QUIT if Nogo not found
5.1 - Quick patch to fix dm-* device blacklist
5.0 - [b]SUPPORTS MULTI-PARTITIONED CARDS! Autoscans for block devs! Complete rewrite![/b]
4.1 - Quick patch to check mmcblk1
4.0 - [B]WORKS 100% ON 4.2.2!![/B] My script is the first to achieve this AFAIK
3.3 - fixed a bug detecting existing mounts (related to "non-persistent mount points" issue)
3.1 - added dynamic exFAT repair code
3.0 - added NTFS/ext4 support
1.0 -> 2.0 <Removed>
Attribution credits:
Original thanks go to originator of the method, smitna in the Galaxy S2 forum. Additional thanks go to shardul_seth (Post 23) for compiling the latest version of the fuse-exfat and ntfs-3g binaries for ARM, and of course Andrew Nayenko for his efforts in creating GPL'd exFat code (fuse-exfat on google code).
[HOWTO][exFAT][WORK IN PROGRESS] Mount exFAT formatted drives and cards - smitna
Full NTFS Read Write support for Android (ARM) - shardul_seth
[HOWTO][exFAT][CM10.1] Working 64GB ext sdcard with fuse-exfat (1.0.1) + FIX broken (my original Dev thread)
I believe the term is I "kanged" their binaries. The rest is mine. This is a "mod"/"hack" until CM adds native support. (If ever: exFat)​
DONATIONS:
https://supporters.eff.org/donate , or help a noob by linking to a solution in their thread. :good:
https://plus.google.com/+CyanogenMod/posts/ib5wz8jk1JyOne of the CM Team has flesh eating bacteria! Keep CM alive! (Literally)​
I'm a noob, this looks scary to me. Either way, I needs me some exfat cuz my movies are too large for fat32.
My only question is: Even though this is written for CM10.1 on Verizon s3, might this also work on T-mobile s3 with an AOSP (Android 4.2.2) ROM?
Here's what I'm running:
SGH-T999 (d2tmo)
Android 4.2.2
Kernel: 3.0.62-cyanogenmod-g137df31
ROM: Liquid-JB-v2.1-RC1
Build:liquid-d2tmo-userdebug 4.2.2 JDQ39
I've spent the last 2 days searching and testing to no avail. My sdcard is running hot trying to get files larger than 4gb on it. I've tried formatting to exfat, ntfs, ext4, even hfs+, no success. Paragon and ntfssd apps couldn't mount it either.
Any help on this matter would be greatly appreciated!
Even though this might not work on T-mobile, thank you either way, I'm glad there are people like you developing for 64gb cards.
I wouldn't say I'm a developer, just a scripter with a lot of time on her hands.
lordazoroth said:
My only question is: Even though this is written for CM10.1 on Verizon s3, might this also work on T-mobile s3 with an AOSP (Android 4.2.2) ROM?
Click to expand...
Click to collapse
MAKE A NANDROID. This mod should do nothing permanently harmful anyway: it looks for EXFAT before writing anything.
Carrier doesn't matter. It only depends (1) if your kernel has FUSE support, (2) if it has init.d support and (3) what your Block device is.
I think Google added FUSE by default in JB, and anything based off CM10.1 will have it
Type "echo $SECONDARY_STORAGE" in a terminal emulator. If it displays ANYTHING other than blank it should work.
The Block device is trickier. Type "blkid" as root with with your FAT32 card in and out. The one that disappears is your Card's Block device, and should be /dev/block/mmcblk1p1.
If you have any doubts, don't do it.
HMkX2 said:
I wouldn't say I'm a developer, just a scripter with a lot of time on her hands.
MAKE A NANDROID. This mod should do nothing permanently harmful anyway: it looks for EXFAT before writing anything.
Carrier doesn't matter. It only depends (1) if your kernel has FUSE support, (2) if it has init.d support and (3) what your Block device is.
I think Google added FUSE by default in JB, and anything based off CM10.1 will have it
Type "echo $SECONDARY_STORAGE" in a terminal emulator. If it displays ANYTHING other than blank it should work.
The Block device is trickier. Type "blkid" as root with with your FAT32 card in and out. The one that disappears is your Card's Block device, and should be /dev/block/mmcblk1p1.
If you have any doubts, don't do it.
Click to expand...
Click to collapse
Awesome instructions, very much appreciate it. Looks like it's time to get to work. I checked the zip file thoroughly and cross-checked it with my root directories to see if it overwrites anything and it looks like it just adds stuff. From what I've seen, this is the only game in town so I'll post back once I'm done.
If this does work, this is a godlike zip file and it does something nothing else can do right now
Ok still not mounting properly.
Here's what I did:
Typed "echo $SECONDARY_STORAGE" in a terminal emulator, showed "/storage/sdcard1"
Typed "blkid", showed "/dev/block/mmcblk1p1" only when sd card was inserted under fat32 file format
Formatted sd card to exFAT on PC, inserted back into s3
Flashed CM10.1_exFAT-mountsd_2.0_HMkX2.zip
Ran terminal emulator, typed su >> exfat-mountsd.sh got this:
[email protected]:/ $ su
[email protected]:/ # exfat-mountsd.sh
[exfat-mountsd v2.0] exFat autorepair and mount script for CM10.1 (HMkX2 CORE//XDA)
Automated mounting script for exFat on GS3
/storage/sdcard1 is not mounted. (OK)
Calling [fixmyexfat] on /dev/block/mmcblk1p1 (if needed)
Broadcasting: Intent { act=android.intent.action.MEDIA_CHECKING dat=file:///storage/sdcard1 }
Broadcast completed: result=0
[fixmyexfat v2.0] exFat header repair tool (HMkX2 CORE//XDA)
More robust than before!
Usage: /system/xbin/fixmyexfat.sh <block device, eg /dev/block/mmcblk1p1>
[fixmyexfat] Manual target is /dev/block/mmcblk1p1
1+0 records in
1+0 records out
512 bytes transferred in 0.166 secs (3084 bytes/sec)
Segment 1 (0:4) (BAD)
4+0 records in
4+0 records out
4 bytes transferred in 0.012 secs (333 bytes/sec)
Segment 2 (484:4) (BAD)
4+0 records in
4+0 records out
4 bytes transferred in 0.007 secs (571 bytes/sec)
Segment 3 (508:4) (BAD)
4+0 records in
4+0 records out
4 bytes transferred in 0.005 secs (800 bytes/sec)
Check complete!
Check complete, mounting and initializing...
########################## ATTEMPTING COMMAND ##########################
mount.exfat-fuse -o rw,dirsync,umask=0 /dev/block/mmcblk1p1 /storage/sdcard1
Attempting bypass...
* daemon not running. starting it now on port 5038 *
* daemon started successfully *
connected to localhost:5556
List of devices attached
localhost:5556 device
Running ADB commands
FUSE exfat 1.0.1
ERROR: invalid VBR checksum 0xa04b8eb5 (expected 0x804d6ce4).
Broadcasting: Intent { act=android.intent.action.MEDIA_MOUNTED dat=file:///storage/sdcard1 }
Broadcast completed: result=0
Process complete!
[email protected]:/ #
Not sure how to read this...
Afterwards my notification panel says: "Damaged SD card : SD card is damaged. Try reformatting it."
Tried restarting s3, mounting in storage settings, reformatting in PC. Ran script 4 times on a fresh exFAT format with the same notification error (format was unrecognizable by s3 and PC after running terminal command "exfat-mountsd.sh" [don't worry didn't lose any data ]).
After each format to exFAT on my PC I placed a few images on the card to ensure it was functioning properly, /storage/sdcard1 directory is always empty.
Mounting in settings >> storage generates the same notification error: "Damaged SD card : SD card is damaged. Try reformatting it."
Any ideas?... it is detecting an SD there after mount attempts (despite exFAT format) interestingly enough. Though nothing is detected after a reboot unless another script or settings >> storage mount attempt is performed.
I should mention that I ran a "quick" format when formatting the SD card from Fat32 to exFAT, not sure if that might be relevant.
Hm... well, I can tell you what it means. Quick formatting is fine, I actually prefer it since flash memory has a limited life. Second, "chkdsk /f" in windows will repair your card + data -- the card isn't "damaged", it's just that 4 letters at the beginning were changed. (See: Segment1, Segment2, Segment 3 messages.) My scripts change those 4 letters back, in a safe-ish way.
Unfortunately, without having a hex-dump of your working exFat header I can't say what those four letters should be. I got mine using a program called Hex Editor Neo on what I had available, a Sandisk 64gb class-10, and are what I included in the script. When the letters don't line up like it expects, you get a checksum error.
Without that, there is one single thing you can try - but has a high likelyhood of success.
Use RootBox explorer, navigate to /system/xbin/ and DELETE the file called "fixmyfat.sh".
Turn your phone OFF. Eject the SD card
chkdsk /f the card or quick format it to fix it, put a test file on it from Windows
Put the card in your phone, turn on.The card must be in the phone before it is turned on.
If that works for you, and the card works, you can give me a hex dump pretty easily so I can edit the script. IF it works, and I highly suspect it will, get a hex dump by typing EXACTLY:
dd if=/dev/block/mmcblk1p1 bs=1 count=512 of=/sdcard/working_sd.bin​ <- corrected
That will place a text file in your internal sd card than you can post/send me. Again, thanks for bearing with me, this started out as something for myself then made better in the hopes other people could use it. If you could re-corrupt the card (by unplugging/replugging it while the phone is on) and send me a hex dump of the "Card Damaged" state, even better.
O.O... you are awesome!
I'll get on this right away, and I'd be happy to help any way i can
---------- Post added at 09:19 PM ---------- Previous post was at 08:52 PM ----------
OMG IT WORKS!!! the card mounted
I tried the line of code and it gave me an error:
[email protected]:/ $ su
[email protected]:/ # dd if=/dev/blk/mmcblk1p1 bs=1 count=512 of=/sdcard/working_sd.bin
/dev/blk/mmcblk1p1: cannot open for read: No such file or directory
1|[email protected]:/ #
My /sdcard directory seems to be a redirect to /storage/sdcard0 (i think), i have a lot of these (what appear to be redirects) on my phone now after upgrading from android 4.0.4 to 4.2.2. If I changed the end of that line of code to something like "of=/storage/sdcard0/0//working_sd.bin" (or any similar working directory), might that solve the problem or am I reading that wrong?
Thank you so much, this is... very powerful!
Great work on this!
Double post.
Please check my post for the correct DD command - I typed /blk instead of /block due to habit.
I'm glad it works. As long as you don't re-plug the card while it is on, you will have no problems. If you accidentally DO "corrupt" the card, just "chkdsk /f" in Windows, turn the phone off, put the card in, and turn it on.
And the biggest help you can give would be those headers. (I was looking at the exfat.fsck-fuse code, apparently even THAT can't fix it!) For the time being, I will re-do the scripts to display more information so I can troubleshoot more easily.
HMkX2 said:
Please check my post for the correct DD command - I typed /blk instead of /block due to habit.
I'm glad it works. As long as you don't re-plug the card while it is on, you will have no problems. If you accidentally DO "corrupt" the card, just "chkdsk /f" in Windows, turn the phone off, put the card in, and turn it on.
And the biggest help you can give would be those headers. (I was looking at the exfat.fsck-fuse code, apparently even THAT can't fix it!) For the time being, I will re-do the scripts to display more information so I can troubleshoot more easily.
Click to expand...
Click to collapse
Sounds bad, I don't know why all these companies are sticking with Fat32 after all these years. Fat32 has been obsolete since like 2000, don't we have open source formats like ext4 now? - that's my rant lol. Either way, it works and I got the file. Btw, this file acts strangely on my device, I couldn't see it in windows explorer during plugin and It wouldn't copy to my sd card even though other files seem to be copying fine. Had to email it to myself from my phone. Thank you so much for all your help, let me know if you need anything else
Rename the file and remove .rar extension before use, xda doesn't allow .bin extensions to be uploaded.
Quick question: If I shut the phone down and pull the SD, can I turn the phone back on and use it without the SD while I load the SD up with files, then power off, re-insert the SD and power on again? (like will it automount again?)
Yay!
HMkX2 said:
Please check my post for the correct DD command - I typed /blk instead of /block due to habit.
I'm glad it works. As long as you don't re-plug the card while it is on, you will have no problems. If you accidentally DO "corrupt" the card, just "chkdsk /f" in Windows, turn the phone off, put the card in, and turn it on.
And the biggest help you can give would be those headers. (I was looking at the exfat.fsck-fuse code, apparently even THAT can't fix it!) For the time being, I will re-do the scripts to display more information so I can troubleshoot more easily.
Click to expand...
Click to collapse
Very interesting. I can go on the hunt for headers if you like. I have loads of sd cards.
Oddly enough, I switched to FAT32 even though I'm on a TouchWiz ROM, cause exFAT does not use alternating file allocation tables. When exFAT gets borked, it gets super borked and you have to use chkdsk (or some other brutish method) to retrieve files. When FAT32 gets borked, you can load the last table that was working and elegantly pull your files off the card (no need to muddle through a pile of chkdsk files and find the correct extensions).
Any possibility that this method could be used to mount a more robust file system like ext[2,3,4]? Journaling would be nice. Or some transaction safe file system.
Ta very much,
ALQI
Re: [MOD] Flashable exFAT support for CM10.1 / AOSP roms (external SD)
Great.I'll try it.
Sent from my SCH-I535 using xda premium
lordazoroth said:
Sounds bad, I don't know why all these companies are sticking with Fat32 after all these years. Fat32 has been obsolete since like 2000, don't we have open source formats like ext4 now?
Click to expand...
Click to collapse
Why we have 15 competing standards... "Never attribute to malice that which is adequately explained by stupidity."
Btw, this file acts strangely on my device, I couldn't see it in windows explorer during plugin and It wouldn't copy to my sd card even though other files seem to be copying fine.​Any files you create on the device without "Rescanning for media" will not be visible in the MTP (Mass Tranfer Protocol) "MP3 player-like" abstracted FUSE filesystem. (One reason why people want UMS (USB Mass Storage) "hard drive-like" support, you see things immediately/it's faster.) Get a free program called SDrescan from Google Play, or run the command below(?), to update the MTP index and see files you create ON the device.
Code:
am broadcast -a android.intent.action.MEDIA_MOUNTED -d file://$SECONDARY_STORAGE
am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///storage/sdcard0
...let me know if you need anything else Quick question: If I shut the phone down and pull the SD, can I turn the phone back on and use it without the SD while I load the SD up with files, then power off, re-insert the SD and power on again? (like will it automount again?)​Yes, the mount script will simply fail and there will be a silent error. (I need to code some error checking if you insert a non-exfat card...)
Like I said, if you could intentionally re-corrupt the header by using Storage Manager to "Unmount SD" then "Mount SD", then the DD command, (and rescanning media to copy the file off!) I'd appreciate it. Although, I have a second idea of how to get around that problem in mind.....
alquimista said:
Very interesting. I can go on the hunt for headers if you like. I have loads of sd cards.
Click to expand...
Click to collapse
Thanks but I think the bottom line is (1) there is no working open source exfat.fsck anyway and (2) headers are unique per-device. The proper fix is re-coding vold to not run fsck.msdos on a fsck.exfat card.
Oddly enough, I switched to FAT32 even though I'm on a TouchWiz ROM, cause exFAT does not use alternating file allocation tables. When exFAT gets borked, it getse that wa super borked and you have to use chkdsk (or some other brutish method) to retrieve files. When FAT32 gets borked, you can load the last tabls working and elegantly pull your files off the card (no need to muddle through a pile of chkdsk files and find the correct extensions).
Any possibility that this method could be used to mount a more robust file system like ext[2,3,4]? Journaling would be nice. Or some transaction safe file system.​Yep, that is all 100% true. But I've lost files on fat32 drives as well - and I'd hardly call multiple file tables elegant, especially when they become desynced. NTFS would be a better fix, except for the fact it is a magnetic-media filesystem with journaling/timestamps/excessive writes, and exFAT was designed for flash media in the first place!! Even EXT4 writes too much, EXT2 or EXT4 with journaling disabled is a better solution for integrity, but much worse for flash-life. Nowadays, the value of error-recovery outweighs the limited media life. (This discussion comes up a lot in custom Linux firmwares for routers: DD-WRT NVRAM/Flashdrives)
Shardul_seth, the gentleman that compiled these binaries, has made a package for full NTFS support already using ntfs-fuse3g. (<- link) NTFS-3g is very mature/stable at this point, and installation for our devices is even simpler since we already have FUSE support in the kernel. However, his scripts are to mount USB, not the SD card. Mine does the SD card - all those ADB workarounds - so absolutely could be adapted for mounting NTFS cards. I will work on that when I have some time -- I'd need to figure out how to identify a NTFS card on header alone.
Again, all these methods are HACKS, proper support should be added in the kernel at some point. Someone actually has, and I've been cheering for him. He added EXT4 support to CM10.1, his post and code are here. However, he says it "stalled in code review". For the time being, you have to do all this manually.
Why we have 15 competing standards... "Never attribute to malice that which is adequately explained by stupidity."
Click to expand...
Click to collapse
Nice post lol, I only meant why FAT32 of all choices, these companies must know we're gonna be packing large files at some point, why knee cap us at 4gb when so many formats don't? Universal would be nice but of course it's entirely impractical
Any files you create on the device without "Rescanning for media" will not be visible in the MTP (Mass Tranfer Protocol) "MP3 player-like" abstracted FUSE filesystem. (One reason why people want UMS (USB Mass Storage) "hard drive-like" support, you see things immediately/it's faster.) Get a free program called SDrescan from Google Play, or run the command below(?), to update the MTP index and see files you create ON the device.
Click to expand...
Click to collapse
Thanks for the media scan info, that'll help a lot, I'll try out your suggestions tonight
Yes, the mount script will simply fail and there will be a silent error. (I need to code some error checking if you insert a non-exfat card...)
Like I said, if you could intentionally re-corrupt the header by using Storage Manager to "Unmount SD" then "Mount SD", then the DD command, (and rescanning media to copy the file off!) I'd appreciate it. Although, I have a second idea of how to get around that problem in mind.....
Click to expand...
Click to collapse
Will do, sounds interesting, will there be data loss or just header corruption? second idea in mind?
Also, each time I take the card out of my phone (properly after shutdown of phone) and place it in my computer (vista 64bit ultimate) It asks to check for errors, i'll click continue (confirmation to check), takes 3-5 seconds, finishes with no errors found. If I don't do this the card is write protected. I've made sure only to disconnect from PC after "safely removing hardware" so it appears that usage in the phone is generating the confusion. This doesn't seem to be an issue but I thought it might be worth mentioning
do you enter it correctly?
I get this when running the script:
Code:
BREAK! /dev/block/mmcblk1p1 is not a block-special file/device, do you enter it correctly?
How do I find what block file I need to change to script to?
Thanks for your work
boricua1213 said:
How do I find what block file I need to change to script to?
Click to expand...
Click to collapse
Safest (not easiest) way is to insert your FAT32 card, type "mount|grep vfat". The one you are looking for says "/dev/block/vold___:__" . (Shortcut: "mount|grep vold");
Then type "blkid". The one that's listed twice (UUID or Label) as "vold" is your block device's other name. (/mnt/block/mmc_somethingorother) Both names lead to the same spot.
(or)
Type "blkid" with your card in. Make a list. Remove your card. Type "blkid" again. The one that dissapears is your block device.
Ok got the file, I created 2 files, 1 before and 1 after the force unplug, just in case.
Remember to rename the files without the .rar extension before use
Re: [MOD] 1-Click Flashable exFAT + NTFS + EXT4 support for CM10.1 / AOSP (external S
I am about to embark on this journey and make another attempt at ditching TouchWiz. Does this script make it as if everything is normal as far as apps accessing the SD card go? I assume so, but I'm specifically wondering if I'll still be able to use Directory Bind and if I'll be able to create symbolic links to redirect Google Music to the external SD.
Getting ready to flash and try anyway but figured I'd ask to see if someone knows the answer all ready.
I'll be the first to admit the problem is almost certainly user error on my part but I have been wholly unsuccessful with this mod. I have tried it on Carbon Rom and Paranoid Rom. I guess they both have FUSE support, I couldn't find any confirmation of that on the Rom threads....particularly Carbon.
I flashed the zip in the OP in CWM after installing both Roms clean. I tried installing the zip as soon as I installed the Rom and I tried installing it after doing a full boot up first. Ran the chkdks /f command probably 12 times after each successive failed attempt to get my 64 exFAT card recognized. Said Damaged SD no matter what I tried. I saw the post on Page 1 about deleting the fixmyfat file....tried that too and no go. That tip may no longer be relevant since you've updated the script.
Is there something I am missing? There are lots of posts in this thread about mount commands and adb, but it seems from the OP none of those things are supposed to be necessary.
spearoid said:
Does this script make it as if everything is normal as far as apps accessing the SD card go? I assume so, but I'm specifically wondering if I'll still be able to use Directory Bind and if I'll be able to create symbolic links to redirect Google Music to the external SD.
Click to expand...
Click to collapse
In short, it should. However, exFAT/FAT32 don't support permissions/softlinks like ext4 does. So if you use ext4, just remember to set permissions appropriately! When in doubt, set permissions to 755 root:sdcard_rw or root:media_rw on the external sd.
I have tried it on Carbon Rom and Paranoid Rom. I guess they both have FUSE support, I couldn't find any confirmation of that on the Rom threads....particularly Carbon​Type "mount | grep fuse" in console. If you see "fuse" listed anywhere in the text, you have it. Google added it to JellyBean.
I flashed the zip in the OP in CWM after installing both Roms clean. I tried installing the zip as soon as I installed the Rom and I tried installing it after doing a full boot up first. Ran the chkdks /f command probably 12 times after each successive failed attempt to get my 64 exFAT card recognized. Said Damaged SD no matter what I tried. I saw the post on Page 1 about deleting the fixmyfat file....tried that too and no go. That tip may no longer be relevant since you've updated the script.
Is there something I am missing? There are lots of posts in this thread about mount commands and adb, but it seems from the OP none of those things are supposed to be necessary.​Do me a favor... open a terminal, type "su", then type "fuse-mountsd.sh > /sdcard/debug.txt 2>&1" (no spaces in 2>&1). It will make a "debug.txt" file in the root of your internal storage. Paste the output here. I am 90% certain you have the wrong block device set. 9% certain it is the 4.2.2 ADB thing.
You do not need to delete "fixmyfat.sh" -- those instructions are very old. Was the phone *physically off* when you plugged the SDcard in? Ignore the mount commands/ADB - you should not have to deal with them if you only plug in/unplug the card when the phone is off.
I am nigh certain it has to do with 4.2.2 messing with ADB. Like I said, for now, put in a *working* sd card *before* the phone is turned on and you won't run into that issue.

[Q] Replace Internal Data Partition for External SD

Let me start with: I know that there have been many posts on this, but before you get mad, I was unable to find an answer to what I specifically want to do.
For reference: I am a software developer and sysadmin with a decent amount of Linux experience, but not a lot of android specific experience.
Now that the introduction is out of the way:
What I would like to do is completely remove the "USERDATA" partition (the "Internal SD card"), grow the "SYSTEM" partition to fill that space, and then mount my SD Card (external) as the SD Card that the system sees.
I'm currently on Cyanogenmod 10.1 but want to upgrade to 11 soon.
The reason I want to do this is because:
I have all if my apps that I can set to install to SD Card
Both "internal" partitions are full (only about 200MB is available for pictures/etc. and I can no longer update apps)
Camera (and pretty much everything else as well) stores to the Internal SD card by default
If the system partition was 1.1+1.4=2.5GB and all of my apps were "installed" to a real SD card, it would be a lot more comfortable.
So, here's what I am thinking *might* work (maybe not in the right order, though?):
Point the fstab entry for the internal SD card to the external SD card
I have the PIT file. I will delete the "USERDATA " and grow "SYSTEM" to fill the space
When I write it out in steps, it seems pretty simple...
My concerns:
Will a ROM update (to CM11) re-partition back to the old way (and, in the process, break a bunch of stuff)?
I don't ever plan to go back to stock android or change to another ROM (other than upgrades).
Thanks for reading this long post and for any insight you may be able to provide.
--mobrien118
It's a wonderful idea if it works.
Sent from my SAMSUNG-SGH-T769 using xda app-developers app
Modifying partitions is a bit dangerous.
But I have to ask you why do you need another GB of /system storage?
There was a line you can put in the build.prop that flips your ext. SD with the internal one on cm10 I believe.
This'd interest me if I could get rid of usbdisk and sdcard0 merged.
It would need the phone to be repartitioned though, causing issues with the backups and ROMs.
You may even have to compile cm from source.
Its a lot of trouble
Sent from my SAMSUNG-SGH-T769 using Tapatalk
I just did so on S4 Mini with cm-11 Android 4.4.
First I was thinking of using symlinks and/or bind mounts to redirect to the the external sdcard, but that's a bit of a hassle because
1) Since 4.2: both emulated and external storage is mounted with a fuse layer on top not supporting symlinks
2) Since 4.4: no more global write access on external storage
So moving data was the simplest solution. Besides providing (much) more space my sdcard is also around 20% faster in sequential writes: 8.5 MB/s internal vs 10.5 MB/s external. Is it really 2014?
I haven't yet decided what to do with the original data partition, so for the moment I left it unused. Hence I haven't touched the internal partition table.
Quick summary
partition sdcard (gdisk)
I recommend using GPT, this lets you work with partition names rather than numbers. For the sake of still having an "official" external sdcard I made two partitions. Keep in mind that it's usually the first partition which gets automatically mounted as external sdcard. So I made the 2nd partition the new home for data. This partition however has to be manually specified in the ramdisks fstab which involves flashing the boot partition.
format the new partitions (mkfs.ext4)
copy the original /data directory tree to the new data partition
extract initrd from boot.img (abootimg)
extract files from initrd (gunzip & cpio)
replace the /data entry in fstab pointing at your new data partition
re-pack initrd and boot.img (gzip, cpio & abootimg)
flash boot.img onto the boot partition (dd)
If you use recovery, you also have to edit it's fstab (analog to boot.img mentioned above)
done
Alternatively has anyone tried an init.d script? I see those scripts get executed before the mounting of data & sdcard
Meanwhile the original userdata partition got replaced by 3 new partitions: system2, cache2 & userdata2 which are now used for a dual boot ROM.
I've only changed GPT, not PIT. ROMs and Recovery don't use PIT, so as long as Heimdall/Odin isn't involved it should not cause any issues.
Hey guys,
So after read all that, I am also vry interested in what the OP has suggested. I get that the pit doesn't need to be affected, but as the OP asked, when flashing a new rom or updating an existing, would the partition be reformatted back to the way android handles it, ie; back to the system and data seperate and the sdcard not being used as the internal partition?
I am no developer and only have minimal knowledge in linux and android programing, but I am a quick study and any guide to help me sort this would be greatly appreciated.
Also I am about to get a second S4 mini specifcally for doing things like this so if I brick I don't care?
My next question is could it be possible to code the PIT file to do this for you so that you can just flash that through odin, but again would flashing roms affect this.
Cheers,
Sora.
aguaz said:
I just did so on S4 Mini with cm-11 Android 4.4.
First I was thinking of using symlinks and/or bind mounts to redirect to the the external sdcard, but that's a bit of a hassle because
1) Since 4.2: both emulated and external storage is mounted with a fuse layer on top not supporting symlinks
2) Since 4.4: no more global write access on external storage
So moving data was the simplest solution. Besides providing (much) more space my sdcard is also around 20% faster in sequential writes: 8.5 MB/s internal vs 10.5 MB/s external. Is it really 2014?
I haven't yet decided what to do with the original data partition, so for the moment I left it unused. Hence I haven't touched the internal partition table.
Quick summary
partition sdcard (gdisk)
I recommend using GPT, this lets you work with partition names rather than numbers. For the sake of still having an "official" external sdcard I made two partitions. Keep in mind that it's usually the first partition which gets automatically mounted as external sdcard. So I made the 2nd partition the new home for data. This partition however has to be manually specified in the ramdisks fstab which involves flashing the boot partition.
format the new partitions (mkfs.ext4)
copy the original /data directory tree to the new data partition
extract initrd from boot.img (abootimg)
extract files from initrd (gunzip & cpio)
replace the /data entry in fstab pointing at your new data partition
re-pack initrd and boot.img (gzip, cpio & abootimg)
flash boot.img onto the boot partition (dd)
If you use recovery, you also have to edit it's fstab (analog to boot.img mentioned above)
done
Alternatively has anyone tried an init.d script? I see those scripts get executed before the mounting of data & sdcard
Click to expand...
Click to collapse
I just managed to replace my internal sd with the external sd following your ruff guide. thank you very much! At first I struggled a bit getting it to work, because I had encrypted my data partition before -.- this seems to change something in the fstab / mounting / boot-up process, I couldn't get my S4 mini to boot with just changing the fstab.qcom in boot.img. With my recovery (TWRP) it worked from the start editing recovery.img's fstab.twrp /data mount point.
After decrypting(formatting) /data and re-editing fstab.qcom in boot.img it finally works I'm so happy! Enjoying a lot of space on my sdcard now!
usefull threads / information I learnt from:
Partition structure of S4 Mini
Encryption of ExtSD & some fstab information
Editing initrd
abootimg ReadMe
(Links last tried 28.05.2015)

retrieving files from internal memory ?

I am a newbie at fone hacking.
I put a new Kingston 128G SD card in my Moto E40 phone. Android (v11) offered to help me by moving my pictures to the empty SD card and freeing up internal memory. Great.
Except then the SD card died - it is not visible (doesn't mount) in the phone or in my PC - I assume that it's fried ?
Can I retrieve my deleted photos from the internal memory of Android after it has deleted them ?
And, is there any way to resurrect the SD card ?
Please and thanks for any help... Ray
SilverCraftRay said:
...
Can I retrieve my deleted photos from the internal memory of Android after it has deleted them ?
...
Click to expand...
Click to collapse
If phone is succesfully got paired with PC ( read: ADB connection ), if phone's Android got successfully rooted, if phone's internal storage where photos are stored by default isn't got encrypted and isn't got overwritten by new data, then it's theoretically possible to retrieve the deleted photos.
If I use Magisk to get root access, the tutorial says that it will wipe my data.
How would I get my files back if the rooting process wipes my data ?
Can I root my phone without losing all it's data ?
Noone needs Magisk to root a phone's Android: that's a nurse fairy tale.
To root Android all you have to do is to create a copy of SU-binary in Android's filesystem and make it executable. After that you can run all Linux commands alike
mount and dd etc.pp. as ROOT.
Example - using ADB
Code:
adb devices
adb push <LOCATION-OF-SUITABLE-SU-BINARY-ON-PC-HERE> /data/local/tmp/
adb shell "cd /data/local/tmp & chmod 2776 su"
what will 1. connect the Android device to your desktop computer and 2. upload the su binary in the Android device temporary directory always available for the user.
Thanks. adb is very powerful.
Where can I find the suitable SU-binary for this phone? Is it in another system directory on the phone? Or in the internet based on my particular phone?
Once it is pushed, will my phone tools use it automatically? It seems that su is a manual command. Or will it be found automatically since it is in the /data/local/tmp directory ?
you can't root Android 5+ like that. the only nurse fairy tale is post #4 as discussed here.
even with root access it's impossible to recover deleted files from FBE file-based encryption (which is enforced on devices shipped Android 10+)
you can try to recover files from Kingston MicroSD Card with card reader on PC
https://www.z-a-recovery.com
Wrong
FBE ( what is significantly more insecure than FDE ) was introduced with Android 7 ( read: Nougat ) in August 2016.
Having elevated rights ( AKA SU ) you can dd a phone's internal memory via ADB to PC.
BTW: The FBE key of a file is stored directly in the ext4 file-system "dentry" of each file.
"For new devices running Android 10 and higher, file-based encryption is required."
(that means if device shipped on Android 9 it may receive update to Android 10 but is still running FDE btw)
while on FDE the DEK is ciphered with TEE static master key, FBE encryption keys are ciphered with random generated DEK in TEE keystore (which is flushed on factory reset). what you see in file metadata is KEK + DEK ciphered per-file-key (hash), where KEK is ciphered with lock screen credentials.
each files metadata is deleted when file is deleted, so the key is gone forever. as of the nature of encryption, file carving methods cannot understand what's left on disk and cannot restore any deleted files.
Now imagine, FBI forensics do a full dump of disk and find a method to magically restore each single byte of inode + dentry (for one single file), still they cannot decrypt that file without DEK.
FDE is encrypted with default_password without any lock screen pin at all (even if you set pin), which is common for most devices. that allows to bypass screen lock (impossible on FBE).
further the whole block partition is decrypted at once, so undeleting files (at least on ext4) is (in theory) possible.
if userdata and crypto-footer is dumped off the phone, that backup (on PC) will even survive factory reset, it can be restored afterwards and still it's possible to decrypt (online), as the static master key is burned to chip.
if one of the encryption methods is significantly more insecure then it's clearly FDE. to overcome this one should enable Secure Start-up.
btw modern devices (like OnePlus) combine both encryption methods FBE + FDE = metadata encryption (devices launched with Android 11+)
This intellectual outpouring is all well and good, but it completely misses the point: this thread is about data recovery from internal storage memory, OP was: "Can I retrieve my deleted photos from the internal memory of Android after it has deleted them ?". The answer is YES: retrieve and restore are different operations!
FYI: I know the difference between FBE and FDE, know how to lever out both locks.
the answer is NO. Moto E40 uses metadata encryption.
jwoegerbauer said:
FYI: I know the difference between FBE and FDE, know how to lever out both locks.
Click to expand...
Click to collapse
Obviously you don't.
I pay you 100 € if you show any proof. just rm a file and try to recover on FBE encrypted flash storage.
or explain in what way retrieving of deleted files differs from restore?
wait... so you're the same guy who don't understand how SUID bit works and still claim we can place "suitable" SU-binary in /data/local/tmp?
well we shouldn't expect any proof then lol

Categories

Resources