• Introducing XDA Computing: Discussion zones for Hardware, Software, and more!    Check it out!

[Magisk][/system][2019.1.23] fbind

Search This thread

theredbaron1834

Senior Member
Aug 1, 2015
265
71
Sony Xperia XA2
Google Pixel 5
Its not exactly portable, but a walkthrough of sorts might help others.

Starting from Android with magisk. You need the magisk module "exSDCard access enabler", which gives you a rw mount to use as a bind. Next you need an script boot launcher, as lineage has removed init.d support. After a lot of trouble I found I like "init.d light", which is in the fdroid repos [here](https://f-droid.org/en/packages/x1125io.initdlight/). The next part sucks, but for a autolaunched script to boot, you need to go into magisk settings and change" mount namespace mode" to global. This isn't ideal, security issues and all that. However, this is really all I use root for atm, and the only for it to work I can find without using adb every boot, so I am ok with it.

Now everything is ready for a script. Each phone will be different based on your sd card and wants. However, it will be something like "mount --rbind /mnt/media_rw/XXXXXXXX/Games/ /mnt/runtime/default/emulated/0/Games", with XXXXXXXX is unique to your sd card.

You just get all the mounts you want in a empty file, it "might" need to have the ext of .sh. then copy it to wherever init.d light says (it depends on the phone).

The big issue I have found is it takes about 20 sec after boot to have them mounted. However, it seems to work fine, even have Android bindmounted with no issue so far.
 
  • Like
Reactions: hurray and zdoe

zdoe

Senior Member
Feb 11, 2011
282
20
downgrade trouble

Its not exactly portable, but a walkthrough of sorts might help others.

Starting from Android with magisk. You need the magisk module "exSDCard access enabler", which gives you a rw mount to use as a bind. Next you need an script boot launcher, as lineage has removed init.d support. After a lot of trouble I found I like "init.d light", which is in the fdroid repos [here](https://f-droid.org/en/packages/x1125io.initdlight/). The next part sucks, but for a autolaunched script to boot, you need to go into magisk settings and change" mount namespace mode" to global. This isn't ideal, security issues and all that. However, this is really all I use root for atm, and the only for it to work I can find without using adb every boot, so I am ok with it.

Now everything is ready for a script. Each phone will be different based on your sd card and wants. However, it will be something like "mount --rbind /mnt/media_rw/XXXXXXXX/Games/ /mnt/runtime/default/emulated/0/Games", with XXXXXXXX is unique to your sd card.

You just get all the mounts you want in a empty file, it "might" need to have the ext of .sh. then copy it to wherever init.d light says (it depends on the phone).

The big issue I have found is it takes about 20 sec after boot to have them mounted. However, it seems to work fine, even have Android bindmounted with no issue so far.

well, thanks. as i'm a linux noob, i'm not quite ready to write a script, but yes, i can see this points the right guy to the right direction. since then i've tried a fresh install, but i'm having a load of trouble getting my apps over. twrp backups don't work consistently either. starting to suspect there's something wrong with my phone.
 

theredbaron1834

Senior Member
Aug 1, 2015
265
71
Sony Xperia XA2
Google Pixel 5
well, thanks. as i'm a linux noob, i'm not quite ready to write a script, but yes, i can see this points the right guy to the right direction. since then i've tried a fresh install, but i'm having a load of trouble getting my apps over. twrp backups don't work consistently either. starting to suspect there's something wrong with my phone.
I haven't been able to get twrp backup to work since android 9, so I can't help you there, but if you want help with the scripting, you can PM me and I will walk you though it too.
 
  • Like
Reactions: zdoe

zdoe

Senior Member
Feb 11, 2011
282
20
for me TiBu works in conjunction of being able to backup the whole system with twrp (RIP). but for example its update.zip function has never worked for me and the ui is unupdated.

now on some stock OS after a factory reset. but fdisk doesn't install. what if i copy its directories from the old phone?
 

theredbaron1834

Senior Member
Aug 1, 2015
265
71
Sony Xperia XA2
Google Pixel 5
for me TiBu works in conjunction of being able to backup the whole system with twrp (RIP). but for example its update.zip function has never worked for me and the ui is unupdated.

now on some stock OS after a factory reset. but fdisk doesn't install. what if i copy its directories from the old phone?
Yeah, don't think that will work.
 
  • Like
Reactions: zdoe

zdoe

Senior Member
Feb 11, 2011
282
20
In magisk manager, install "ExSDCard Access Enabler", reboot, then give me the output of "ls /mnt/media_rw/" as well as the folders you want bind mounted, and I will do get a script done for you. Or at least try :).

very kind of you. but can't install exSDcard access enabler - all the magisk modules fail the same way - "updater process ended with ERROR: 1."

maybe fdisk would also install if magisk would start to play ball...
 

Androdd

New member
May 16, 2020
1
0
It works!

fbind installs flawlessly with Magisk 20.1.
fbind.works(!) flawlessly with Magisk 20.3.

fbind does not work with Magisk 20.4 (even if it was installed with Magisk 20.1).

So your guide is;
(1) Install Magisk 20.1, reboot and check that it's working.
(2) Install fbind, reboot and check that it's working.
(3) Upgrade Magisk to 20.3, and you'll see that fbind is working flawlessly.

First of all I'd like to thank VR25 for the tremendously useful amount of work he has done on this module, then I'll say that I went through similar troubles with Magisk and fbind versions until your quick guide above reassured me, so I thank you too. Now to the point: I was finally able to make fbind work on the following HW/SW platform:

Phone: Samsung Galaxy A5 2015 (SM-A500FU or a5ulte)
System: Android Marshmallow (6.0.1)
Custom Recovery: TWRP 3.1.1-0
Root: Magisk 20.1
fbind: 2019.1.23

I confess that I fiddled quite for a while with the command line options without really understanding all the subtleties, until I finally managed to get the stuff working: I followed the configuration sample, made use exclusively of the wizard, and contented myself with the following very simple config file:

from_to "DCIM" ".fbind/DCIM"
from_to "Download" ".fbind/Download"
from_to "Pictures" ".fbind/Pictures"
from_to "Studio" ".fbind/Studio"

The main difficulty was to understand what to move, where and when, especially with WhasApp, moving which to the SD card was my main goal: I am not sure whether "fbind -M" has problems with this version or it was me who was not employing it timely, but in the end some good ol' "mv" here and there saved the day and now I enjoy a lot more space on the internal memory of this ol'boy :)

