Apps2SD All in one tool[2.3+]: Partition SD card and Move/Link Apps to SD card [ROOT]

Did Apps2SD help you?

  • Yes

    Votes: 475 74.8%
  • No

    Votes: 65 10.2%
  • Didn't try

    Votes: 95 15.0%

  • Total voters
    635
Search This thread

invisiblewave

Senior Member
Sep 17, 2009
1,351
304
Yes, MTP is a mess. On Windows 7 copying is pretty reliable, but on my daily driver, Linux Mint Mate, it is very unreliable in copying. Sometimes it succceeds, often times, not. I use it mainly to copy TWRP backups to my computer.

I've just moved from Ubuntu 12.04 to Mint 18.3 and MTP now works as advertised, which it never did for me before. The only roadblock I've run into is the way adoptable storage seems to be viewed externally. It was almost worth the pain of configuring RAID manually now the alternate installer has been canned.....
 

invisiblewave

Senior Member
Sep 17, 2009
1,351
304
I got a bit further but have run into another error. I repartitioned using the tool, the mount script now works, but when I try to move an app it fails saying "no suitable external storage available".

My storage settings shows two SD cards, one not inserted, and sdcard1 with 112gb in it.
 

prorokrak

Senior Member
Sep 24, 2014
62
16
@invisiblewave
From my past correspondence with Vicky, I understand that one must use the inbuilt partition tool to create the partitions in Android 6 and above.
It uses the GUID or GPT partition scheme and creates three partitions:
The first partition is FAT32.
The second partition is a GUID metadata partition used by Apps2SD
The third partition is an Ext 2, 3 or 4 partition where your apps are moved to.
It is my understanding that no other tool can create this metadata partition.
Hopefully Vicky will clarify this if I have any of this wrong.

Outdated info in his FAQ does state that tools such as MiniTool can be used. I believe that was true with older android versions such as Android 5 using the old, MBR partitioning scheme.
I for one wish that other tools could be used for this, both in Windows and in Linux, especially for checking and repairing the partitions, but it does not sound like that is possible.

---------- Post added at 02:27 AM ---------- Previous post was at 02:14 AM ----------



Try recreating your partitions on your on your Ext. SD with the built in partition tool. I understand that is required with Android 6 and above. I don't see the metadata partition at: mmcblk1p2 and the 2nd Ext partition at: mmcblk1p3.

Thanks a lot for the tip. I will try to do that during the weekend when I have some free time. I hoped I can avoid deleting and restoring over 40 GB of data on my SD card but it seems to be not possible. Then I will provide an update.

----------------
EDIT:
Took a little bit longer but after using the in-built partiotion tool in App2SD, the SD card now works as expected. It can be used for expanding internal storage and for moving apps.
 
Last edited:

martyfender

Senior Member
Mar 9, 2017
3,391
1,860
Indianapolis, IN
I got a bit further but have run into another error. I repartitioned using the tool, the mount script now works, but when I try to move an app it fails saying "no suitable external storage available".

My storage settings shows two SD cards, one not inserted, and sdcard1 with 112gb in it.

Have you tried recreating your mount script choosing the type of partition you have: ext4, ext3, ext2 or f2fs, I've su.d support on my device/I use Magisk interface, or the advanced method, then choosing "Remount 2nd partition?

Are you still using adoptable storage or portable?
 
Last edited:

martyfender

Senior Member
Mar 9, 2017
3,391
1,860
Indianapolis, IN
here is mount -output:

