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

Search This thread

HMkX2

Senior Member
Jan 31, 2010
98
135
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 :D

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)
 

Attachments

  • CM10.1-AOSP_fuse-mountsd_4.1_HMkX2.zip
    1.9 MB · Views: 1,471
  • CM10.1-AOSP_fuse-mountsd_5.4_HMkX2.zip
    1.9 MB · Views: 861
  • CM10.1-AOSP_fuse-mountsd_6.3_HMkX2.zip
    1.9 MB · Views: 734
  • CM10.1-AOSP_fuse-mountsd_6.4_HMkX2.zip
    1.9 MB · Views: 145,912
Last edited:

lordazoroth

Senior Member
Jul 21, 2012
176
80
Phoenix
I'm a noob, this looks scary to me. Either way, I needs me some exfat cuz my movies are too large for fat32. :p

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! :D

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.
 
Last edited:

HMkX2

Senior Member
Jan 31, 2010
98
135
I wouldn't say I'm a developer, just a scripter with a lot of time on her hands.

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?

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.

  1. I think Google added FUSE by default in JB, and anything based off CM10.1 will have it
  2. Type "echo $SECONDARY_STORAGE" in a terminal emulator. If it displays ANYTHING other than blank it should work.
  3. 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.
 
Last edited:

lordazoroth

Senior Member
Jul 21, 2012
176
80
Phoenix
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.

  1. I think Google added FUSE by default in JB, and anything based off CM10.1 will have it
  2. Type "echo $SECONDARY_STORAGE" in a terminal emulator. If it displays ANYTHING other than blank it should work.
  3. 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.

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 :D
 

lordazoroth

Senior Member
Jul 21, 2012
176
80
Phoenix
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:

u0_a70@android:/ $ su
root@android:/ # 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!
root@android:/ #


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 :p]).

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. :D 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.
 
Last edited:
  • Like
Reactions: om22

HMkX2

Senior Member
Jan 31, 2010
98
135
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.

  1. Use RootBox explorer, navigate to /system/xbin/ and DELETE the file called "fixmyfat.sh".
  2. Turn your phone OFF. Eject the SD card
  3. chkdsk /f the card or quick format it to fix it, put a test file on it from Windows
  4. 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.
 
Last edited:
  • Like
Reactions: lordazoroth

lordazoroth

Senior Member
Jul 21, 2012
176
80
Phoenix
O.O... you are awesome!

I'll get on this right away, and I'd be happy to help any way i can :D

---------- Post added at 09:19 PM ---------- Previous post was at 08:52 PM ----------

OMG IT WORKS!!! the card mounted :D

I tried the line of code and it gave me an error:

u0_a70@android:/ $ su
root@android:/ # 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|root@android:/ #

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! :D
 
Last edited:

HMkX2

Senior Member
Jan 31, 2010
98
135
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.
 
  • Like
Reactions: lordazoroth

lordazoroth

Senior Member
Jul 21, 2012
176
80
Phoenix
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.

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?)
 

Attachments

  • working_sd.bin.rar
    512 bytes · Views: 310
Last edited:
  • Like
Reactions: HMkX2

alquimista

Senior Member
Mar 20, 2008
218
118
Los Angeles
Yay!

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.

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
 

HMkX2

Senior Member
Jan 31, 2010
98
135
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?
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.....

Very interesting. I can go on the hunt for headers if you like. I have loads of sd cards.
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.
 
Last edited:

lordazoroth

Senior Member
Jul 21, 2012
176
80
Phoenix
Why we have 15 competing standards... "Never attribute to malice that which is adequately explained by stupidity."

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 :p

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.

Thanks for the media scan info, that'll help a lot, I'll try out your suggestions tonight :D

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.....

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 :D
 
Last edited:

boricua1213

Member
Aug 11, 2010
22
0
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
 
Last edited:

HMkX2

Senior Member
Jan 31, 2010
98
135
How do I find what block file I need to change to script to?
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.
 
Last edited:

lordazoroth

Senior Member
Jul 21, 2012
176
80
Phoenix
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 :D
 

Attachments

  • working_sd_before.bin.rar
    512 bytes · Views: 46
  • working_sd_after.bin.rar
    512 bytes · Views: 50

spearoid

Senior Member
Feb 21, 2009
763
166
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.
 

spearoid