Next step will be evacuate as much stuff as possible from the internal memory of my woman's overbloated SM-J730F which is still under warranty :p
 

Hooin Kyoma

Member
Jun 23, 2012
35
81
Hi guys, I made new "fix3" version if anyone interested:
- magisk 20.4 support (magisk 20.0+ is requied starting from this version)
And some fixes for those who using partitions and/or images:
- loop and part now support both EXT2/3/4 and FAT/exFAT file systems, and loop accepts mount options (loop -o ...) like part does
- better detection file system of partitions and loop images (using blkid if fstype fails)
- fixed problems with permissions when mounting (ex)FAT and EXTfs partitions/images (using better mount options, sdcardfs and more of android storage "views" black magic)
You can part/loop directly to target folder (part /dev/block/mmcblk1p2 $intsd/Viber) or mount it aside (part /dev/block/mmcblk1p2 /mnt/flash), declare as $extsd (exstsd_path=/mnt/flash) and then bind/target folders (target Viber, from_to Viber .Viber, etc)

Tested with Carbon 8.0 (Android 10, AOSP-based) on my ancient Xperia Z3 Compact
zip-file attached to my original post

JUST FOR INFO (UPDATED after "fix4" released in my next post below):
Hardcoded mount options for initial mounting of partitions and loop images:
for all FS: nosuid,nodev,noexec,context=u:eek:bject_r:sdcardfs:s0
+ for (ex)FAT: uid=0,gid=1023gid=9997,umask=0007
+ for EXT2/3/4: changing owner:group of root directory to 0:1023 0:9997 and perms to rwxrwxr-x - you should know this if you use mounted EXTfs-devices somewere else. This will allow you to create and delete newly created or empty folders in the root of mounted EXFfs storage, but for existed folders you need to do chown -R 0:9997 <mountpoint> and chmod -R 775 <mountpoint> by hand at least once.
These changes should help with access to mounted storages in recent androids.
And additional options when binding devices and folders: gid=9997,mask=6
Also, here is another interesting tool for binding folders: https://bindfs.org (but see "known issues" at bottom). May be I'll try switch to it if encounter problems with permissions in next android updates. If I don't buy new phone with 128+ gigs of internal memory soon :)
 