Code:
cedric:/ $ mount
mount
rootfs on / type rootfs (ro,seclabel,size=1385172k,nr_inodes=143111)
tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,size=1466112k,nr_inodes=143644,mode=755)
devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600)
proc on /proc type proc (rw,relatime,gid=3014,hidepid=2)
sysfs on /sys type sysfs (rw,seclabel,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,seclabel,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt type tmpfs (rw,seclabel,relatime,size=1466112k,nr_inodes=143644,mode=755,gid=1000)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
pstore on /sys/fs/pstore type pstore (rw,seclabel,relatime)
/dev/block/bootdevice/by-name/system on /system type ext4 (ro,seclabel,relatime,discard,data=ordered)
/dev/block/bootdevice/by-name/userdata on /data type f2fs (rw,seclabel,nosuid,nodev,noatime,nodiratime,background_gc=on,discard,user_xattr,inline_xattr,acl,inline_data,nobarrier,extent_cache,active_logs=6)
/dev/block/bootdevice/by-name/cache on /cache type ext4 (rw,seclabel,nosuid,nodev,noatime,data=ordered)
/dev/block/bootdevice/by-name/persist on /persist type ext4 (rw,defcontext=u:object_r:persist_file:s0,seclabel,nosuid,nodev,relatime,data=ordered)
/dev/block/bootdevice/by-name/dsp on /dsp type ext4 (rw,seclabel,nosuid,nodev,relatime,data=ordered)
/dev/block/bootdevice/by-name/modem on /firmware type ext4 (ro,context=u:object_r:firmware_file:s0,nosuid,nodev,relatime,data=ordered)
/dev/block/bootdevice/by-name/oem on /oem type ext4 (ro,seclabel,nosuid,nodev,relatime,data=ordered)
/dev/block/bootdevice/by-name/fsg on /fsg type ext4 (ro,context=u:object_r:fsg_file:s0,nosuid,nodev,relatime)
adb on /dev/usb-ffs/adb type functionfs (rw,relatime)
tmpfs on /storage type tmpfs (rw,seclabel,relatime,size=1466112k,nr_inodes=143644,mode=755,gid=1000)
/dev/block/loop0 on /magisk type ext4 (ro,seclabel,noatime,data=ordered)
/dev/block/bootdevice/by-name/system on /dev/magisk/mirror/system type ext4 (ro,seclabel,relatime,discard,data=ordered)
tmpfs on /system/xbin type tmpfs (rw,seclabel,nosuid,relatime,size=1466112k,nr_inodes=143644,mode=755)
/dev/fuse on /mnt/runtime/default/emulated type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /storage/emulated type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /mnt/runtime/read/emulated type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /mnt/runtime/write/emulated type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/block/vold/public:179,65 on /mnt/media_rw/CC6E-7680 type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=is
o8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/block/vold/public:179,65 on /mnt/secure/asec type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1
,shortname=mixed,utf8,errors=remount-ro)
/dev/fuse on /mnt/runtime/default/CC6E-7680 type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /storage/CC6E-7680 type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /mnt/runtime/read/CC6E-7680 type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /mnt/runtime/write/CC6E-7680 type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
cedric:/ $

so data partition is f2fs. and i'd like to mount a folder on that to externalSD (fat32).

Here is some info on the status of f2fs patches on the SuperSu Beta forum:

https://xdaforums.com/showpost.php?p=75130783&postcount=11796
 

vickybonick

Senior Member
May 30, 2015
2,400
1,151
I got a bit further but have run into another error. I repartitioned using the tool, the mount script now works, but when I try to move an app it fails saying "no suitable external storage available".

My storage settings shows two SD cards, one not inserted, and sdcard1 with 112gb in it.

Use the Link apps to SD card option instead of Move to SD (native APP2SD)
 

invisiblewave

Senior Member
Sep 17, 2009
1,351
304
Use the Link apps to SD card option instead of Move to SD (native APP2SD)

I don't understand the instruction. After I create the script, the only option I see is to "Link Apps to SD Card". When I go into that, it brings up the list of apps, and the only option is "move to SD".

---------- Post added at 07:46 AM ---------- Previous post was at 07:45 AM ----------

Have you tried recreating your mount script choosing the type of partition you have: ext4, ext3, ext2 or f2fs, I've su.d support on my device/I use Magisk interface, or the advanced method, then choosing "Remount 2nd partition?

Are you still using adoptable storage or portable?

Storage is portable. I'm using Magisk, and I've tried the remount option. Partition type is ext4, which I double-checked with gparted.
 

martyfender

Senior Member
Mar 9, 2017
3,391
1,860
Indianapolis, IN
I don't understand the instruction. After I create the script, the only option I see is to "Link Apps to SD Card". When I go into that, it brings up the list of apps, and the only option is "move to SD".

---------- Post added at 07:46 AM ---------- Previous post was at 07:45 AM ----------



Storage is portable. I'm using Magisk, and I've tried the remount option. Partition type is ext4, which I double-checked with gparted.