Senior Member
Feb 21, 2009
763
166
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.
 

HMkX2

Senior Member
Jan 31, 2010
98
135
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.
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.
 
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 50
    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 :D

    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)
    4
    Finally,
    Here's my working implementation to build a static binary under bionic and recovery:
    https://github.com/PhilZ-cwm6/philz_touch_cwm6/commit/b1bbdc2608b5db5e6c400953da42ad68a42b1e09

    Here's a ready binary fully working. Enjoy the really smaller size of bionic
    http://d-h.st/eVo

    Please give your feedback
    4
    (..) I had a really quick question, I know it's somewhat unrelated but can the source files be used to give NTFS support to stock ROMs (non-aosp) and if so, how?
    Yes, entirely possible. Someone did it for EXT4 and it was merged. exFat they hesitated on for moral reasons, NTFS-3g they had no reason. However, their EXT4 version (was) buggy if you ejected/reinserted the card and mine wasn't. They might have fixed that though.

    (S3 International - i9300) (..) is it only flash this file (CM10.1-AOSP_fuse-mountsd_6.4_HMkX2.zip) after flash the rom??
    Yes. Install CM10.x, flash the ZIP in recovery. For most people that is all.

    (MediaTek based devices, both running AOSP ROMs. V987 is running Android 4.2.1 and V970 is running Android 4.1.1.) Both devices have init.d support, but after installing your zip files through recovery mode, the devices weren't able to properly mount the exfat formatted sdcard. While trying to mount it manually, I got the following output:

    Code:
    ~~~~~~~~~ Beginning FS Logic ~~~~~~~~~
    [COLOR="Red"]./fuse-mountsd.sh: line 940: local: can only be used in a function
    ./fuse-mountsd.sh: line 941: local: can only be used in a function[/COLOR]
    Index (0) - [/dev/block/mmcblk1p1\texfat\tmount.exfat-fuse\t-o rw,dirsync,noatime,umask=0\tfixmyexfat.sh]
    [COLOR="Red"]./fuse-mountsd.sh: line 952: [: too many arguments
    ./fuse-mountsd.sh: line 986: local: can only be used in a function
    ./fuse-mountsd.sh: line 987: local: can only be used in a function
    [/COLOR]
    (...)

    As I'm not yet familiarized with your script, do you have any idea of what's happening?
    Those errors in red mean your "shell prompt" is outdated and not liking the way my Bash script is written. You might need to use an updated version of BusyBox. Type "busybox --help" (I think) to find what version you have.

    (...)
    My only problem is transfer rate with MTP = very2 slow. 1-2MB/s
    What's strange is transfer using wifi = 3-4MB/s
    Transfer using card reader = 9-10MB/s

    some problem with MTP driver ?
    MTP sucks. That's a known fact. "SGS3 Easy UMS" app fixes that problem.

    so i must run a script in cm to use exfat and ntfs? is this righT?
    I made a ZIP which makes my script run by itself when the phone restarts. Technically you don't need to do anything more than flash it.

    @HMkX2

    Looks like CM is finally trying to enable exFAT support:

    http://review.cyanogenmod.org/45176

    How will that affect the usage of this script (once it's tested and merged)?
    Hooray! This complete hack of a mod won't be necessary anymore! :D

    (...)
    Ah, NTFS and exFAT support just got merged :)
    Hooray!

    That's not entirely true. The CM implementation doesn't allow for multiple partitions, which the script can/does account for. Since the necessary binaries are now included in CM, however, only the script is really needed now (and it may need to be slightly adjusted for the CM binary names).
    The CM implementation of EXT4 also sucks, the "sdcard" binary causes the phone to lock up since it doesn't terminate when you eject the card. Zombie processes.

    (..)
    When I put .mounthere file with "/storage/sdcard0/extSdCard" inside - it is not mounting. When I select another location (/storage/ExtSD for example) it works (it is mounting, but poweramp still does't shows this location)
    Disable "Directory Creation Security". There are instructions in the top post.

    Unless the directory already exists, my script is set to NEVER create one. It can bind on top of already-existing directories, however. This was a security feature meant to prevent newbies from making zombie folders everywhere.
    3
    I wouldn't say I'm a developer, just a scripter with a lot of time on her hands.

    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?

    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.

    1. I think Google added FUSE by default in JB, and anything based off CM10.1 will have it
    2. Type "echo $SECONDARY_STORAGE" in a terminal emulator. If it displays ANYTHING other than blank it should work.
    3. 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.
    3
    As you can see on the screemshot, there's no "Eject SD Card" option in Storage Manager. Also, a picture on /storage/sdcard1 doesn't show up in the Gallery. PowerAmp recognizes ordinary fat32 formatted ext card just fine, but not ntfs/exfat.
    (No Eject button: ) Weird.... very weird. Can you open a terminal as root and type "vold" and tell me what it says, or if that fixes it?

    (Not being recognized by apps: ) Can you try running an app like "SD Rescan" and tell me if that makes the contents visible?

    Creating /storage/sdcard0/extSdCard dir and then having internal storage mounted would mean that original /storage/sdcard0/extSdCard becomes unaccessable after internal storage is mounted.​
    Yes, that is normal behavior. Mounts go on top of existing mounts. Nothing you can do about that.

    P.S. I forgot to mention that `fuse-mountsd.sh umount` fails with `Device or resource busy` whenever I try to run it, the very same way `umount /storage/sdcard1` does.​
    Type "fuser -m /storage/sdcard1". Then "ps|grep <#'s listed one at a time>". That will tell you what is keeping its foot in the door and preventing the card from being unmounted. Even having a terminal open in that current directory is enough to prevent it.

    I seem to have similar issues, but I don't understand how the script could be the issue. (YouTube crash)
    I disabled autoscanning for media on boot. That was most likely what was causing it. It will now only autoscan for media when the script is run manually (6.0).

    ... my old device I9000...

    Well gave the 5.9 Experimental a run on the device, produced 3 logs - one with 4pcs ext4 partitions, second a log with no sdcard, third a log with the exfat sdcard from my camera.

    Results:

    R/W on exfat works :) real nice for posting photos on social services on the net - without the PC.:good:

    Same results as 5.8 ""tested a 4 partition sdcard all ext4 with different mountpoints - all four partitions mounts - but the mounts of directorys (3pcs) (/sdcard/somedirectory) does not mount as writeable only readable the last EXT4 partition (/storage/sdcard1)mounts as it should r/w .(the .mounthere works)""

    You are using the wrong location for .mounthere. "/storage/sdcard1" works, you said -- this is normal, and is where it normally looks.

    "/sdcard" is a link to a "fake vfat" filesystem.. The location of the EXT4 filesystem there is "/data/media/0/" or "/data/media", depending on your Android version. (This is MANDATORY -- if you use /sdcard/Download, when an app writes to it, it'll muck up the permissions as "u40_31" or something weird.)

    Code:
    ls -al /sdcard ==  sdcard -> /storage/emulated/legacy
    ls -al /storage/emulated/legacy == /storage/emulated/legacy -> /mnt/shell/emulated/0
    mount|grep emulated == /dev/fuse ([I]this is a "fake" vfat filesystem of /data/media)[/I]

    Furthermore, you are not setting the correct permissions. Type "ls -al /data/media/0/Download" (or /data/media/0/DCIM or /data/media/0/Android/data/com.spotify.mobile.android.ui/cache/Storage) and you will see "-rw-rw-rw-rw- root root <blah blah blah>".

    THIS IS BAD. You need to chown on everything to make it R/W, possibly chmod to make it executable. Run this command:

    Code:
    [B]find /data/media/0/Download -print0 | xargs -0 chown media_rw:media_rw[/B]
    [B]chmod 775 /data/media/0/Download[/B]
    or some combination thereof. (root:media_rw / root:sdcard_rw, ??)

    That will make it writeable. It is not a mount issue, it is a permissions issue.

    I had to comment out the safety check lines (below) before it would create/mount my .mounthere file, but I assume this is still intended to remain in place as a safety and I will have to comment this out on each script update?

    I made a change to 6.0 for you. At the top of the file, there is a single statement:

    Code:
    dirSECURITY=1

    Change that to "dirSECURTY=0" and it will do everything. ALSO, you DO NOT have to do that anymore if the folder you are creating is under "/storage/*" or whatever "$ANDROID_STORAGE" is. So if you had "/storage/mydirectory", it will work without having to disable directory security.

    I figure anything under /storage is fair game to mess with. Anything OUTSIDE of that, you have to create it yourself, OR disable 'directory security'.