Last edited:

0LDST4R

Senior Member
May 2, 2018
287
205
Hi guys, I made new "fix3" version if anyone interested:
- magisk 20.4 support (magisk 20.0+ is requied starting from this version)
And some fixes for those who using partitions and/or images:
- loop and part now support both EXT2/3/4 and FAT/exFAT file systems, and loop accepts mount options (loop -o ...) like part does
- better detection file system of partitions and loop images (using blkid if fstype fails)
- fixed problems with permissions when mounting (ex)FAT and EXTfs partitions/images (using better mount options, sdcardfs and more of android storage "views" black magic)
You can part/loop directly to target folder (part /dev/block/mmcblk1p2 $intsd/Viber) or mount it aside (part /dev/block/mmcblk1p2 /mnt/flash), declare as $extsd (exstsd_path=/mnt/flash) and then bind/target folders (target Viber, from_to Viber .Viber, etc)

Tested with Carbon 8.0 (Android 10, AOSP-based) on my ancient Xperia Z3 Compact
zip-file attached to my original post

JUST FOR INFO:
Hardcoded mount options for initial mounting of partitions and loop images:
for all FS: nosuid,nodev,noexec,context=u:eek:bject_r:sdcardfs:s0
+ for (ex)FAT: uid=0,gid=1023,umask=0007
+ for EXT2/3/4: changing owner:group of root directory to 0:1023 and perms to rwxrwxr-x - you should know this if you use mounted EXTfs-devices somewere else.
These are helps with access to mounted storages in recent androids.
And additional options when binding devices and folders: gid=9997,mask=6
Also, here is another interesting tool for binding folders: https://bindfs.org (but see "known issues" at bottom). May be I'll try switch to it if encounter problems with permissions in next android updates. If I don't buy new phone with 128+ gigs of internal memory soon :)


Confirmed, works on my Z3C with CarbonRom Q fine.

Thanks bro... :cowboy:
 
  • Like
Reactions: Hooin Kyoma

Hooin Kyoma