Go to: Link Apps to SD Card click on the app you want to link, a window will open with a pie chart, click the blue Link button, choose the select all check box in the next window that appears. I uncheck Disable app before linking option, myself, but now have this disabled in the main settings instead.
( @vickybonick : I would like to know what the purpose is of that option to disable the app before linking, in the first place?)

Now click ok and you will get a working dialog that the linking is taking place. A very large game, for example, will take quite a while to move. Then you will get a success dialog. now you can go back to the main link apps to sd card window and the app should say: linked. using the menu in the upper right you have various sorting options and you can multiselect apps there, also.
I find the multi select useful when I reinstall my Rom to remove a few system apps I don't use and foreign language keyboards, such as google play books, google play movie and tv, etc. I am very conservative here as removing the wrong system apps can really mess your system up.
In the past I have converted Greenify to a privileged system app with the convert to system app option. On my 2 tablets I am currently testing Magisk 15.3 I am using the module in it for Greenify, instead.
 
Last edited:

invisiblewave

Senior Member
Sep 17, 2009
1,351
304
Oh my god, this is akin to pulling teeth! Thanks for the tip about the link button, it was obscured under the ad at the bottom of the screen..... It failed on the first attempt so I recreated the script, replied No to modifying /system, and then the link finally worked!!
 

vickybonick

Senior Member
May 30, 2015
2,400
1,151
Go to: Link Apps to SD Card click on the app you want to link, a window will open with a pie chart, click the blue Link button, choose the select all check box in the next window that appears. I uncheck Disable app before linking option, myself, but now have this disabled in the main settings instead.
( @vickybonick : I would like to know what the purpose is of that option to disable the app before linking, in the first place?)

Now click ok and you will get a working dialog that the linking is taking place. A very large game, for example, will take quite a while to move. Then you will get a success dialog. now you can go back to the main link apps to sd card window and the app should say: linked. using the menu in the upper right you have various sorting options and you can multiselect apps there, also.
I find the multi select useful when I reinstall my Rom to remove a few system apps I don't use and foreign language keyboards, such as google play books, google play movie and tv, etc. I am very conservative here as removing the wrong system apps can really mess your system up.
In the past I have converted Greenify to a privileged system app with the convert to system app option. On my 2 tablets I am currently testing Magisk 15.3 I am using the module in it for Greenify, instead.

Some apps may crash while linking if they are running in the background
 

Raldor

Member
Nov 8, 2014
17
6
Would this work for internal storage as well?

On devices that have only internal storage (no way to add external sd card), would this app also work? i.e. moving from private storage to public storage?
 

TraderJack

Senior Member
Oct 5, 2008
533
345
Google Pixel 3 XL
I'm having a problem setting up links/bind points. My first attempt scared the #@$ out of me because it didn't work and when I reverted it, it appeared my entire SD card was wiped (luckily a reboot solved it). Hope someone can help. This is what I am trying to do:

I'm running LineageOS 14 (Nougat). By default the camera app saves on the internal storage (DCIM\Camera). I have redirected it through the camera app to save on external SD card (main partition ofc).
However I have some other camera apps that on Lineage don't give me the option, so they are still saving to internal storage (DCIM\100MEDIA).

I would like to somehow link/bind/route/whatever the entire internal DCIM folder to the DCIM folder on the external SD card. This way all my photos/videos are always saved on the SD card regardless of the app.

My assumption is that I could do this with Apps2SD Pro.

I have been unsuccesful getting this to work on the root DCIM or on a sub folder. My steps are as follow:

- Create new folder mount
+ Name: 100MEDIA
+ Source: /mnt/sdcard/DCIM/100MEDIA
+ Destination: /storage/56C6-5357/DCIM/100MEDIA
+ Only option selected is "Create folder if doesn't exist"
+ Bind folder chosen (as these file systems are not linux I assume this is the correct option)

- After applying those settings it thinks for a minute and then says it is created successfully. However nothing appears to happen. I don't see the files from the internal SD on the external SD location. If I create a new picture stored in internal SD it doesn't show in external SD, etc.

- Also, while it says it is successful with the creation, the toggle button never turns to the on position.

- If I reverse the source and destination bind locations it seems I can get the mount point to toggle on, but this is not what I want...I don't want the external SD saving to the internal SD.

