BusyMount v1.01 - Fire TV Android Development

{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
BusyMount 1.01 for the Rooted Fire TV
DOWNLOAD HERE
BusyMount is combination utility comprised of BusyBox v1.22.1
and bash scripts that persistently mount multiple USB mass
storage devices on your Fire TV. Of course it works just as well with a
single USB stick.
It has been tested with 4 concurrently mounted drives (vfat,exfat,ntfs,ext4).
BusyMount's two primary scripts live in /system/xbin:
mntdrives1.sh
mntdrives2.sh
The mntdrives1.sh script should run as is on any rooted Fire TV and mount your drives/sticks at /storage/usb/driveX where X is the sequence number of the device on your system: e.g. sda1=drive1, sdb1=drive2, etc.
The mntdrives2.sh script will mount your drives via their UUID, an internal label that is applied when the drive is formatted. If you have more than one drive attached to your Fire TV this is very important.
It is not at all unusual for the operating system to switch /dev/block/sd?? addresses so one boot your movies drive is called /dev/block/sda1 and anime /dev/block/sdb1. Reboot or swap drives and suddenly they have different addresses, sdc1 and sdd1. XBMC will not appreciate this. Mounting via UUID makes sure your data is in the same place every time.
mntdrives2.sh uses the same driveX naming scheme for mountpoints, but you can control what mounts where.
Each script can be called at boot to automount your drives. Currently, this is done via install-recovery-2.sh and busybox run-parts.
BusyMount is installed via Clockwork Mod provided by [email protected], something that is a must have for your rooted Fire TV. If you don't have it install it now, and then come back here! *
To install BusyMount:
1. adb connect 111.222.333.444 (substitute your FireTV IP address)
2. adb push filename.zip /sdcard/
3. adb shell su -c reboot recovery
Once in ClockworkMod Recovery:
Choose zip from sdcard
Choose 0
Scroll to BusyMount zip file
Press Enter
Select Yes
BusyMount will install. When it's finished, reboot. When the Fire TV reboots your drives will have been mounted by mntdrives1.sh. For mounting by UUID you will need to edit mntdrives2.sh. Instructions in the next post.
* you can also download BusyMount without the CWM installer at the link above for manual installation

IMPORTANT: Windows users: do NOT edit the mntdrives2.sh file with notepad! It will break the script. Instead, use busybox vi or pull the file to your computer and use Notepad++. Be sure to make backups of the scripts before editing!
To mount drives via UUID, first you need to find out what they are. After installing BusyMount, ADB shell or sshhttp://www.jocala.com/busydrop.html into your Fire TV. If you entered via adb su to root and issue the command:
Code:
blkid /dev/block/sd*
You should see something like this for as many drives as you have attached:
Code:
[email protected]:/ #blkid /dev/block/sd*
/dev/block/sdi1: LABEL="firetv1" UUID="94f2a28c-caac-4eb7-a544-84a650c0b809" TYPE="ext4"
/dev/block/sdh1: LABEL="CRUZER" UUID="138FD3254AEAB65E" TYPE="ntfs"
/dev/block/sdf1: LABEL="VFAT" UUID="0577-07FC" TYPE="vfat"
/dev/block/sdb1: LABEL="ExFat" UUID="544D-B43D" TYPE="exfat"
The important bits are the sd?? drives's "UUID=XXXXXX"
Now we edit the mntdrives2.sh file
If you're editing directly on the device mount /system as r/w:
Code:
mount -o remount,rw /system
Here is the mntdrives2.sh file:
Code:
#!/system/bin/sh
sleep 20
#
# FireTV USB/UUID Drive Mounter
#
# REQUIRED: Busybox with suuport for run-parts, blkid, mount-helper
# mount-helper and stuff that's probably slipped my mind required.
# AFAIK, NONE of the "free" Play Store busyboxes have all of the
# supplied options. I suggest you use mine or compile your own.
# Replace the UUIDs below with the UUIDs
# from your drives. This script has been tested
# with 4 drives mounted (vfat,exfat,ntfs,ext4)
# but (in theory) should support 26 (sda1-sdz1)
#
# Enjoy! [email protected]
#
export uuid1="544D-B43D"
export uuid2="138FD3254AEAB65E"
export uuid3="94f2a28c-caac-4eb7-a544-84a650c0b809"
export uuid4="0577-07FC"
i=0
storage="/storage/usb"
if [[ $(ls /dev/block | $busybox grep -c 'sd') -eq 0 ]]; then
exit 0
fi
mount -o remount,rw / ;
for f in /dev/block/sd??; do
drive=`echo $f | sed -r 's/^.{11}//'`
mountType=$(busybox blkid $f | busybox sed -n -e 's_^.*TYPE="\([^\"]*\)".*_\1_p');
mountUUID=$(busybox blkid $f | busybox sed -n -e 's_^.*UUID="\([^\"]*\)".*_\1_p');
i=$((i+1))
if [[ $mountUUID == $uuid1 ]]; then
busybox mkdir -p $storage/drive$i;
mount.exfat-fuse -o rw $f $storage/drive$i
fi
if [[ $mountUUID == $uuid2 ]]; then
busybox mkdir -p $storage/drive$i;
ntfs-3g $f $storage/drive$i -o rw,sync
fi
if [[ $mountUUID == $uuid3 ]]; then
busybox mkdir -p $storage/drive$i;
busybox mount UUID=$uuid3 $storage/drive$i
fi
if [[ $mountUUID == $uuid4 ]]; then
busybox mkdir -p $storage/drive$i;
busybox mount UUID=$uuid4 $storage/drive$i
fi
done
mount -o remount,ro /
As you can see there are 4 UUIDs defined at the top of the script. These are my personal UUIDs so of course these are the edits you have to make. Very simply, just change uuid1:
Code:
export uuid1="544D-B43D"
to your uuid1:
Code:
export uuid1="4455X-G5553" (or whatever)
Rinse and repeat for as many drives as you wish to define. Good luck!

reserved

This looks very interesting. Will try it out on the next Fire TV I set-up. Nice work!

So just to be clear, this simply serves to provide additional external storage to the FireTV, kinda like what we have had with StickMount?
It's not a way to expand internal storage like jmandawg's method, or to maximize internal storage space (without expansion) by using the StickMount/Link2SD combo, or is it?

AQKhanTheOne said:
So just to be clear, this simply serves to provide additional external storage to the FireTV, kinda like what we have had with StickMount?
It's not a way to expand internal storage like jmandawg's method, or to maximize internal storage space (without expansion) by using the StickMount/Link2SD combo, or is it?
Click to expand...
Click to collapse
It mounts multiple drives by sd device name or by UUID like paid stickmount. However, as you can see by the attached script, it can also use croniccorey & jmandawg's handy technique to mount an external drive as /data, tricking the aftv. I mount by UUID which gets around the "only one drive & /dev/sda1 only" problem.
BTW, the attached script has a .c extension because sh isn't allowed. If you play with it you'll want rbox's recovery installed. Right now my FTV has a 1TB ext4 drive for media, a 500Gb ext4 drive for /data, plus vfat and exfat drives attached just for the hell of it. Which I think is pretty damn sweet.

jocala said:
It mounts multiple drives by sd device name or by UUID like paid stickmount. However, as you can see by the attached script, it can also use croniccorey & jmandawg's handy technique to mount an external drive as /data, tricking the aftv. I mount by UUID which gets around the "only one drive & /dev/sda1 only" problem.
BTW, the attached script has a .c extension because sh isn't allowed. If you play with it you'll want rbox's recovery installed. Right now my FTV has a 1TB ext4 drive for media, a 500Gb ext4 drive for /data, plus vfat and exfat drives attached just for the hell of it. Which I think is pretty damn sweet.
Click to expand...
Click to collapse
Yes it is! I did have a couple of questions though. One is that would StickMount still be needed? And if I partition a HDD (or a USB stick) into 2 or more partitions, would these partitions have different UUID's?

AQKhanTheOne said:
Yes it is! I did have a couple of questions though. One is that would StickMount still be needed? And if I partition a HDD (or a USB stick) into 2 or more partitions, would these partitions have different UUID's?
Click to expand...
Click to collapse
Stickmount's not needed on FTV in any case. I've been mounting drives with adbFire since v1.01 (v1.12 is current) although mounting by UUID is new. Each partition get's its own UUID when formatted and can be mounted by it. BTW, you can also mount by label, eg drives labeled "movies", "data", etc.

jocala said:
Stickmount's not needed on FTV in any case. I've been mounting drives with adbFire since v1.01 (v1.12 is current) although mounting by UUID is new. Each partition get's its own UUID when formatted and can be mounted by it. BTW, you can also mount by label, eg drives labeled "movies", "data", etc.
Click to expand...
Click to collapse
Cool. Thanks for the answers! This should (will) become the preferred method for external storage on the FTV!

AQKhanTheOne said:
Cool. Thanks for the answers! This should (will) become the preferred method for external storage on the FTV!
Click to expand...
Click to collapse
I think /data swap will need automation for many. Everyone's not comfortable with the command-line. I'm working on an adbFire function to grab a uuid and write out a mount script, but it won't be ready for the next update

jocala said:
I think /data swap will need automation for many. Everyone's not comfortable with the command-line. I'm working on an adbFire function to grab a uuid and write out a mount script, but it won't be ready for the next update
Click to expand...
Click to collapse
Has this been incorporated into the latest version of adbFire?

AQKhanTheOne said:
Has this been incorporated into the latest version of adbFire?
Click to expand...
Click to collapse
Yes, but automation's not done for UUID mounting. I hope to have that finished for the next update.

hi could someone help, i installed this using adbfire and manage to edit the mntdrives2.sh locally
but i cant seem to be able to push this to system
Ive tried:
adb shell
su
mount -o remount,rw /system
adb push mntdrives2.sh /system/xbin/
i probably have a command wrong somewhere

DEREKTROTTER said:
hi could someone help, i installed this using adbfire and manage to edit the mntdrives2.sh locally
but i cant seem to be able to push this to system
Ive tried:
adb shell
su
mount -o remount,rw /system
adb push mntdrives2.sh /system/xbin/
i probably have a command wrong somewhere
Click to expand...
Click to collapse
(This is all built-into adbFire already)
In this case, adb push should be run from the pc, not the android device.
Code:
adb connect your.ip.address:5555
adb push mntdrives2.sh /sdcard
Or use adbFire to push the file to /sdcard
We aren't currently running a rooted kernel, so you can't push directly to /system or /data. You have to push to /sdcard, then shell into the device and do the remainder as root:
Code:
adb shell
su
mount -o remount,rw /system
cp /sdcard/mntdrives2.sh /system/xbin
chmod 0755 /system/xbin/mntdrive2.sh
mount -o remount,ro /system
(using ssh's scp you can copy stuff anywhere on the device and bypass the preliminary push to /sdcard...scp runs as root.)
Edit: I strongly suggest having CWM Recovery installed before rebooting with untested scripts!

thanks i will try this later
and ye i have CWM installed

DEREKTROTTER said:
thanks i will try this later
and ye i have CWM installed
Click to expand...
Click to collapse
Good luck

^ the above didnt seem to work, not sure why

DEREKTROTTER said:
^ the above didnt seem to work, not sure why
Click to expand...
Click to collapse
Check your spelling of mntdrives2.sh -- you typed mntdrive2.sh

jocala said:
Check your spelling of mntdrives2.sh -- you typed mntdrive2.sh
Click to expand...
Click to collapse
lol thanks, ill try again
its because i copied straight from your post above
edit: file transfer was a success and it still boots up fine
I assigned my NTFS drive as uuid4 but it still mounts as drive1. Is it because i need multiple attached? I dont have more drives available to test atm.

DEREKTROTTER said:
lol thanks, ill try again
its because i copied straight from your post above
Click to expand...
Click to collapse
That was a test to see if you were paying attention <g>
DEREKTROTTER said:
edit: file transfer was a success and it still boots up fine
I assigned my NTFS drive as uuid4 but it still mounts as drive1. Is it because i need multiple attached? I dont have more drives available to test atm.
Click to expand...
Click to collapse
No, you can mount one drive or many. Post your script and let's see.

Related

[Q] How to mount a USB NTFS Harddrive?

I still can not get an external usb ntfs drive to mount... I have tried Robeet's suggestion of:
NTFS mounting requires these commands, in terminal:
su
mount -t ntfs /dev/block/sda1 /mnt/usbdisk
Problem is that you are mounting as root, so you can't see the mounted files in the Android GUI. You could also do a chmod, but that's a bit of an extra burden. Anyone know how to mount this as a UID that it viewable in the GUI?
EDIT: This should work:
su
mount -o umask=000 -t ntfs /dev/block/sda1 /mnt/usbdisk
and this does not work... keeps saying no such device. I am running the ZPAD Clean 3.0 Rom and the latest kernel from Pershoot...
Anyone else having success getting a WD external usb hard drive to mount?
do a search this was solved required smaller partitions and reformat .
I make the NTFS USB external HDD with its own power supply work finnaly with the help of rajeevvp's article:
Thread: Mounting 2 storage usb devices View Single Post #8 20th May 2011, 05:01 PM
rajeevvp Senior Member Join Date: Aug 2010 Location: Bangalore Posts: 563
(I lost his link.)
The main rajeevvp's idea is to download the right version of ntfs.ko
"For this, you have to know which kernel you're running. There are 2 kernels that are commonly used on the gTablet: clemsyn's and pershoot's. I use pershoot's kernel so my instructions will be for that. The pershoot kernel supports NTFS filesystems, but, this support is not built into the kernel. Support is instead provided using kernel modules which you'll have to download first from the author's website and then load manually.
Download the correct kernel modules file for the running kernel. Find the kernel version first:
Code:
$ uname -a
Linux localhost 2.6.32.40-cyanogenmod #1 SMP PREEMPT Fri May 13 17:37:53 EDT 2011 armv7l GNU/LinuxThe kernel version is 2.6.32.40."
Go to http://droidbasement.com/db-blog/ and download the kernel modules file for that kernel version
Then
Load the kernel modules (I'm assuming now that they're on /mnt/sdcard), then mount the HDD:
Code:
$ su
# insmod /mnt/sdcard/nls_utf8.ko
# insmod /mnt/sdcard/ntfs.ko
# mount -o umask=000 -t ntfs /dev/block/sda1/mnt/usbdisk (from Roebeet)
To unmount it
Code:
$ su
# umount /mnt/usbdisk
I use GScript lite to do the work. I can play large video file from /mnt/usbdisk (NTFS USB HDD)
Thank you very much Rajeevvp for your guide.
Hope that help.
My GTab is running Brilliant Corners 1.3.1
GTablet said:
I still can not get an external usb ntfs drive to mount... I have tried Robeet's suggestion of:
NTFS mounting requires these commands, in terminal:
su
mount -t ntfs /dev/block/sda1 /mnt/usbdisk
Problem is that you are mounting as root, so you can't see the mounted files in the Android GUI. You could also do a chmod, but that's a bit of an extra burden. Anyone know how to mount this as a UID that it viewable in the GUI?
EDIT: This should work:
su
mount -o umask=000 -t ntfs /dev/block/sda1 /mnt/usbdisk
and this does not work... keeps saying no such device. I am running the ZPAD Clean 3.0 Rom and the latest kernel from Pershoot...
Anyone else having success getting a WD external usb hard drive to mount?
Click to expand...
Click to collapse
I'm having this issue also. I have run the following:
$ su
# insmod /mnt/sdcard/nls_utf8.ko
# insmod /mnt/sdcard/ntfs.ko
# mount -o umask=000 -t ntfs /dev/block/sda1/mnt/usbdisk
and I get
mount: can't read /etc/fstab: No such file or directory
Spazmodo said:
I'm having this issue also. I have run the following:
$ su
# insmod /mnt/sdcard/nls_utf8.ko
# insmod /mnt/sdcard/ntfs.ko
# mount -o umask=000 -t ntfs /dev/block/sda1/mnt/usbdisk
and I get
mount: can't read /etc/fstab: No such file or directory
Click to expand...
Click to collapse
Which ROM are you running?
Spazmodo said:
I'm having this issue also. I have run the following:
$ su
# insmod /mnt/sdcard/nls_utf8.ko
# insmod /mnt/sdcard/ntfs.ko
# mount -o umask=000 -t ntfs /dev/block/sda1/mnt/usbdisk
and I get
mount: can't read /etc/fstab: No such file or directory
Click to expand...
Click to collapse
There is a space missing between "/dev/block/sda1" and "/mnt/usbdisk".
See this post of mine for the original instructions.

[EXPANDSD] Join your external SD with internal SD!

WARN: For developer only.
attachment is the EXPANDSD script.
Why use it?
So many applications use /sdcard for mass data storage(gameloft, navigation...),
but I9100's internal_sd size is limit to 11G, so we need external_sd's space.
But these applications dosen't know how to use external_sd, old method is hack the apk for external_sd, but this will change apk's signature, and need smali/baksmali to work. My method work in system level, don't need change any apk file.
How to use:
1.make expandsd.ownhere dirctory in external_sd root directory.
2.move internal_sd's directory(for example:/gameloft) to expandsd.ownhere
3.run init_expandsd.sh
Theory:
use 'mount --bind' feature, bind external_sd's dir to internal_sd.
Because the sd card using fat32 partition format, the 'ln -s' command does not work, so the "mount --bind" is the only way to dynamically change the directory content.
Hi mate,
Thks for your shares. I have a question. How run init_expandsd.sh?
I tried gscript and init.d, but doesn't seem to be working
woohoo a great dev has come. glad you got here mate! love your work on Desire section.
harrynghiem said:
Hi mate,
Thks for your shares. I have a question. How run init_expandsd.sh?
Click to expand...
Click to collapse
you can try to use terminal emu, just type su then navigate to folder where the script located, then type sh init_expandsd.sh then enter. this might do the trick to execute .sh
dexterdave said:
you can try to use terminal emu, just type su then navigate to folder where the script located, then type sh init_expandsd.sh then enter. this might do the trick to execute .sh
Click to expand...
Click to collapse
Does it work for you?
It's a great idea thanks a lot for your work. I was wondering why ln was not working.
But too bad it does not work for me, i get the following error :
[1] Segmentation fault
Do you have any idea why ?
Thanks again
problems when connecting phone to pc
hi,
tried the "mount --bind" in order to try your script.
works fine. the directory contents is shared between the 2 path's,
but i have a problem when i connect the phone to a pc.
when i try to disconnect, the sdcard and external_sd are not
available anymore until i reboot the phone
note: the commands that i have executed are:
Code:
mkdir /mnt/sdcard/external_sd/foo
echo "test" > /mnt/sdcard/external_sd/foo/test
mkdir /mnt/sdcard/foo
mount --bind /mnt/sdcard/external_sd/foo /mnt/sdcard/foo
Can this script be placed in init.d folder for autorun at boot?
Edit: sorry, already answered above: no, it cannot.
Sent from my GT-P1000 using Tapatalk
Seems abandoned by @ownhere
Sent from my GT-I9100
Idan73 said:
Seems abandoned by @ownhere
Sent from my GT-I9100
Click to expand...
Click to collapse
too bad, it could be very useful..
TheFirstBen said:
It's a great idea thanks a lot for your work. I was wondering why ln was not working.
But too bad it does not work for me, i get the following error :
[1] Segmentation fault
Do you have any idea why ?
Thanks again
Click to expand...
Click to collapse
got the same problem please help
How to use?
ownhere said:
WARN: For developer only.
attachment is the EXPANDSD script.
Why use it?
So many applications use /sdcard for mass data storage(gameloft, navigation...),
but I9100's internal_sd size is limit to 11G, so we need external_sd's space.
But these applications dosen't know how to use external_sd, old method is hack the apk for external_sd, but this will change apk's signature, and need smali/baksmali to work. My method work in system level, don't need change any apk file.
How to use:
1.make expandsd.ownhere dirctory in external_sd root directory.
2.move internal_sd's directory(for example:/gameloft) to expandsd.ownhere
3.run init_expandsd.sh
Theory:
use 'mount --bind' feature, bind external_sd's dir to internal_sd.
Because the sd card using fat32 partition format, the 'ln -s' command does not work, so the "mount --bind" is the only way to dynamically change the directory content.
Click to expand...
Click to collapse
thanks,
this is genius
I'm not using your script (have myself some ux & scripting skills) but did not know about the -bind option on android
Ridiculously simple and efficient
Did it my own way and it works great
Thanks a lot for this
dawabz94 said:
thanks,
this is genius
I'm not using your script (have myself some ux & scripting skills) but did not know about the -bind option on android
Ridiculously simple and efficient
Did it my own way and it works great
Thanks a lot for this
Click to expand...
Click to collapse
Then why not share with us please !
Let us know how you did
Yes I'd like to know another method also.!
Sent from my GT-I9100 using XDA
Chairmansaab said:
Then why not share with us please !
Let us know how you did
Click to expand...
Click to collapse
Hi,
it's very easy indeed, once you got the point.
I do most of my stuff using an "adb shell" session so I'll post here my steps to get it working.
Also I like simple implementation so my script is the strict minimum needed to mount necessary folders
I assume you have a rooted device with working busybox and a kernel that supports /etc/init.d/
I suggest you do the test on a dummy folder before applying on a real folder.
So start by creating a folder called /sdcard/dummy
Do it the way you want , I do it with an "adb shell" session
Code:
cd /sdcard
mkdir dummy
Then copy some files in it (photos for examples)
Code:
cd /sdcard
cd DCIM
cd Camera
cp `ls -1 |tail -5` /sdcard/dummy
From now on, we consider we want to move transparently /sdcard/dummy to the external SD
1. move the folder to the external sd
CAUTION : I'm running a CM9 rom => my external sd is mounted on /mnt/emmc
Standard samsung sdcard mount is /sdcard/external_sd
The path might be different according to your brand and rom
Moving the folder code
Code:
cd /sdcard
mv dummy /mnt/emmc/
2. Create the mount point in the indernal SD
Code:
cd /sdcard
mkdir dummy
3.a Check the mount is successful by manually doing it
Code:
mount --bind /mnt/emmc/dummy /sdcard/dummy
3.b Check you see exactly the same thing on both folders
Both commands should return exactly the same output
Code:
ls -l /sdcard/dummy
Code:
ls -l /mnt/emmc/dummy
If everything is fine, then you're good to go
4. Automate mount at boot time
Create a script in /etc/init.d to automate the mount at boot time
I personally use "vi" but most people prefer graphical UIs, I can't recommend any here, do it your own way
So basically you would go root,remount /system in read/write mode and create the file
Code:
su
mount -o remount,rw /dev/block/mmcblk0p9 /system
cd /etc/init.d
vi 90binds
Insert following lines, save and exit
Note that the "sleep 60" is to let the system boot up before mounting partitions (thanks to the initial script shared here)
Code:
#!/system/bin/sh
sleep 60
mount --bind /mnt/emmc/dummy /sdcard/dummy
Change owner and permissions, flush disk cache and remount /system in read only
Code:
su
mount -o remount,rw /dev/block/mmcblk0p9 /system
cd /etc/init.d
chown root:shell
chmod 6755 90binds
sync
mount -o remount,ro /dev/block/mmcblk0p9 /system
To check, run
Code:
su
cd /etc/init.d
ls -l 90binds
The output should look like this :
Code:
-rwsr-sr-x 1 root shell [I]0 MMM D HH:MM[/I] 90binds
5. Now you can reboot and check - after reboot - that the mount is done
Both commands should return exactly the same output (always ran in an "adb shell" session)
Code:
ls -l /sdcard/dummy
Code:
ls -l /mnt/emmc/dummy
6. Now you're good to move other folders
Basically, you move the folder to external SD
Create the mount point on the internal SD
Append the mount command in the 90binds script
And that's it
Hope this helps
---------- Post added at 11:09 AM ---------- Previous post was at 11:04 AM ----------
benc88 said:
Yes I'd like to know another method also.!
Sent from my GT-I9100 using XDA
Click to expand...
Click to collapse
Just posted
Take time to read and understand the idea

Using all of the NTs storage

I posted this in the nook touch forum by mistake. Please read below and let me know what you think.
One of the biggest issues I had with my nook was the 16/1GB division between content I can load and content from B&N/etc. Not being able to use that 16GB how I wanted was something I set forth to fix. Here is my solution to make this usable to non-rooted apps.
1) Root if not already rooted.
2) Make a directory inside of /data. I chose /data/usrdata.
3) remount / as RW with the command mount -o remount,rw -t rootfs rootfs / (credit to Indirect for this, as I could't find the command to do so)
4) mkdir /mnt/internal . We need somewhere to mount /data/usrdata/ and /mnt is public enough.
5) busybox mount -o bind /data/usrdata /mnt/internal. Mounts /data/usrdata to /mnt/internal.
6) For good measure, chmod 777 /mnt/internal and chmod 777 /data/usrdata.
Now, /mnt/internal should have whatever free space /data has, and should be read/write accessible from any program. A quick test with touch+terminal emulator shows new files as being created with RW permissions for all.
Alternatives: When I was initially thinking about ways to do this, my first reaction was to just open up /data to be read only to all, then have my usrdata folder be read/write all. However, I know part of android's app security model depends on some of these permissions. While I can't think of anything breaking or sensitive data being leaked, I decided against it. If anyone has any thoughts as to that scenario, I am very interested in hearing about it.
USB support: This will *not* be mountable under USB. Unfortunately you are still limited to transfering the data from a computer to the B&N internal storage or SDcard first, then moving the data internally. The problem that I see with this is similar to my understanding of the galaxy nexus situation, where the system can't unmount its /data partition and let the USB host take over. Another alternative to this could be to write an image file and mount that over usb (I've done this on my Evo, it worked so-so). Problem with that is that it really wouldn't grow/shrink with the storage. I suppose you could do some shell trickery and pipe it through gzip somehow, but that wouldn't help very much.
Let me know what you think and if you have any ways to improve this.
UPDATE: Persistance:
To make this persistant across reboots, run these commands as root:
1) mount -o rw,remount -t ext4 /dev/block/platform/mmci-omap-hs.1/by-name/system /system
2) echo mount -o remount,rw -t rootfs rootfs / >> /system/bin/clrbootcount.sh
3) echo mkdir /mnt/internal >> /system/bin/clrbootcount.sh
4) echo busybox mount -o bind /data/usrdata /mnt/internal >> /system/bin/clrbootcount.sh
5) echo mount -o remount,ro -t rootfs rootfs / >> /system/bin/clrbootcount.sh
All this does is put the following at the end of clrbootcount.sh
mount -o remount,rw -t rootfs rootfs / #Remounts root as RW. Root is regenerated at each reboot, so /mnt/internal is never going exist on a fresh startup
mkdir /mnt/internal #make /mnt/internal, see above
busybox mount -o bind /data/usrdata /mnt/internal #Binds the directory
mount -o remount,ro -t rootfs rootfs / #remounts root as RO. Unsure if this is necessary, but since it runs as RO, its probably better safe than sorry.
Thanks to eded333 for mentioning a good place for the script.
Click to expand...
Click to collapse
I was the one who wrote the script gameman. >.>'
Very nicely done.
Does Android possess a fstab? If so, could these changes (also) be made there and still be persistent?
this is a good work around
Am I understanding this correctly in that if I follow these guidelines I can move my data over to the Barnes and noble alotted storage that we were complaining about not having available?
Sent from my Nook Tablet using Tapatalk
downsay said:
Am I understanding this correctly in that if I follow these guidelines I can move my data over to the Barnes and noble alotted storage that we were complaining about not having available?
Sent from my Nook Tablet using Tapatalk
Click to expand...
Click to collapse
That is correct, from what I understand as well.
Sent from my BNTV250 using Tapatalk
liquidzoo said:
Very nicely done.
Does Android possess a fstab? If so, could these changes (also) be made there and still be persistent?
Click to expand...
Click to collapse
From what I could tell, it does, but its not the normal /etc/fstab. It looks like they have a daemon or something that mounts the sdcard and the media (1gb) drive. When I first looked at its version of the fstab, it looked like it only took a block device, which doesn't quite work for the directory binding.
downsay said:
Am I understanding this correctly in that if I follow these guidelines I can move my data over to the Barnes and noble alotted storage that we were complaining about not having available?
Click to expand...
Click to collapse
Yes that is correct. You still cannot mount it under USB, however. If you have some other way of getting the files there, however, its open as an option. I've been using swiFTP (in the market) to do that. Could also copy and move from the media/sd cards that do mount to the PC, but thats a two step process. I've thought about getting MTP setup so that you can see that folder via USB, but haven't really had a chance to look into how that would work.
*Note, when using swiFTP and other programs more than likely, you may get some file permissions errors or other odd errors about corrupt files. These are just the file permissions that the program defaulted to, and can be fixed by doing a 'chmod -R 777 /mnt/internal/'. Don't have this problem on sdcard or media because they are just FAT32 formatted, which don't support permissions.
Trying to understand ...
gameman733 said:
I posted this in the nook touch forum by mistake. Please read below and let me know what you think.
Click to expand...
Click to collapse
I don't understand the purpose of the mounts. Why not just create /data/usrdata and put your stuff in there?
I know /data has "access-only/no-read" access for non-system apps, but anything in /data/usrdata/ should be visible (and no need to modify clrbootcount.sh).
If you need "/mnt/internal" (I don't see the need for that either), why not just use a soft link (which is permanent)???
The primary reason for using the mounts was that I was originally planning on trying to mount it in a way that would ignore file permissions, but didn't know at the time that you can't do that with a bind mount. Using a simple link would be just as effective in this case.
However.. / is Read only. Even when remounted read-write, this filesystem is actually regenerated every boot. So nothing in /mnt would stay past the next restart.
The purpose for having it in /mnt (could have been anywhere, I suppose, but it seemed a little more appropriate) was for apps that can't browse /data. For example, gameboid and related programs would get to /data and show nothing, because you can't browse it as a non-rooted app. Having a symlink or bind mount elsewhere in the filesystem where they can browse helps with that. The alternative was to remove the no-browsing permissions from /data. I didn't feel comfortable with doing this, however, as I'm sure there are some security risks to doing this. It probably isn't a big deal, but since we have the tools to do it while maintaining those existing permissions, why not go ahead and do that?
Is there a solution that does not require being rooted?
[I was gonna start a thread about this 1.0 GB vs 16GB issue. Glad someone
beat me to it. ]
A day or two ago, I side-loaded a couple of movies, each about 400-MB in size,
and was surprised to notice that I had only 20% of my 1.0GB remaining.
I haven't 'bitten the bullet', and got brave enough to 'root' my Nook yet.
(Still not sure yet whether my wife will keep it, and it's an XMAS-gift for her.)
But, I'm quite fluent in Linux, so if we DO keep it, I'll definitely get around
to doing the 'root'.
Meanwhile, if anyone does find a way, without rooting, to re-allocate these
built-in assigned storage quotas, please post it in this thread.
Cheers...
gameman733 said:
The primary reason for using the mounts was that I was originally planning on trying to mount it in a way that would ignore file permissions, but didn't know at the time that you can't do that with a bind mount.
Click to expand...
Click to collapse
To solve this issue I've compiled fuse kernel module and bindfs userspace utility. Bindfs is similar to "mount -o bind" but can override permissions and ownerships. I can share how-to instruction and compiled binaries if you want

[Q] Unable to change permissions or delete a specific file WITH root

Hello Gentlemen. Sorry to disturb you with a noob question but I cannot solve it for the life of me and I have tried everything I could find on the forums. I have an Aluratek Cinepad AT107F. I have successfully rooted it. I have full super user permissions and I have no problems deleting any files or folders EXCEPT one directory. Let me explain the situation.
I recently did a firmware update and it included brand new APKs for Youtube, also added Google Play Support, and added Angry Birds.
I am unable to update Youtube to the latest version. It gives a "Package file was not signed correctly. Uninstall the previous copy of the app and try again.".
So I attempted to do just what it had asked. I rooted just to do this. I tried removing it with Titanium Backup, I tried Root Uninstaller, I tried Root Explorer, I tried deleting using the "adb shell rm" command. I still get a "Read-only file system".
Even though I have root and granted root access to Root Explorer, I am unable to change the permissions for this /oem/apps/ directory. It's on the top level of the internal memory. I have no external SD card.
I've spent 10+ hours trying to figure this out and I'm sure someone knows something that I don't and can fix this super easy. I'm asking for your help, you're my only hope!
Your issue is that the update gave you modded files that the OEM doesn't want deleted. Most likely do to them not have permission from Google to do so. You will be hard pressed to find help here as we mainly deal with official releases and apks.
Wayne Tech S-III
zelendel said:
Your issue is that the update gave you modded files that the OEM doesn't want deleted. Most likely do to them not have permission from Google to do so. You will be hard pressed to find help here as we mainly deal with official releases and apks.
Wayne Tech S-III
Click to expand...
Click to collapse
Am I in the wrong sub forum? Is there another forum at XDA-Developers that could help?
Vindicoth said:
Am I in the wrong sub forum? Is there another forum at XDA-Developers that could help?
Click to expand...
Click to collapse
No nowhere on the site really deals with unofficial android versions and knock of devices. Your best bet will be the OEM
Read the error message again. The file is on a read-only filesystem. That is why you cannot delete it. In other words, you lack permission to write to the partition.
System partitions get mounted readonly to prevent modification. To remount /system as read-write,
Adb shell mount -o remount,rw /system
If you get "not permitted" error, your ROM's ro.secure means you cannot execute mount operations passed with adb command. So instead you must first open the shell,
> AdB shell
# mount -o remount,rw /system
Now you can delete:
Adb shell rm /system/file
If it is a directory
Adb shell rm -rf /system/dir
If you accidentally mistype that last command with a space beyween that first forward-slash and "s" you will have a very unworkable device....and that's why it is mounted read-only.
If the file is on a different read only filesystem, identify the partition the file is on and
Adb shell mount -o remount,rw /dev/block/id /LocToMountTo
You may have to specify the type
-t fstype
Adb shell mount
will tell you this
Don't forget to remount it as read-only (ro) when you are done
anotherguy19 said:
Read the error message again. The file is on a read-only filesystem. That is why you cannot delete it. In other words, you lack permission to write to the partition.
System partitions get mounted readonly to prevent modification. To remount /system as read-write,
Adb shell mount -o remount,rw /system
Now you can delete:
Adb shell rm /system/file
If it is a dir
Adb shell rm -rf /system/file
If you accidentally mistype that last command with a space beyween that first forward-slash and "s" you will have a very unworkable device....and that's why it is mounted read-only.
If the file is on a different read only filesystem, identify the partition the file is on and
Adb shell mount -o remount,rw /partition/id /folder
You may have to specify the type
-t fstype
Adb shell mount
will tell you this
Don't forget to remount it as read-only (ro) when you are done
Click to expand...
Click to collapse
Well I can access /system just fine. The problem is the /oem/apps folder is not in the /system folder. It's in the top level folder.
/system and /oem/apps are in the root directory. I can change the permissions on /system just fine using Root Explorer, but when trying to change the permissions using any method possible, /oem wont change.
This happens alot on Devices out of China and other places that sell knock offs. They make it so you cant delete their apps and if you do then it bootloops which only a reflash will fix.
Vindicoth said:
Well I can access /system just fine. The problem is the /oem/apps folder is not in the /system folder. It's in the top level folder.
/system and /oem/apps are in the root directory. I can change the permissions on /system just fine using Root Explorer, but when trying to change the permissions using any method possible, /oem wont change.
Click to expand...
Click to collapse
/system and /oem are different partitions then
mount | grep oem
or
adb shell mount | grep oem
Will tell you what /dev/block/xxxx the /oem is on and if it is mounted as read-only (ro)
> adb shell
# mount -o rw,remount /oem
zelendel said:
This happens alot on Devices out of China and other places that sell knock offs. They make it so you cant delete their apps and if you do then it bootloops which only a reflash will fix.
Click to expand...
Click to collapse
Ever get the feeling that you're writing in invisible ink lol?.. Eventually he will listen! You have great patience!
zelendel said:
This happens alot on Devices out of China and other places that sell knock offs. They make it so you cant delete their apps and if you do then it bootloops which only a reflash will fix.
Click to expand...
Click to collapse
Referencing zelendel's post, the device could fail to boot because it is looking for the removed app in /oem
So you could try to remove it from being referenced by the startup scripts.
Try doing a search for files that could be referencing the apk you want to remove.
> adb shell
# grep -r AppName.apk /system/etc
CtrlAltDelIrl said:
Ever get the feeling that you're writing in invisible ink lol?.. Eventually he will listen! You have great patience!
Click to expand...
Click to collapse
If it bootloops then I'll just flash it again, but its worth a try isn't it? Thanks anyways.
anotherguy19 said:
Referencing zelendel's post, the device could fail to boot because it is looking for the removed app in /oem
So you could try to remove it from being referenced by the startup scripts.
Try doing a search for files that could be referencing the apk you want to remove.
> adb shell
# grep -r AppName.apk /system/etc
Click to expand...
Click to collapse
Thank you for your very helpful posts and willingness to help me possibly bootloop my device
when I type the grep command it says it is not found, so I will download busybox onto my tablet and try those commands.
Vindicoth said:
Thank you for your very helpful posts and willingness to help me possibly bootloop my device
when I type the grep command it says it is not found, so I will download busybox onto my tablet and try those commands.
Click to expand...
Click to collapse
So after running mount | grep oem it shows this
[email protected]:/ # mount | grep oem
/dev/block/nandi /oem cramfs ro,relatime 0 0
So is it possible to change this directory to rw? I tried the mount -o rw,remount oem but it doesnt show anything after i input the command
[EDIT]
So it seems that the cramfs file system is read-only.
Vindicoth said:
Thank you for your very helpful posts and willingness to help me possibly bootloop my device
when I type the grep command it says it is not found, so I will download busybox onto my tablet and try those commands.
Click to expand...
Click to collapse
I love breaking things. It's only then we can figure out how it works.
Busybox is exactly what you need.
grep will search for strings within all files and subdirs of /system/etc; matching whatever you type for "AppName.apk"
It is a case-sensitive search unless you add
-i
So
grep -ri ....
or
grep -r -i....
Both would work.
But you don't even know if you need to be searching for a file to modify.
You may want to go ahead and delete the file and reboot.
If it fails, note the file(s) you deleted and know the system is looking for them and then proceed with seeing if you can identify a file in /system/etc that is looking for it's presence.
---------- Post added at 11:59 PM ---------- Previous post was at 11:53 PM ----------
Vindicoth said:
So after running mount | grep oem it shows this
[email protected]:/ # mount | grep oem
/dev/block/nandi /oem cramfs ro,relatime 0 0
So is it possible to change this directory to rw? I tried the mount -o rw,remount oem but it doesnt show anything after i input the command
[EDIT]
So it seems that the cramfs file system is read-only.
Click to expand...
Click to collapse
Commands that complete "quietly" mean they were successful.
If you type
# mount | grep oem
After
# mount -o rw,remount /oem
/dev/block/nandi /oem cramfs ro,relatime 0 0
Should have changed to
/dev/block/nandi /oem cramfs rw,relatime 0 0
anotherguy19 said:
I love breaking things. It's only then we can figure out how it works.
Busybox is exactly what you need.
grep will search for strings within all files and subdirs of /system/etc; matching whatever you type for "AppName.apk"
It is a case-sensitive search unless you add
-i
So
grep -ri ....
or
grep -r -i....
Both would work.
But you don't even know if you need to be searching for a file to modify.
You may want to go ahead and delete the file and reboot.
If it fails, note the file(s) you deleted and know the system is looking for them and then proceed with seeing if you can identify a file in /system/etc that is looking for it's presence.
---------- Post added at 11:59 PM ---------- Previous post was at 11:53 PM ----------
Commands that complete "quietly" mean they were successful.
If you type
# mount | grep oem
After
# mount -o rw,remount /oem
/dev/block/nandi /oem cramfs ro,relatime 0 0
Should have changed to
/dev/block/nandi /oem cramfs rw,relatime 0 0
Click to expand...
Click to collapse
Followed those steps and its still
/dev/block/nandi /oem cramfs ro,relatime 0 0
Apparently the cramfs is a read only filesystem by design.
Vindicoth said:
Followed those steps and its still
/dev/block/nandi /oem cramfs ro,relatime 0 0
Apparently the cramfs is a read only filesystem by design.
Click to expand...
Click to collapse
You need to create an image of the partition, mount the partition on a system with tools to edit it, extract the contents, and re-create the cramfs.
You would need a linux box or linux virtual machine like Virtualbox, or maybe cygwin has the tools. I would just download and burn a Linux LiveISO and run it from VirtualBox, creating a shared folder to get access to the image file (oem partition).
With debian system, you would do
# apt-get install cramfsprogs fusecram
fusecram allow you to mount the cramfs partition on Linux PC via
# mount -t loop cramfsOEM.partition /mnt/workingdir
However since we cannot simply mount the filesystem on the device by plugging into the usb port of the linux machine and mounting from there, we must first create an image (file) of /dev/block/nandi.
> adb shell
# dd if=/dev/block/nandi of=/nandi.img bs=4k
And then copy it to our pc so we can work with the file.
# exit
> adb pull /nandi.orig.img .
Now we can transfer this file to a machine with the requisite cramfs tools to modify the file.
If you look back, I wrote
# mount -t loop cramfsOEM.partition /mnt/workingdir
replace cramfsOEM.partition for nandi.orig.img, or whatever you named it.
Workingdir needs to exist, so
# mkdir /mnt/workingdir
Now you will have to look up cramfsprogs which will allow you to extract the contents to modify. On the Debian or Ubuntu linux machine "/mnt/workingdir" would be the equivalent of "/oem" on your Android device.
However, all this is could very well be for naught, as it is likely the firmware has marked this partition as "signed" so if we try to write back our modified image, the system will fail to boot since the size will be different. On the other hand, the firmware may very well just check to see the partition size is correct. And since you are decreasing the size, the new cramfs image created with a linux box will (should) fit in the old partition.
Fyi, an image file is like a zip file without the compression.
After you modify the cramfs, you can write it back with something like
> adb push cramfs.mod.img /
> adb shell
Then write over the old partition. However, you shouldn't write over a mounted file system so
# umount /dev/block/nandi
Then write over it.
# dd if=/cramfs.mod.img of=/dev/block/nandi bs=4k
Then reboot
# shutdown -r now
And see what happens.
anotherguy19 said:
You need to create an image of the partition, mount the partition on a system with tools to edit it, extract the contents, and re-create the cramfs.
You would need a linux box or linux virtual machine like Virtualbox, or maybe cygwin has the tools. I would just download and burn a Linux LiveISO and run it from VirtualBox, creating a shared folder to get access to the image file (oem partition).
With debian system, you would do
# apt-get install cramfsprogs fusecram
fusecram allow you to mount the cramfs partition on Linux PC via
# mount -t loop cramfsOEM.partition /mnt/workingdir
However since we cannot simply mount the filesystem on the device by plugging into the usb port of the linux machine and mounting from there, we must first create an image (file) of /dev/block/nandi.
> adb shell
# dd if=/dev/block/nandi of=/nandi.img bs=4k
And then copy it to our pc so we can work with the file.
# exit
> adb pull /nandi.orig.img .
Now we can transfer this file to a machine with the requisite cramfs tools to modify the file.
If you look back, I wrote
# mount -t loop cramfsOEM.partition /mnt/workingdir
replace cramfsOEM.partition for nandi.orig.img, or whatever you named it.
Workingdir needs to exist, so
# mkdir /mnt/workingdir
Now you will have to look up cramfsprogs which will allow you to extract the contents to modify. On the Debian or Ubuntu linux machine "/mnt/workingdir" would be the equivalent of "/oem" on your Android device.
However, all this is could very well be for naught, as it is likely the firmware has marked this partition as "signed" so if we try to write back our modified image, the system will fail to boot since the size will be different. On the other hand, the firmware may very well just check to see the partition size is correct. And since you are decreasing the size, the new cramfs image created with a linux box will (should) fit in the old partition.
Fyi, an image file is like a zip file without the compression.
After you modify the cramfs, you can write it back with something like
> adb push cramfs.mod.img /
> adb shell
Then write over the old partition. However, you shouldn't write over a mounted file system so
# umount /dev/block/nandi
Then write over it.
# dd if=/cramfs.mod.img of=/dev/block/nandi bs=4k
Then reboot
# shutdown -r now
And see what happens.
Click to expand...
Click to collapse
Wow that was very detailed. I thought I might have to do something like that. Thanks so much again. I'll try this in the morning since it's getting very late here. I'll go ahead and download a linux livecd tonight.

How to auto mount cleanly a partiton on boot

I have a second partition on my SDCARD at /dev/block/mmcblk1p2, all I want to do is ensure that it is always mounted as /storage/sdcard0/mount seems simple I can do it in 5 second on Linux, on Android, it seems impossible I can try to add a hack, but that is lost every-time I update the ROM. There has to be some simple way to do it, that I'm missing. The best I have is to load up a terminal emulated su to root and run: mount -t ext4 /dev/block/mmcblk1p2 /storage/sdcard0/mount
Now in theory, the following would work but for 2 things:
mkdir /storage/sdcard0/mount
su - root -c 'mount -t ext4 /dev/block/mmcblk1p2 /storage/sdcard0/mount'
But for the fact the Android's su does not understand -c so that is out. as well as the fact that non-root users (u0_a216 in my case) can not access /storage/sdcard0.
All I want is a simple way to ensure that this is always mounted where I want it when I need it, yet this simple task is nearly impossible it appears on Android, so why is that?
The issue here is that the fat32 partition does not support large files so I need a separate partition that does such as ext4, in reality if the external sdcard could just be ext4 there would be no issues, and it would be faster, but that is Android for you.
Any suggestions?
Thanks,
ERIC
Insert mount script to init.d folder...
via XDA Premium
Ok, I have this mostly working with juicessh and tasker now for now
I have 2 shell scripts:
mountDev.sh:
Code:
mkdir /storage/sdcard2
chmod 777 /storage/sdcard2
mount -t ext4 /dev/block/mmcblk1p2 /storage/sdcard2
umountDev.sh
Code:
umount /storage/sdcard2
rmdir /storage/sdcard2
In Tasker I have 2 tasks defined:
I'm using the JuiceSSH plugin to open a terminal to localhost I then execute:
To Mount:
Code:
su -l --shell=/system/bin/sh --command='cd /storage/sdcard0 ; sh ./mountDSev.sh ; exit' ; exit
To umount:
Code:
su -l --shell=/system/bin/sh --command='cd /storage/sdcard0 ; sh ./mountDSev.sh ; exit' ; exit
I then created 2 icons, 1 for each operation on the home screen. I also created a Device Boot event to automatically execute and mount the task.
This works, mostly, however even though it is root, sometimes I get errors such as /storage/ is readonly, which makes no sense since it could create the directory at boot, but can not remove the directory later on, since it is readonly. Its a minor thing currently, but annoying.
The benefit of this is it is easy to transfer between ROM images and devices without worrying about it being wiped out every-time I update. In theory it also works without init.d support being enabled. Down side is it you need Tasker and the JuiceSSH plug-in so it costs money.
Hope this helps others.
ERIC

Categories

Resources