Member
Jun 23, 2012
35
81
Version "fix4" with small changes for part/loop users (upgrade from "fix3" is not mandatory if you have no problems):
- added some extra checks in loop() and part() functions
- loop now support encrypted images ("encrypted.img--L,...", same as part)
- simplified mounting routine in the code (since sdcardfs doesn't help with access anyway, only using right mount perms does)

Added to original post.

Remember, in case if you got infinite bootloop you always can disable this magisk module by creating empty file named "disable" in /data/adb/modules/fbind folder using File manager or ADB from your TWRP.
 
Version "fix4" with small changes for part/loop users (upgrade from "fix3" is not mandatory if you have no problems):
- added some extra checks in loop() and part() functions
- loop now support encrypted images ("encrypted.img--L,...", same as part)
- simplified mounting routine in the code (since sdcardfs doesn't help with access anyway, only using right mount perms does)

Added to original post.

Remember, in case if you got infinite bootloop you always can disable this magisk module by creating empty file named "disable" in /data/adb/modules/fbind folder using File manager or ADB from your TWRP.

Hi @Hooin Kyoma thanks for your fix! I'll try it later with Magisk 20.4 after a long time not using fbind.

By the way, how about you and @VR25 work together, I mean, help each other (and maybe other devs too) to maintain this fantastic tool up to date officially?
Maybe even improve it with new features.

And thus have your + @VR25 work released, recognized by lots of users and upto date on official Magisk repository? Lot of Magisk users do not read XDA modules' threads.

Thanks!
 
Last edited:

0LDST4R

Senior Member
May 2, 2018
287
205
Hi @Hooin Kyoma thanks for your fix! I'll try it later with Magisk 20.4 after a long time not using fbind.

By the way, how about you and @VR25 work together, I mean, help each other (and maybe other devs too) to maintain this fantastic tool up to date officially?
Maybe even improve it with new features.

And thus have your + @VR25 work released, recognized by lots of users and upto date on official Magisk repository? Lot of Magisk users do not read XDA modules' threads.

Thanks!


Totally agree. I can't live without this module. Maybe @VR25 is busy with real live in these terrible corona times. A coop between @Hooin Kyoma and VR25 is a big benefit for us users.
 

Hooin Kyoma

Member
Jun 23, 2012
35
81
Well, I'm not really intended to be a coder or something. Same as @VR25 I usually busy with real life things. I have to dive into fbind time to time because I really need this tool, at least until I buy new phone. I heard VR25 work on some complete new framework which is will be used in fbind as well along with his other projects, so my "fixes" most likely will not be merged in future fbind releases. But if this will not happen in near future, I'll try to contact VR25 and/or cooperate/fork this tool to make it available officially in magisk repo. Thanks for idea.
 

samhhmobil

Senior Member
May 25, 2017
347
187
Hamburg
Well, I'm not really intended to be a coder or something. Same as @VR25 I usually busy with real life things. I have to dive into fbind time to time because I really need this tool, at least until I buy new phone. I heard VR25 work on some complete new framework which is will be used in fbind as well along with his other projects, so my "fixes" most likely will not be merged in future fbind releases. But if this will not happen in near future, I'll try to contact VR25 and/or cooperate/fork this tool to make it available officially in magisk repo. Thanks for idea.
Just a question, how to install your fix'ed version.

Do I need to install original fbind-zip via TWRP first, and after that your fix?

Or

do I have to install your fix-zip directly in TWRP without the original fbind-zip?

Or... some other way?

Thanks a lot,
samhhmobil
 

Top Liked Posts

  • There are no posts matching your filters.
  • 1
    Does This Still Works? I will Try tonight on My Pie Device
    Yes, it works with P.
  • 56
    # fbind
    ## Copyright (C) 2017-2019, VR25 @ xda-developers
    ### License: GPL V3+
    #### README.md



    ---
    #### DISCLAIMER

    This software is provided as is, in the hope that it will be useful, but without any warranty. Always read/reread this reference prior to installing/upgrading. While no cats have been harmed, I assume no responsibility under anything which might go wrong due to the use/misuse of it.

    A copy of the GNU General Public License, version 3 or newer ships with every build. Please, study it prior to using, modifying and/or sharing any part of this work.

    To prevent fraud, DO NOT mirror any link associated with this project; DO NOT share ready-to-flash-builds (zips) on-line!



    ---
    #### DESCRIPTION

    This is an advanced mounting utility for folders, EXT4 images (loop devices), LUKS/LUKS2 encrypted volumes, regular partitions and more.



    ---
    #### PRE-REQUISITES

    - Any root solution, preferably Magisk 17.0+
    - App to run `/system/etc/fbind/autorun.sh` on boot if system doesn't support Magisk nor init.d
    - ARM/ARM64 CPU
    - Basic `mount` and terminal usage knowledge
    - Terminal Emulator (i.e., Termux)



    ---
    #### CONFIG SYNTAX

    - bind_mount <target> <mount point> Generic bind-mount
    - e.g., `bind_mount $extsd/loop_device/app_data/spotify /data/data/com.spotify.music`

    - extsd_path <path> Use <path> as extsd.
    - e.g., `extsd_path /mnt/mmcblk1p2`

    - from_to <source> <dest> Wrapper for `bind_mount <$extsd/[path]> <$intsd/[path]>`
    - e.g., `from_to WhatsApp .WhatsApp`

    - <fsck> <block device> Check/fix external partition before system gets a chance to mount it. This is great for EXT[2-4] filesystems (e2fsck -fy is stable and fast) and NOT recommend for F2FS (fsck.f2fs can be extremely slow and cause/worsen corruption).
    - e.g., `e2fsck -fy /dev/block/mmcblk1p1`

    - int_extf <path> Bind-mount the entire user 0 (internal) storage to `$extsd/<path>` (implies obb). If `<path>` is not supplied, `.fbind` is used.
    - e.g., `int_extf .external_storage`

    - intsd_path <path> Use <path> as intsd.
    - e.g., `intsd_path /storage/emulated/0`

    - loop <.img file> <mount point> Mount an EXT4 .img file (loop device). `e2fsck -fy <.img file>` is executed first.
    - e.g., `loop $extsd/loop.img $intsd/loop`

    - noAutoMount Disable on boot auto-mount.

    - noWriteRemount Read the SDcardFS note below.

    - obb Wrapper for `bind_mount $extobb $obb`

    - obbf <package name> Wrapper for `bind_mount $extobb/<package name> $obb/<package name>`
    - e.g., `obbf com.mygame.greatgame`

    - part <[block device] or [block device--L]> <mount point> <"fsck -OPTION(s)" (filesystem specific, optional)> Auto-mount a partition. The --L flag is for LUKS volume, opened manually by running any `fbind` command. Filesystem is automatically detected. The first two arguments can be `-o <mount options>`, respectively. In that case, positional parameters are shifted. The defaut mount options are `rw` and `noatime`.
    - e.g., `part /dev/block/mmcblk1p1 /mnt/_sdcard`
    - e.g., `part -o nodev,noexec,nosuid /dev/block/mmcblk1p1 /mnt/_sdcard`

    - permissive Set SELinux mode to permissive.

    - remove <target> Auto-remove stubborn/unwanted file/folder from $intsd & $extsd.
    - e.g, `remove Android/data/com.facebook.orca`, `remove DCIM/.8be0da06c44688f6.cfg`

    - target <path> Wrapper for `bind_mount <$extsd/[path]> <$intsd/[same path]>`
    - e.g., `target Android/data/com.google.android.youtube`



    ---
    #### TERMINAL

    `Usage: fbind or fbind <options(s)> <argument(s)>

    <no options> Launch the folder mounting wizard.

    -a|--auto-mount Toggle on boot auto-mount (default: enabled).

    -b|--bind-mount <target> <mount point> Bind-mount folders not listed in config.txt. Extra SDcarsFS paths are handled automatically. Missing directories are created accordingly.
    e.g., fbind -b /data/someFolder /data/mountHere

    -c|--config <editor [opts]> Open config.txt w/ <editor [opts]> (default: vim/vi).
    e.g., fbind -c nano -l

    -C|--cryptsetup <opt(s)> <arg(s)> Run $modPath/bin/cryptsetup <opt(s)> <arg(s)>.

    -f|--fuse Toggle force FUSE yes/no (default: no). This is automatically enabled during installation if /data/forcefuse exists or the zip name contains the word "fuse" (case insensitive) or PROPFILE=true in config.sh. The setting persists across upgrades.

    -h|--help List all commands.

    -i|--info Show debugging info.

    -l|--log <editor [opts]> Open fbind-boot-$deviceName.log w/ <editor [opts]> (default: vim/vi).
    e.g., fbind -l

    -m|--mount <pattern|pattern2|...> Bind-mount matched or all (no arg).
    e.g., fbind -m Whats|Downl|part

    -M|--move <pattern|pattern2|...> Move matched or all (no args) to external storage. Only unmounted folders are affected.
    e.g., fbind -M Download|obb

    -Mm <pattern|pattern2|...> Same as "fbind -M <arg> && fbind -m <arg>"
    e.g., fbind -Mm

    -r|--readme Open README.md w/ <editor [opts]> (default: vim/vi).

    -R|--remove <target> Remove stubborn/unwanted file/folder from $intsd and $extsd. <target> is optional. By default, all <remove> lines from config are included.
    e.g., fbind -R Android/data/com.facebook.orca

    -u|--unmount <pattern|pattern2|... or [mount point] > Unmount matched or all (no arg). This works for regular bind-mounts, SDcardFS bind-mounts, regular partitions, loop devices and LUKS/LUKS2 encrypted volumes. Unmounting all doesn't affect partitions nor loop devices. These must be unmounted with a pattern argument. For unmounting folders bound with the -b|--bind_mount option, <mount point> must be supplied, since these pairs aren't in config.txt.
    e.g., fbind -u loop|part|Downl

    -um|--remount <pattern|pattern2|...> Remount matched or all (no arg).
    e.g., fbind -um Download|obb`



    ---
    #### NOTES

    - Always enforce Unix line endings (LF) when editing config.txt with other tools. NEVER use Windows Notepad!

    - Available free space in internal storage may be misreported.

    - Busybox installation is unnecessary, unless fbind is installed into /system (legacy/Magisk-unsupported devices only).

    - Config survives factory resets if internal storage (data/media/) is not wiped.

    - Duplicate SDcard may show up in file managers.

    - [FUSE] Some users may need to set `intsd_path /storage/emulated/0` (default is /data/media/0).

    - If you stumble upon inaccessible folders or read-only access, try forcing FUSE mode (fbind -f). If your system doesn't support FUSE, it will bootloop, but fbind will notice and automatically revert the change.

    - Logs are stored at `/data/adb/fbind/logs/`.

    - [SDcardFS] Remounting /mnt/runtime/write/... may cause a system reboot. If this happens, fbind remembers to skip that next times. There's a catch, though! If your system reboots for a reason other than this, fbind will mistakenly add `noWriteRemount` to config. If you stumble across broken bind mounts, remove that line and remount all folders (fbind --remount).

    - There is a sample config in `$zipFile/common/` and `/data/adb/fbind/info/`.



    ---
    #### SETUP

    First time
    1. Install from Magisk Manager or custom recovery.
    2. Reboot.
    3. Configure (/data/adb/fbind/config.txt) -- recall that `fbind -c <editor [opts]>` opens config.txt w/ <editor [opts]> (default: vim/vi).
    4. Move data to the SDcard with a file manager or `fbind --move` then run `fbind --mount`.

    Upgrades
    1. Install from Magisk Manager or custom recovery.
    2. Reboot.

    After ROM updates
    - Unless `addon.d` feature is supported by the ROM, follow the upgrade steps above.

    Bootloop (Magisk only)
    - Flash the same version again to disable the module.

    Uninstall
    1. Magisk: use Magisk Manager or other tool; legacy: flashing the same version again removes all traces of fbind from /system.
    2. Reboot.



    ---
    #### LINKS

    - [Facebook page](https://facebook.com/VR25-at-xda-developers-258150974794782/)
    - [Git repository](https://github.com/Magisk-Modules-Repo/fbind/)
    - [Telegram channel](https://t.me/vr25_xda/)
    - [Telegram profile](https://t.me/vr25xda/)
    - [XDA thread](https://forum.xda-developers.com/apps/magisk/module-magic-folder-binder-t3621814/)



    ---
    #### LATEST CHANGES

    **2019.1.23 (201901230)**
    - General optimizations
    - More accurate SDcardFS and encrypted data detection
    - New command: fbind --remount
    - Note on SDcardFS: remounting /mnt/runtime/write/... may cause a system reboot. If this happens, fbind remembers to skip that next times. There's a catch, though! If your system reboots for a reason other than this, fbind will mistakenly add `noWriteRemount` to config. If you stumble across broken bind mounts, remove that line and remount all folders (fbind -um).

    **2019.1.5 (201901050)**
    - Fixed auto-mount toggle (fbind -a) inverted output.
    - Forcing FUSE mode (fbind -f) causes bootloop if the system doesn't support that. When this happens, changes are automatically reverted.
    - General optimizations
    - Under SDcardFS, remounting /mnt/runtime/write/... may cause a system reboot. If this happens, fbind remembers to skip that next times (noWriteRemount).
    - Updated building tools
    - Wizard has a "troubleshooting" option.

    **2019.1.2 (201901020)**
    - fbind -R|--remove <target>: remove stubborn/unwanted file/folder from $intsd and $extsd. <target> is optional. By default, all <remove> lines from config are included.
    - fbind <no options>: launch the folder mounting wizard.
    - fsck SDcard, refer to README.md (fbind -r) for details.
    - Major fixes & optimizations


    XDA:DevDB Information
    [Magisk][/system] fbind, Tool/Utility for the XDA Community Apps

    Contributors
    VR25, Captain_Throwback, 白い熊, TechnoSparks
    Source Code: https://github.com/Magisk-Modules-Repo/fbind


    Version Information
    Status: Stable
    Current Stable Version: 2019.1.23
    Stable Release Date: 2019-01-23

    Created 2017-06-14
    Last Updated 2019-01-23
    41
    ### No, I'm Not Dead! ###

    I know, I know... it's been quite a while. Well, yeah, maybe longer than that...

    Not gonna write a book on this. Lets just say it's HARD to access the internet on a regular basis from my current location. Plus, I've been busy with general life matters.
    That said, my online presence will still remain limited for a while. It won't be that much limited anymore, though. So... yay!



    ### Latest Changes ###

    F2FS Loopback Bug Workaround
    Magic GApps
    Magisk Manager for Recovery Mode
    Moto Z Play Dual SIM Mode Enabler
    Sysconfig Patcher
    Systemless Camera NX Mod
    - Fixed modPath detection & bad PATH variable issues (Magisk V16.6).
    - Updated documentation

    Magic Charging Switch (mcs)
    - Enhanced debugging function.
    - Fixed "automation config still calling `cs` instead of `mcs`."
    - Fixed modPath detection & bad PATH variable issues (Magisk V16.6).
    - Updated charging switches database (more devices supported)
    - Reliability improvements
    - Updated documentation

    Magic Folder Binder (fbind)
    - Ability to unmount loop devices and partitions on demand (i.e., fbind -u 'pattern1|pattern2|pattern...').
    - Better loop device mounting logic ("ugly bugs" fixed)
    - Bind-mount folders automatically regardless of --L (LUKS) flag's usage.
    - Dedicated logs dir -- /data/media/fbind/logs (easier & advanced debugging)
    - Deprecated `fbind -l` in favor of `fbind -i` (outputs much more information)
    - Fixed "misleading [N/A] mount status".
    - Fixed modPath detection & bad PATH variable issues (Magisk V16.6).
    - Fixed "rm -rf not affecting hidden files/folders" in data moving functions.
    - Ignore `app_data` line whose target apk is missing (to avoid app data loss).
    - Option to mount app_data in ext4 .img file (loop device)
    - Shipping with a comprehensive, noob-friendly tutorial (tutorial.txt, /data/media/fbind/info/tutorial.txt)
    - Reliability improvements (better data loss protection algorithms)
    - Updated documentation
    - Using `rsync -a` for advanced copy operations, instead of `cp -a`.



    ### Last, but Far from Least ###

    Will update each project's thread and repository & answer queries at my earliest (uh... maybe a little late) convenience.
    Meanwhile, everything you need is in the attached zip. Yes, all modules are there, along with a md5sum.

    P.S., To everyone who donated and/or contributed in other ways,
    -- Thank you very much!
    19
    Is this project discontinued? Last update almost a year ago.

    Ok, I downloaded latest version (2019.1.23) and installed it on my Lineage OS 17.1 (Android 10) with Magisk v20.2, and... spent two days for manage it to work... Meh, it'd be better to not even start.

    Fist of, it simply hasn't been installed properly on my system (no binaries, no scripts, only info/config examples), so I downloaded latest update-binary, saved it as is (without modifications), and manually converted config.sh to install.sh (using aka "legacy script" logic) (fix1-fix2) customize.sh (fix3).

    Secondly, fstype binary doesn't detect FAT (vfat/exfat/sdfat) on my system, so I added extra check to part() function in core.sh: in case if fstype has not detected FS, let mount detect it automatically (omit -t).

    Next, grep /storage/emulated /proc/mounts | grep -Eiq ' sdcardfs | fuse ' || exit 1 line in wait_until_true() function instanly exit script on boot, I guess it's because it starts too early on my system. So I replaced "exit" with waiting loop.

    After all this modifications and countless hours of tries and errors I finally got what I wanted - move (bind) some internal folders to encrypted second partiton of my external SD card.

    /data/adb/fbind/config.txt:
    Code:
    part -o umask=0 /dev/block/mmcblk1p2--L,MyLoNgPaSsWoRd /mnt/sdcrypt
    extsd_path /mnt/sdcrypt
    target DCIM
    target Audio
    target TitaniumBackup

    I found using umask=0 on FAT is a most painless way to deal with apps permissions to use binded folders. Less secure though. I logically understand that fbind should take care of access to binded folders, but it looks like something changed lately in Android's storage "magic", which is not clear to me, so... umask=0. Tried other mountpoints like /mnt/media_rw/sdcrypt or /storage/sdcrypt, tried ext4 instead of exfat, but all that caused even more problems with permissions. I'd appreciate any advice about better mountpoint and options to use.
    Got an infinite bootloop when I used to use FUSE (which is happen automatically when I add something like "intsd_path /storage/emulated/0" in config.txt), thanks god we have TWRP.

    I attached modified zip-file in case if anyone interested (not sure If I had right to do this tho, I will remove it if OP or moderators ask), magisk-only.
    DISCLAIMER: I'm very new to module coding and coding in general, I'm just an experienced Linux user, so I can't guarantee that my modifications are 100% correct and universal, test it on your own risk.

    UPD: new "fix2" version with some fixes.
    UPD2: new "fix3" version: magisk 20.4 support and others changes.
    UPD3: new "fix4" version: small bugfixes and simplified code (info).
    17
    13
    Hi guys, I made new "fix3" version if anyone interested:
    - magisk 20.4 support (magisk 20.0+ is requied starting from this version)
    And some fixes for those who using partitions and/or images:
    - loop and part now support both EXT2/3/4 and FAT/exFAT file systems, and loop accepts mount options (loop -o ...) like part does
    - better detection file system of partitions and loop images (using blkid if fstype fails)
    - fixed problems with permissions when mounting (ex)FAT and EXTfs partitions/images (using better mount options, sdcardfs and more of android storage "views" black magic)
    You can part/loop directly to target folder (part /dev/block/mmcblk1p2 $intsd/Viber) or mount it aside (part /dev/block/mmcblk1p2 /mnt/flash), declare as $extsd (exstsd_path=/mnt/flash) and then bind/target folders (target Viber, from_to Viber .Viber, etc)

    Tested with Carbon 8.0 (Android 10, AOSP-based) on my ancient Xperia Z3 Compact
    zip-file attached to my original post

    JUST FOR INFO (UPDATED after "fix4" released in my next post below):
    Hardcoded mount options for initial mounting of partitions and loop images:
    for all FS: nosuid,nodev,noexec,context=u:eek:bject_r:sdcardfs:s0
    + for (ex)FAT: uid=0,gid=1023gid=9997,umask=0007
    + for EXT2/3/4: changing owner:group of root directory to 0:1023 0:9997 and perms to rwxrwxr-x - you should know this if you use mounted EXTfs-devices somewere else. This will allow you to create and delete newly created or empty folders in the root of mounted EXFfs storage, but for existed folders you need to do chown -R 0:9997 <mountpoint> and chmod -R 775 <mountpoint> by hand at least once.
    These changes should help with access to mounted storages in recent androids.
    And additional options when binding devices and folders: gid=9997,mask=6
    Also, here is another interesting tool for binding folders: https://bindfs.org (but see "known issues" at bottom). May be I'll try switch to it if encounter problems with permissions in next android updates. If I don't buy new phone with 128+ gigs of internal memory soon :)