Incidentally, when I remove the bind point after not being able to get it to work, my entire external SD (56C6-5357) is no longer available. It can't be seen from file explorer and if I eject and then remount it from the system it shows as corrupted. Luckily a reboot brings it back. Even when it is in an unavailable state through Apps2SD when I choose "Remount 2nd partition" it says it successfully does it.

I'm probably (hopefully) doing something wrong here...but this is what I bought the app to do.

Suggestions?
 

vickybonick

Senior Member
May 30, 2015
2,400
1,151
I'm having a problem setting up links/bind points. My first attempt scared the #@$ out of me because it didn't work and when I reverted it, it appeared my entire SD card was wiped (luckily a reboot solved it). Hope someone can help. This is what I am trying to do:

I'm running LineageOS 14 (Nougat). By default the camera app saves on the internal storage (DCIM\Camera). I have redirected it through the camera app to save on external SD card (main partition ofc).
However I have some other camera apps that on Lineage don't give me the option, so they are still saving to internal storage (DCIM\100MEDIA).

I would like to somehow link/bind/route/whatever the entire internal DCIM folder to the DCIM folder on the external SD card. This way all my photos/videos are always saved on the SD card regardless of the app.

My assumption is that I could do this with Apps2SD Pro.

I have been unsuccesful getting this to work on the root DCIM or on a sub folder. My steps are as follow:

- Create new folder mount
+ Name: 100MEDIA
+ Source: /mnt/sdcard/DCIM/100MEDIA
+ Destination: /storage/56C6-5357/DCIM/100MEDIA
+ Only option selected is "Create folder if doesn't exist"
+ Bind folder chosen (as these file systems are not linux I assume this is the correct option)

- After applying those settings it thinks for a minute and then says it is created successfully. However nothing appears to happen. I don't see the files from the internal SD on the external SD location. If I create a new picture stored in internal SD it doesn't show in external SD, etc.

- Also, while it says it is successful with the creation, the toggle button never turns to the on position.

- If I reverse the source and destination bind locations it seems I can get the mount point to toggle on, but this is not what I want...I don't want the external SD saving to the internal SD.

Incidentally, when I remove the bind point after not being able to get it to work, my entire external SD (56C6-5357) is no longer available. It can't be seen from file explorer and if I eject and then remount it from the system it shows as corrupted. Luckily a reboot brings it back. Even when it is in an unavailable state through Apps2SD when I choose "Remount 2nd partition" it says it successfully does it.

I'm probably (hopefully) doing something wrong here...but this is what I bought the app to do.

Suggestions?

Use /storage/emulated/0 instead of /mnt/sdcard

Use the Storage info option to check the phone storage path and use it if it's not /storage/emulated/0
 

TraderJack

Senior Member
Oct 5, 2008
533
345
Google Pixel 3 XL
Use /storage/emulated/0 instead of /mnt/sdcard

Use the Storage info option to check the phone storage path and use it if it's not /storage/emulated/0

Thanks...that seems to have worked. Some other strangeness though:

I can't unmount it. Even trying after a clean reboot it says it is successful using the "unmount only" option. However it is still toggled on.

I had to delete the mount point and reboot to actually access the original source folder contents again (which I chose not to have copied during this test).

Also it looks like there is some hidden .fusexx files created? Could you explain those as well as what method a "bind" actually uses (compared to a linux symlink which I do understand).

Finally, all of the options when creating the mount point to copy/move/delete files before/after mounts. Can you explain some real world scenarios on why any of those would be necessary? I would think most people want to just redirect a folder and let it stay. All those options kind of smack to me of "well if might not always work, so if we didn't bind and files get created in the wrong place...what to do with them?"

thanks!

EDIT: I recreated the mount point again after clearing all files out of the source folder and deleting it (to let App2SD make new folder). After this it appears to mount/unmount properly.
I looked up the .fuse_hidden and they seem to have to do something with deletion of files. I deleted the one that seemingly got created only after this bind point and tested deleting some more files (from both the source and destination) and I don't see these hidden files being recreated again...so I'm not sure what's up.
 
Last edited:

vickybonick

Senior Member
May 30, 2015
2,400
1,151
Thanks...that seems to have worked. Some other strangeness though:

I can't unmount it. Even trying after a clean reboot it says it is successful using the "unmount only" option. However it is still toggled on.

I had to delete the mount point and reboot to actually access the original source folder contents again (which I chose not to have copied during this test).

Also it looks like there is some hidden .fusexx files created? Could you explain those as well as what method a "bind" actually uses (compared to a linux symlink which I do understand).

Finally, all of the options when creating the mount point to copy/move/delete files before/after mounts. Can you explain some real world scenarios on why any of those would be necessary? I would think most people want to just redirect a folder and let it stay. All those options kind of smack to me of "well if might not always work, so if we didn't bind and files get created in the wrong place...what to do with them?"

thanks!

EDIT: I recreated the mount point again after clearing all files out of the source folder and deleting it (to let App2SD make new folder). After this it appears to mount/unmount properly.
I looked up the .fuse_hidden and they seem to have to do something with deletion of files. I deleted the one that seemingly got created only after this bind point and tested deleting some more files (from both the source and destination) and I don't see these hidden files being recreated again...so I'm not sure what's up.

fuse_hidden file seem to be created by the fuse daemon (perhaps when you bind fuse file systems)
 

koyo

Senior Member
Nov 12, 2015
322
55
Redmi 9
SD Fix doesn't seem to work. Tried it on Nougat and Oreo and Titanium Backup is still unable to write to the external SD card. Same for My APK and Advanced Download Manager.

Sent from my Moto G 2014 LTE using XDA Labs
 

Top Liked Posts

  • There are no posts matching your filters.
  • 169
    Hi all,

    This is my first post in XDA but I've been a regular reader as a guest. I've developed an app(Apps2SD) to move/link apps from internal storage to external SD card with lots of other cool features.

    Apps2SD has evolved from being an app which moves app data to sd card to an all in one app with many cool features.

    Translation project http://os3pxnq.oneskyapp.com/collaboration/project/54276

    Apps2SD Translation Thread

    Tutorials @ https://www.youtube.com/watch?v=-4q5HAHJblI&index=1&list=PLiRFJHKSKUX_q0hsN0oHn4iXGoloJku5s

    Prerequisites:
    • Device needs to be rooted
    • Root permission should be granted to Apps2SD
    • 2 partitions on external SD card (use Apps2SD partition tool to create 2nd partition). 1st partition should be FAT/exFat partition, this is your standard SD card storage. The second partition is used as the internal storage for linked application files and can be ext2, ext3, ext4 or f2fs.
    12
    Version 12.2 released in play store and attached in OP

    Changelog:

    • Updated translations
    • Fixed Partial link issue on app install/update
    • Fixed obb/ext data linking issue
    • Added sd card support for Swap files
    • Added option to disable Apps2SD service
    • Added option to delete broken symlinks
    • Added revert SDFix option
    • Added full magisk support
    • Added custom su.d path support
    • Added display size in Folder mount
    • Added background copy/move in Folder mount [Pro]
    • Added search option in App analyzer [Pro]
    • Added link type sort
    • Other bug fixes and performance improvements
    11
    First of all I'd like to thank all of you for the continuous support you've given me. After evaluating all the Pros and Cons I have decided not to continue development and support for the the app. I know many of you will be disappointed but trust me it was a very tough decision for me. I have spent countless hours on research, development and testing the app and I'll always be proud of it.

    PS: I'll be releasing the final build for free version (with pro features) tonight on play store, hopefully they don't suspend the free version as well.

    Update: The apk is updated in play store and attached in the first post
    11
    Version 12.0 released in play store and attached in OP

    Changelog:

    • Added App analyzer to create Folder mount pairs [Pro]
    • Added option to create hibernate shortcut [Pro]
    • Added app selection in restore apps [Pro]
    • Added option to link apps above a certain size [Pro]
    • Fixed SDFix for Marshmallow and Nougat
    • Performance improvement upto 10 times in creating backup and restore
    • Fixed many partition tool issues
    • Fixed bug in Hide apps
    • Fixed app crash in LineageOS
    • Added confirmation before moving files in Folder mount
    • Added support for Magisk interface
    • Improved mount script
    • Added wake lock option
    • Fixed bug in broken app cleaner
    • Made sdcard path dynamic in Folder mount
    • Many other bug fixes and erformance improvements