This guide was created using information taken from:
http://bernaerts.dyndns.org/linux/247-ubuntu-automount-nexus7-mtp
http://www.webupd8.org/2012/12/how-to-mount-android-40-ubuntu-go-mtpfs.html
http://blog.itsbilal.com/index.php/...d-4-0-phonetablet-to-ubuntu-the-reliable-way/
and others. They show you how to determoine all the id information required to set up mtp mounting. This guide will just focus in on what you need to get your Asus TF700 connected.
Background:
Latest Android devices are using 2 different USB connexion modes : PTP and MTP.
With PTP mode, the tablet is seen as a digital camera. This is working Out Of The Box under Ubuntu 12.04. But, you can only access DCIM directory of your device.
With MTP mode, the tablet is seen as a multimedia device where you can access the complete exported filesystem. But it doesn't work Out Of The Box under Ubuntu. It needs some setup and configuration to work.
Note: Gvfs has been updated in Ubuntu 13.04 Raring Ringtail, bringing a new MTP backend which allows users to access Android 4.0 devices which do not support the USB Mass Storage. So this should work out of the box with Raring.
Even if you can access easily a MTP device thru a program called gmtp, it is not as convenient as a conventional USB mass storage, accessible directly from Nautilus.
This guide explains how to configure your Ubuntu computer to directly access your Asus TF700, exported filesystem in MTP mode as soon as you plug it to a USB port.
Thanks to some udev rules, your tablet will automatically mount when device is plugged in & unmount when device is unplugged.
This guide has been done for Asus TF700, but it should work with any other MTP device (Android phone or tablet, MP4 player, ...) if you adapt the Udev rules according to your device.
The Basic steps are:
1) Allow non root users to access root mounted filesystems
2) Install go_mtpfs
3) Configure udev rules to mount and unmount Android filesystems
Configuring FUSE:
Ubuntu doens't allow normal users to access fuse configuration file. This is a bug, which is quite easy to correct by giving read attribute to /etc/fuse.conf.
By default, fuse does not allow mounted filesystems to be accessed by anybody else that the user who has mounted it. As MTP filesystem will be mounted by root to be used by any user, we need to modify fuse default behaviour to allow it. This is configured by uncommenting the user_allow_other key in /etc/fuse.conf.
Code:
# sudo chmod a+r /etc/fuse.conf
# sudo gedit /etc/fuse.conf
Code:
/etc/fuse.conf
...
# Allow non-root users to specify the 'allow_other' or 'allow_root' mount options.
user_allow_other
Install go-mtpfs:
There are various programs to add support for mtp to Ubuntu. After trying a number of them I have found go-mtpfs works best for me. You certainly could install a different program and just adjust the guide to suit. Go-mtpfs is available in the WebUpd8 Unstable PPA, for Ubuntu 13.04, 12.10 and 12.04. Add the PPA and install it using the following commands:
Code:
# sudo add-apt-repository ppa:webupd8team/unstable
# sudo apt-get update
# sudo apt-get install go-mtpfs
If you are not happy with installing prebuild binaries from repositories, you can easily get the source from github and build it yourself.
Once that is done you need to create a mount point for your Android filesystems. I have chosen TF700 under /media. This mount point should be accessible by anybody as you will later mount the device using your user account.
Code:
# sudo mkdir /media/TF700
# sudo chmod 777 /media/TF700
Add the udev rules:
This is the core of making the auto mounting work. The first link I reference has all the information on how you discover the Vendor and Product ids. While it is interesting reading, I have just skipped over all that and supplied the TF700 specific values. If you are trying to setup another device you WILL NEED TO read it and get the appropriate values, as they are device specific.
Code:
# sudo gedit /etc/udev/rules.d/51-android.rules
Code:
# Asus TF700
SUBSYSTEM=="usb", SYSFS{idVendor}=="0b05", ATTR{idProduct}=="4c91", MODE="0666" #MTP media, USB debug on
# Asus TF700 MTP mode under JB 4.2+ : automatic mount & umount when plugged (USB debug on & off)
ENV{ID_MODEL}=="ASUS_Transformer_Pad_TF700T", ENV{ID_MODEL_ID}=="4c91", ACTION=="add", RUN+="/usr/bin/sudo -b -u YOUR_LOGIN /usr/bin/go-mtpfs -allow-other=true /media/TF700"
ENV{ID_MODEL}=="ASUS_Transformer_Pad_TF700T", ENV{ID_MODEL_ID}=="4c91", ACTION=="remove", RUN+="/bin/umount /media/TF700"
You need to change "YOUR_LOGIN" to your username.
Last thing is to restart udev for the new rules to become operationnal.
Code:
# sudo service udev restart
Declaration in /etc/fstab:
At this stage, you are able to automatically mount and unmount your TF700. Your device should appear after few seconds in Nautilus computer section.
You can now browse your device straight from Nautilus. You can copy files from and to your TF700, you can rename files, ...
You have to know that you will face some limitations as MTP is not a real filesystem protocol :
* you can not copy files bigger than 2 Gb,
* you can not create empty files,
* you can not move file within the phone with drag & drop
* you cannot open files in write mode directly from TF700
Another problem is that you can not unmount your TF700 straight from Nautilus. If you click on the Eject button, you will get an error message saying :
umount: /media/TF700 is not in the fstab (and you are not root)
To solve that, it has to be declared in /etc/fstab with its fuse caracteristics.
As /etc/fstab is using SPACE as a separator and as our TF700 fuse caracteristics include SPACE caracter, we have to convert them to its octal escape code \040.
Code:
# sudo gedit /etc/fstab
Code:
/etc/fstab
...
DeviceFs(ASUS\040Transf) /media/TF700 fuse.DeviceFs(ASUS\040Transf) allow_other,rw,user,noauto 0 0
When you will remount it in MTP mode, your TF700 will be seen as a device. In Nautilus, it appears in the device section and you are now able to Eject it ...
Thanks wery good info
ʞןɐʇɐdɐʇ on tf300t
with 13.04, i hear where now have native support. i installed 13.04 last night, but did not test it out. i will try it tonight.
timrock said:
with 13.04, i hear where now have native support. i installed 13.04 last night, but did not test it out. i will try it tonight.
Click to expand...
Click to collapse
Didn't work for me on my Droid Razr HD but the OPs tutorial was pretty useful.
Few questions though:
1. you can not create empty files,
2. you can not move file within the phone with drag & drop
Click to expand...
Click to collapse
1. Does this apply to folders as well?
2. What about cut and paste? I swear it worked for me.
Xplorer4x4 said:
Didn't work for me on my Droid Razr HD but the OPs tutorial was pretty useful.
Few questions though:
1. Does this apply to folders as well?
2. What about cut and paste? I swear it worked for me.
Click to expand...
Click to collapse
worked fine with my tf700, galaxy nexus, nexus 7 and my daughter samsung galaxy tab 2
As some extra help. I hate to see the device always present in Nautilus even if it's not mounted, because of fstab. So as a workaround (which is not the best way I imagine) I modified the udev rules file and the fstab file.
bjtheone said:
Code:
# sudo gedit /etc/udev/rules.d/51-android.rules
Code:
# Asus TF700 MTP mode under JB 4.2+ : automatic mount & umount when plugged (USB debug on & off)
ENV{ID_MODEL}=="ASUS_Transformer_Pad_TF700T", ENV{ID_MODEL_ID}=="4c91", ACTION=="add", RUN+="/usr/bin/sudo -b -u YOUR_LOGIN /usr/bin/go-mtpfs -allow-other=true /media/TF700"
ENV{ID_MODEL}=="ASUS_Transformer_Pad_TF700T", ENV{ID_MODEL_ID}=="4c91", ACTION=="remove", RUN+="/bin/umount /media/TF700"
Click to expand...
Click to collapse
I changed it as follows:
Code:
# Asus TF700 MTP mode under JB 4.2+ : automatic mount & umount when plugged (USB debug on & off)
ENV{ID_MODEL}=="ASUS_Transformer_Pad_TF700T", ENV{ID_MODEL_ID}=="4c91", ACTION=="add", RUN+="/path/to/mount_script.sh"
ENV{ID_MODEL}=="ASUS_Transformer_Pad_TF700T", ENV{ID_MODEL_ID}=="4c91", ACTION=="remove", RUN+="/path/to/unmount_script.sh"
The mount_script.sh contains:
Code:
#!/bin/sh
/bin/sed -i 's|#DeviceFs(ASUS\040Transf)|DeviceFs(ASUS\040Transf)|' /etc/fstab
/usr/bin/sudo -b -u YOUR_LOGIN /usr/bin/go-mtpfs -allow-other=true /media/TF700
and the unmount_script.sh:
Code:
#!/bin/sh
/bin/sed -i 's|DeviceFs(ASUS\040Transf)|#DeviceFs(ASUS\040Transf)|' /etc/fstab
/bin/umount /media/TF700
Now to make sense of the previous scripts, the fstab file has to change just a little. The extra line previously added has to be commented. That way the mount script will uncomment that line, making your device unmountable by the user and showing under the devices section, and when removed the unmount script will comment the same line so it won't show in that section any more.
Just to be sure, here's how the fstab looks (note the #[/B in front of the line)]:
Code:
/etc/fstab
...
#DeviceFs(ASUS\040Transf) /media/TF700 fuse.DeviceFs(ASUS\040Transf) allow_other,rw,user,noauto 0 0
Make sure you restart your udev so the new scripts can work, using with
Code:
# sudo service udev restart
Great tutorial but go-mtpfs is buggy
How come there are files that don't show up when I mount the go-mtpfs directory? For instance, when I navigate to SD Card/DCIM/Camera over the go-mtpfs mount,there is nothing there. if I connect to a shell over adb, I can see the files are clearly there. I thought it may be filesystem corruption however issuing adb pull of the Camera directory does indeed retrieve the correct files.
Related
This tutorial is based on this one for G1: http://www.saurik.com/id/10
Hi,
I'll show you how to run debian in chroot on our optimus one. It wont affect android in any way, and they can run simultaneously, side by side. You are only running bash from debian, not its kernel or any other low-level part. But you can use debian's programs.
Requirements
* Linux on your pc or in virtual machine
You need debootstrap to make debian image, so you need debian distro (maybe in *buntu it is too, but I am not sure). You dont need GUI, bash is all you need.
* Busybox(-> rooted phone)
Most custom roms comes with busybox, I am not sure how about store ROM.
* Terminal emulator on phone and/or ADB
I suggest you to make sure you have adb, because you dont wanna write it all on small touch keyboard.
Some knowledge about linux systems
If you are following this tutorial only because you want to /flex on your friends and you dont know anything about linux, then you really _should_ stop reading this tutorial.
I also recommend you to have a2sd, so we can put debian image on its partition, when it is on sdcard main partition, it _may_ cause some problems with usb mass storage.
So, lets start.
1. Getting debian image
Boot into debian and get bootstrap tool:
Code:
apt-get install debootstrap
Now, create an empty disk image, I'd say minimum size is about 150mb, but I recommend you use more:
Code:
dd if=/dev/zero of=debian.img seek=*size_in_bytes* bs=1 count=1
You need to create ext filesystem in image with this tool(you can try it with "sudo" if you have problems):
Code:
mke2fs -F debian.img
Image is ready now, now lets mount it so we can install debian into it:
Code:
mkdir debian
mount -o loop debian.img debian
Debootstrap tool will do all the work for us. You can try to use squeeze instead of lenny or download it from your country's mirror. "--variant=minbase" argument will install just base system with apt-get and only few other packages. (This also may need sudo)
Code:
debootstrap --verbose --arch armel --foreign lenny debian http://ftp.cz.debian.org/debian
umount debian
2. Mount the image
Now, we will use ADB shell to mount the image and finish debian installation. Do not forget to write "su" before you start, we need root for this.
You need to decide where to put debian.img. I suggest you to put it on a2sd partition, which is system/sd, so :
Code:
cp /sdcard/debian.img /system/sd
export kit=/system/sd
Our mount point will be /data/local/mnt, so lets make some variable to make it easier:
Code:
export mnt=/data/local/mnt
busybox mkdir -p $mnt
We also need to set these enviroment variables, and we can also make alias for busybox so we dont have to write busybox all the time.
Code:
export PATH=/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
alias _=busybox
Now we need to create loop device for image:
Code:
_ mknod /dev/loop0 b 7 0
And if nothing went wrong, you should be able to mount image now ("mount: no /etc/mtab" is normal) :
Code:
_ mount -o loop,noatime $kit/debian.img $mnt
3. Finalizing installation of debian
With mounted image, we can proceed to second stage of debian bootstrap:
Code:
_ chroot $mnt /debootstrap/debootstrap --second-stage
If you want install some packages with apt-get, you also need to add repo to sources.list. Of course, if you downloaded squeeze instead of lenny, you need to change "lenny" to "squeeze"
Code:
echo 'deb http://ftp.cz.debian.org/debian lenny main' >$mnt/etc/apt/sources.list
Set correct DNS servers - debian can't take them from Android.
Code:
echo 'nameserver 4.2.2.2' >$mnt/etc/resolv.conf
Done, installation over.
4. Running debian bash
To get to debian bash, use this command. You can try "cat /etc/issue.net" or "uname -a" so you can see its really debian.
Code:
_ chroot $mnt /bin/bash
But its not all yet, you need to mount some things for debian:
Code:
mount -t devpts devpts /dev/pts
mount -t proc proc /proc
mount -t sysfs sysfs /sys
Now link mtab to /proc/mounts. You need to do this only once.
Code:
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab
And if you want to use ssh server to log in into debian, you also should set root pass:
Code:
passwd root
5. Installing packages
First, you need to update packages list:
Code:
apt-get update
and now you can install whatever you want with "apt-get install"!
6. Finishing
I suggest you to write some .sh script so you can mount it all with one command, for example something like this: http://pastebin.com/VT6272d5
What packages have you tested?
sshd - works great, you can connect to phone via putty or ssh
mc - works, but phone screen is to small
gcc-avr - if you are programming for avr microcontrollers, you can compile it on your phone
netcat - telnet connection
git-core - works great
htop - you can see this on screnshot below
apache2 - works like a charm
xfce4, Xorg server and tightvncserver - working but slow, see screenshots
gnash - working but slow, see screenshots. This is the only option how to run flash content on optimus one xD
Iceweasel - if you are using vnc server, you can browse web pages
gcc, g++, autoreconf, cmake and whatever else is needed to build mangos - working
mysql-server - you have to set "user = root" in /etc/mysql/my.conf, but works
MaNGOS - http://getmangos.com/ takes long to build, but works! See this post and also this one.
..and maybe some more which I dont remember.
Hope this tutorial helped you
I'll try bootstrapping debian when I figure out what the hell is wrong with my system. I can't download files from ftp (but I can with wget and other progs. just not with pacman, debootstrap, and the like).
debian on optimus v
searched around to avoid multiple posts, and found this.
I've been running chroot debian on my V as well, squeeze then sid now going back to squeeze.
the main problem I've encountered was in the "debootstrap --second-stage", which generally froze at "I: configuring sysvinit". I thought that was from overloading the CPU, but turns out android init doesn't create /dev/initctl like debian does, so debootstrap hangs waiting for a response reading/writing /dev/initctl
I didn't have that issue using SL4A's shell instead of android terminal.
being a bit of a 'noid, I have used "mknod /dev/initctl p" in the chroot before running "debootstrap --second-stage" since reading of that solution. not sure if it's making much difference, because that didn't fix the issue before I found SL4A and was still using android terminal for shell functions.
I like xfce4 as a window manager in the VNC, it's small but still functional.
I did a bit of things different than saurik, but used his guide extensively, along with much googling for other deb->droid ports.
my chroot runs in the android root directory with bind-mounts since the custom kernel I like doesn't include unionfs. I also directly use an ext4 2nd partition on the SD rather than a loop-mounted filesystem image. (yes, ext4 journals will eventually frag my SD but the cost of another is worth the crash-resistance to me.)
my short-term goal is to mix inits between the two os's and run X through an android app frontend to avoid the framebuffer copy lag from the VNC. my 3 main reasons for debian on the phone are program development (works currently,) flash (actually gnash, and needs a working full-speed access to framebuffer, not working yet,) and emulators for J2ME and MAME (same boat as flash.)
so far trying to run X directly blanks my screen and forces a battery pull to get it back, so kinda giving up that route for the moment.
so installing Archlinux on O1 must be possible? how?
pymebrahimi said:
so installing Archlinux on O1 must be possible? how?
Click to expand...
Click to collapse
All must work, as long as they support running on ARM. AFAIK Arch doesn't have an (official) ARM port. You can try Arch Mobile though
This command fails me
Code:
_ mount -o loop,noatime $kit/debian.img $mnt
The error I get is no device or file exists.
Tried creating more number of loop devises too. Still it didn't work. I am using cyanogemmod 2.3.3 ROM.
onehomelist said:
This command fails me
Code:
_ mount -o loop,noatime $kit/debian.img $mnt
The error I get is no device or file exists.
Tried creating more number of loop devises too. Still it didn't work. I am using cyanogemmod 2.3.3 ROM.
Click to expand...
Click to collapse
What is the exact wording of the error?
The exact error that I get:
Code:
# busybox mknod /dev/loop0 b 7 0
# busybox mount -o loop,noatime $kit/debian.img $mnt
mount: can't setup loop device: No such file or directory
Instead of using $kit/debian.img, try manually pointing to the debian image.
For example, if you have it on the sdcard's debian folder:
Code:
/sdcard/debian/debian.img
That too didn't work.
make sure that debian image is where it should be. Also try to "ls /dev/" and look for loop0 - i had some problems with loop devices on mik's 2.3, but I did not really solved it, because I went back to froyo after while.
The loop0 device exists is /dev. As you have experienced same issue on the same ROM, I am convinced that its a ROM issue.
I just tried to install xorg, xfce4 & tightvncserver - everything work just fine, although its kinda slow
ext partition instead of loop filesystem
Tasssadar said:
I just tried to install xorg, xfce4 & tightvncserver - everything work just fine, although its kinda slow
Click to expand...
Click to collapse
I think it runs faster from a sdcard partition than a loop filesystem, if I remember right. I tested a loop-mounted preconstructed debian img from some tutorial for another device before debootstrapping my own.
partition your card with a second partition, ext2 if you're worried about journalling wearing out your sd, or ext4 if you're more worried about corrupting your precious debian filesystem in a crash or unclean umount. gparted in ubuntu seemed to work well for me.
resize your ntfs partition instead of deleting it or android may complain.
with your debian img mounted as a loop filesystem on a linux box at the same time as your new partition, you can copy everything from the img to the ext partition by:
Code:
cp -av /path/to/loopmountedimg/* /path/to/extpartition
if you replace the loop-mounting code in your boot script with a vold mount of your ext partition, android is supposed to umount the partition cleanly on powerdown or reboot.
on my optimus v, the mount looks like the following in my boot script (I'm posting the comments too for info)
# mount 2nd sdcard partition from vold, should prevent dirty unmount at reboot
# if your linux is on a different partition than 2, substitute that number for the 2 in .../vold/179:2 below
# first unmount it; if not already mounted, system will echo 'umount: can't forcibly umount /dev/block/vold/179:2: Invalid argument' but this isn't an error to worry about
Code:
umount -l /dev/block/vold/179:2
mount -o noatime,exec,suid /dev/block/vold/179:2 /$mnt
maybe someone here can use this info.
also, for anyone who wants to save some hours and bandwidth, I have a basic squeeze debootstrap uploaded to 4shared.
it shouldn't be missing any of the readme's or licensing docs, so it should be GPL ok AFAIK.
resolv.conf and sources.list are already configured for 3g access and the main Debian repository, so it's pretty much plug-n-play.
no extra packages. you'll need to apt-get tightvncserver and a window manager unless you just want the bash shell.
the first time you chroot in, you should use passwd to set a root password, and adduser to get a non-root account on there.
the only glitch is that I accidentally tar'd it into a compressed folder; so you can't just untar it into the ext partition, it needs unpacked with an archive manager. sorry!
here is the filesystem image
uncompressed, 9645 items, totalling 264.3 MB
compressed, 116.3 MB (121929580 Bytes)
Tried to put it on ext2 partition without image, its a bit faster but still very slow.
But i took some screenshots this time. You can see flash (well, gnash) player on optimus one working on last screenshot
And I have one question: is debian using its own libc or android's bionic?
Tasssadar said:
Tried to put it on ext2 partition without image, its a bit faster but still very slow.
Click to expand...
Click to collapse
guess I'm biased, first linux I used was on a 100MHz pentium 1, so this handheld flies by comparison.
But i took some screenshots this time. You can see flash (well, gnash) player on optimus one working on last screenshot
Click to expand...
Click to collapse
I could only get gnash to play ads. boo. froze up iceweasel every time I tried to open a flash video. what browser are you using? oh, man, it's iceweasel, isn't it?? also, chromium just refused to start on my optimus.
And I have one question: is debian using its own libc or android's bionic?
Click to expand...
Click to collapse
pretty sure it's standard debian libc. you could integrate the android toolchain if you were so motivated, probably.
bigsupersquid said:
I could only get gnash to play ads. boo. froze up iceweasel every time I tried to open a flash video. what browser are you using? oh, man, it's iceweasel, isn't it?? also, chromium just refused to start on my optimus.
Click to expand...
Click to collapse
Chromium does not work for me, too.
Well, it froze for me too, but after while it at least got to show what you see on the screenshot
bigsupersquid said:
pretty sure it's standard debian libc. you could integrate the android toolchain if you were so motivated, probably.
Click to expand...
Click to collapse
I was just thinking if this is possible, then normal android aplication could have libc included, if its needed.
Do you know MaNGOS? It is open-source server for World of Warcraft (for more info go to http://getmangos.com/). I just compiled it and I run it on my optimus one. And guess what - without world db, its really fast! I am extracting UDB to database right now, I will post some screenshots and results with full-featured db soon.
And thats why I love linux and android
I got no words to describe my eyes when reading that at the moment.
So, what you might wanna know if you wanna try it too:
All packages needed for mangos to compile are working good, except for mysql server: you need to set "user = root" in my.cnf - it is located in /etc/mysql/ - because you cant put any root rights to any other user than root, so mysql user cant create tcp socket.
You will most likely need swap file - optimus has plenty of RAM, but yet not enough. All you need is to compile kernel with CONFIG_SWAP=y and follow this tutorial: http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/. 512mb swap is enough. Just for the record, swap is working on optimus one, I think nobody tried it here yet.
Now as for the compilation of mangos, it is mostly working as it is, only problems are intel tbb library and g3dlite library.
TBB is not available for arm yet, so you need to compile without it. Use -DUSE_STD_MALLOC=0 in cmake line.
As for the g3dlite, things are little bit more tricky - you need it, and there are some asm() instructions in it, which are different for arm. I only commented them, because I dont know assembler: https://github.com/Tasssadar/mangos-arm/commit/67c442fa0c10e82b282b83a8fe485588f8786e12
I have no idea how it can even work without all that code in g3dlite, but it just does.
You can use scriptdev2 from its git, theres no problem in it.
Thats all, after that just "make" and get something good to read, because it will take really long. At least 5 hours for compilation and nearly hour and a half for linking of scriptdev2 and mangosd binary.
Creating of databases is just like on normal pc, so I just skip it...same goes for dbc files, maps and vmaps.
Loading of mangos takes around 4 minutes with full-featured db. mangos then takes around 180mb of ram and cpu usage is...surprisingly low, considering the fact that our cpu does not have hw float operations. I tried to clear Azjol Nerub instance (well, solo with gm character) and maximal cpu usage was 60%, when fighting a boss with lots of spawns. I could imagine some 5-man dungeon run would be just fine
Also, you will get slight lag when moving into new location, when phone loads map files from sdcard.
Thats all, see screenshots
anyone been able to sync music/video's to there transformer from a linux machine ?
I have all of the mtp stuff set up for other devices, but i cannot get the transformer to show up ...
Any help would be appreciated
I don't believe the TF is an MTP device... it simply mounts as storage. Drag/Drop your music.
crater said:
I don't believe the TF is an MTP device... it simply mounts as storage. Drag/Drop your music.
Click to expand...
Click to collapse
It is actually an MTP device. This allows us to access the storage area without making it unavailable to the device like a USB mount does.
Here's how to get your Transformer to show up in Ubuntu for example. This includes stuff you will have setup but this will help others too.
Code:
$ sudo apt-get install mtpfs
$ sudo mkdir /media/transformer
$ sudo chmod 775 /media/transformer
$ sudo mtpfs -o allow_other /media/transformer
You should now be able to see the device under /media/transformer
To remove the device type:
Code:
$ sudo umount mtpfs
You may also need add a rule for the device to see it in Ubuntu:
Code:
$ sudo vi /etc/udev/rules.d/51-android.rules
Add this line to the 51-android.rules file:
Code:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="4e0f", MODE="0666", OWNER="<your user name>" #Asus Transformer
Save the file, then chmod to all read:
Code:
$ sudo chmod a+r /etc/udev/rules.d/51-android.rules
i was reading a guide on xoom forums i believe that told you to edit fstab. is that not necessary? i did it without making a backup and i messed up my mounting points.
Roach2010 said:
It is actually an MTP device. This allows us to access the storage area without making it unavailable to the device like a USB mount does.
Click to expand...
Click to collapse
My mistake, I was completely unaware that they had made this change in honeycomb.
mtpfs works great, I've got it working on my gentoo netbook for managing music and videos on my Creative Xen X-Fi.
Crimton said:
i was reading a guide on xoom forums i believe that told you to edit fstab. is that not necessary? i did it without making a backup and i messed up my mounting points.
Click to expand...
Click to collapse
fstab is for automounts at system startup, I just tried adding an entry for mtpfs but I got 'An error occurred while mounting /media/transformer' so I can't help with that.
I could care less if it auto mounts I just want it to mount at all. so you have tested what you posted above and it definitely works? if so, that is awesome.
Sent from my ADR6400L using Tapatalk
edit: can't get this to work for me how do you get it to mount? if i do sudo mount mtpfs i get:
Code:
mount: wrong fs type, bad option, bad superblock on mtpfs,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
if i do /media/transformer i get:
Code:
bash: /media/transformer: Transport endpoint is not connected
i got it to work by starting a new mount point /media/tf101 and setting permissions on it.
I can't get this to work consistently, some times I can see all of the folders in the internal storage some times I only see the playlist folder and sometimes I see no folders and the "Transport endpoint is not connected" error message.
It is also worth noting that everytime I set up a new mountpoint it works but getting the files system to mount again is very unreliable.
Any ideas what this might be?
Don't really fancy setting up a new mount point every I want to transfer files onto the eee pad.
Using Ubuntu 11.04
I just use gmpt on Ubuntu (in the rare ocasions I need it - I mostly get files from Samba share).
Ok, so i got things mounted, but when i try to copy a 5gb file from my 2tb drive to my transformer, it seems to eat up space on my os disk when it tries to transfer. This definitely wont work for me as I only have a couple gigs of space free on my OS disk, which is meant for speed, not lots of storage (my 2tb drive is for that). Why is this happening? Some sort of temporary/caching action going on? Seems like a major design flaw with mtpfs if this is how it works. =(
Magnesus said:
I just use gmpt on Ubuntu (in the rare ocasions I need it - I mostly get files from Samba share).
Click to expand...
Click to collapse
gmtp doesnt seem to be able to see my transform. =(
I use QuickSSHD on my Transformer and sshfs on Linux. It is possible to use public key authentication. For pushing large files I use adb push. MTP works very unreliable. Sometimes files are randomly moved to different directories if they are recognized as media files. So after a few experiments I stay away from mtpfs.
Sent from my Transformer TF101 using Tapatalk
Has anyone figured this out yet, because this is really pissing me off. I understand the benefits of mtp, but if I can't use it linux (Ubuntu) to linux (Android), what's the point?
I use Ubuntu 10.04, AMD-64 bit and gMTP works pretty well. I did have to compile it because I understand that for some Linux versions it is broken.
I'm having problems too with Asus Transformer (Tested on Ubuntu 11.04 64 and 32bits).
I'm unable to transfer big files (like HD videos), it seems the transfer is completed but no file is stored. On the 64bits box I get messages about "the device is not connected" after trying to transfer big files, and I have to remount the device to be able to browse through folders.
Ok, here it's a tip: Enable USB Debugging under Settings → Applications
It seems it works enabling that. I have to do more tests with large files since mtpfs uses my root partition as temporally storage and I run out of free space
levenite said:
I use Ubuntu 10.04, AMD-64 bit and gMTP works pretty well. I did have to compile it because I understand that for some Linux versions it is broken.
Click to expand...
Click to collapse
i just got my 10.1v today and i'm trying to do this, but i havent even found gmtp source for 10.04
lacion said:
i just got my 10.1v today and i'm trying to do this, but i havent even found gmtp source for 10.04
Click to expand...
Click to collapse
I believe this is the link I used:http://chewy509.110mb.com/gMTP.html
Note: When you start gMTP make sure you give it time to initialize.
Crimton said:
[...]
edit: can't get this to work for me how do you get it to mount? if i do sudo mount mtpfs i get:
[...]
i got it to work by starting a new mount point /media/tf101 and setting permissions on it.
Click to expand...
Click to collapse
So wat was your mount command after all ?
Could you share please ?
Because from my point of view I have an additional issue, after my Tablet Mounted, if I try to open (with Nautilus) the mount point I have an error:
In French said:
Impossible d'afficher «*/media/transformer*».
Le type du fichier est inconnu
Click to expand...
Click to collapse
In English said:
Impossible to display « /media/transformer ».
Unknown file type
Click to expand...
Click to collapse
If you are using Fedora with Gnome3, like me.
yum install -y gnomad2
Since there is no mtpfs in the packge repo, use this or compile mtpfs.
INFORMATION
This guide is intended to make a full backup of your android phone (the entire memory block with all partitions) or a single partition (including sdcards, etc) directly to your computer, in either
Block level (with dd): for single partitions or whole memory block (all partitions in one piece). The backup always has the same size which is the size of the partition.
File level (with tar): only for individual partitions. This only includes files and folders, so occupies much less space, depending on how much filled is the partition.
It can be done with the phone powered on or from ClockWorkMod Recovery (from both ADB works, while in Fastboot doesn't so won't apply). Unless specified the commands meant to be used from Windows. For Linux and Unix is similar.
REQUIREMENTS
Rooted Android Phone
Busybox installed on your phone
If you are using Linux / OS X you have native tools, for Windows download Cygwin, and install with it netcat, pv and util-linux. Get them from Cygwin's setup.exe
ADB installed.
Make sure adb.exe is in your windows' path. See here and here, or use Path Manager.
Android phone with USB Debugging enabled, and the proper drivers installed on Windows so the phone is recognized. Typing 'adb devices' on a terminal should show your device.
PARTITION IDENTIFICATION
You now have to identify the partition or block device that you want to backup. For a single partition you can use either tar or dd, while for the entire memory block you can only use dd.
For example, on Galaxy Nexus you have the list of partitions here and for Galaxy S2 here.
Usually on android, the entire block containing all partitions is located at /dev/block/mmcblk0 and the data partitions is a subpartition of it. You can push parted with GPT support to your device and see all information on a partition or block.
Whole phone memory -> /dev/block/mmcblk0 (may vary, in some phones this is the sdcard)
Subpartitions -> depends on each device. Usually at /dev/block/platform/dw_mmc/by-name/ there are listed by name linking to the real device.
Back up of the whole memory block (via adb)
Connect the phone in ADB mode and unlock the screen.
Open one Cygwin Terminal and enter (replace mmcblk0 if needed):
Code:
adb forward tcp:5555 tcp:5555
adb shell
su
/system/xbin/busybox nc -l -p 5555 -e /system/xbin/busybox dd if=/dev/block/mmcblk0
You will see the cursor blinking at the left. Now the phone is waiting to send the block over the network.
Open another Cygwin terminal and type:
Code:
adb forward tcp:5555 tcp:5555
cd /path/to/store/the/backup
nc 127.0.0.1 5555 | pv -i 0.5 > mmcblk0.raw
You will see how the image size is growing until it finishes. Now you have the whole phone backed up in raw format. You can see the contents of the GPT partition with gptfdisk tool, available for windows, linux and such. See official website and sourceforge to get it. You can do it the same from ClockWorkMod Recovery but you have to mount first the /system partition since the busybox included with clockworkmod does not come with netcat and you have to use the one from the system partition.
With further linux tools you could edit or extract single partitions from the whole block.
You can use adb via wifi as well with applications like WiFi ADB.
Back up of the whole memory block (via wifi)
Original post: [Q] Nandroid directly to computer w/o sdcard
We need to install a FTP server on the computer or the other device, configure a user with a password if we want to, and set some port. It uses by default 21 but this example uses 40. We must set a home dir for the user with write permissions.
Usually is a good idea to put myfifo in /cache not in /data because we may overwrite sensitive data in case we want to use that raw image for data recovery.
Open one Cygwin terminal
Code:
adb shell
su
mkfifo /cache/myfifo
ftpput -v -u user -p pass -P 40 COMPUTER_IP block.raw /cache/myfifo
Open another Cygwin terminal
Code:
adb shell
su
dd if=/dev/block/mmcblk0p12 of=/cache/myfifo
Tips:
- Fifos only can be made on linux native filesystems, for example on a FAT partition is not possible.
- Reading from a partition does not modify it.
Now check on Filezilla Server the speed
Back up of the whole memory block (USB tethering, Wifi tethering)
To use tethering you have to disconnect the computer from all networks and connect it only to the phone with the type of connection you want.
Once you connect it, you can view the IP of the computer and the IP of the phone from connection properties. The ip is the computer ip and the gateway is the phone's ip.
Wifi Tethering: Computer <---Wifi---> Phone <---3G---> Internet
USB Tethering:
Computer <---USB---> Phone <---Wifi---> Internet
Conputer <---USB---> Phone <---3G---> Internet
This is exactly the same as via wifi, except that the transfer speed is much higher because the computer and the phone are directly connected, instead of using a router as a gateway. In this case, the gateway is the phone. USB tethering has the highest transfer rate.
Back up of a single partition (raw = every bit of the partition)
It is exactly the same as the the previous but replacing mmcblk0 by the corresponding partition. You can use in this particular case several software to read the partition from windows, depending on partition filesystem: DiskInternals Linux Reader, Ext2Read, Ext2 File System Driver for Windows, Ext4Explore, plugin for Total Commander and ImDisk Virtual Disk Driver. You can also use recovery software on individual partitions like Recuva in combination with VHD Tool or command line tools included with operating systems.
Back up of a single partition (tar = only files and folders)
In this case, you need the partition mounted. To see the list of mounted partitions type on Cygwin Terminal
Code:
adb shell mount
Now you need to know where is mounted the partition you want to backup, for example the firmware is mounted on /system, which is the ROM.
In this case you will have to open three terminals, because of android limitations:
Open one Cygwin terminal and create a fifo, in /cache, for example, and redirect the tar there
Code:
adb forward tcp:5555 tcp:5555
adb shell
su
/system/xbin/busybox mkfifo /cache/myfifo
/system/xbin/busybox tar -cvf /cache/myfifo /system
We have to do it this way because redirecting the tar to stdout (with - ) is broken on android and will corrupt the tar file.
Open a second Cygwin terminal and type:
Code:
adb forward tcp:5555 tcp:5555
adb shell
su
/system/xbin/busybox nc -l -p 5555 -e /system/xbin/busybox cat /cache/myfifo
Open a third Cygwin terminal and type:
Code:
adb forward tcp:5555 tcp:5555
cd /path/to/store/the/backup
nc 127.0.0.1 5555 | pv -i 0.5 > system.tar
You can browse the tar file with Winrar, Total Commander, PeaZip and almost any compression tool. Note that you shouldn't extract files or edit it since the tar format saves the permission and owner data for each file, that is lost when extracted to FAT / NTFS partitions and you will mess things when restoring.
LINKS
[GUIDE] Internal Memory Data Recovery - Yes We Can!
How to Create and Attach a Virtual Hard Disk in Windows 7
[Guide] Types of Android backups
mohsyn said:
On newer android versions (Im on 7.2) data folder has a folder media which is link to sdcard and one ends up backing up entire sd card. I had a 64gb backup which wasn't necessary
In order to avoid skipping the media folder i had to do some trial and error because busybox tar command is not completely the same as GNU tar.
Would appreciate if you can mention it in the mail guide to use the following command to backup /data folder without copying sdcard files
In first terminal
tar cv --exclude data/media/0 -f /cache/myfifo /data
in 3rd terminal
nc 127.0.0.1 5555 | pv -i 0.5 > data.tar
no change in second terminal
Cheers
Click to expand...
Click to collapse
Umm...how to restore back from computer?
Sent from MARVEL
I am a little new to this, I have installed Android sdk and i am able to see my device by using "adb devices" , i have also installed Cygwin, now i want to backup whole phone memory block so i tried executing the first line on cygin "adb forward tcp:5555 tcp:5555" i get an error saying -bash: adb :command not found.
I am sorry if i am missing any thing, please guide me, and also what do you mean by "download Cygwin, and install with it netcat, pv and util-linux"
Thanx a ton !!
aunriz said:
I am a little new to this, I have installed Android sdk and i am able to see my device by using "adb devices" , i have also installed Cygwin, now i want to backup whole phone memory block so i tried executing the first line on cygin "adb forward tcp:5555 tcp:5555" i get an error saying -bash: adb :command not found.
I am sorry if i am missing any thing, please guide me, and also what do you mean by "download Cygwin, and install with it netcat, pv and util-linux"
Thanx a ton !!
Click to expand...
Click to collapse
You've done almost everything! But you skipped the section "make sure adb is in your path"
Probably you have adb.exe in the path
Code:
C:\Program Files (x86)\android-sdk\platform-tools\adb.exe
So you have to just add it to the Cygwin's path (would be better if you had added it earlier to the windows' path and cygwin will import it automatically but it is ok)
Code:
export PATH="/cygdrive/c/Program Files (x86)/android-sdk/platform-tools":$PATH
Remember to backup the path previously if you want.
Code:
echo $PATH > mypathbackup.txt
scandiun said:
You've done almost everything! But you skipped the section "make sure adb is in your path"
Probably you have adb.exe in the path
Code:
C:\Program Files (x86)\android-sdk\platform-tools\adb.exe
So you have to just add it to the Cygwin's path (would be better if you had added it earlier to the windows' path and cygwin will import it automatically but it is ok)
Code:
export PATH="/cygdrive/c/Program Files (x86)/android-sdk/platform-tools":$PATH
Remember to backup the path previously if you want.
Code:
echo $PATH > mypathbackup.txt
Click to expand...
Click to collapse
Thanks for replying but i cant seem to run the 3rd line , see this
[email protected] ~
$ adb forward tcp:5555 tcp:5555
[email protected] ~
$ adb shell
$ /system/xbin/busybox nc -l -p 5555 -e /system/xbin/busybox dd if=/dev/block/mmcblk0
reloc_library[1311]: 10182 cannot locate 'android_reboot'...
CANNOT LINK EXECUTABLE
i hav sucessfully installed busybox v1.14.3, i am not sure what is causing the problem
EDIT:
i found that my directory ws system/bin instead of xbin
so i changed it and first part worked correctly, now i cant seem to get the second part
[email protected] ~
$ adb forward tcp:5555 tcp:5555
[email protected] ~
$ cd c:/
[email protected] /cygdrive/c
$ nc 127.0.0.1 5555 | pv -i 0.5 > mmcblk0.raw
-bash: nc: command not found
-bash: pv: command not found
aunriz said:
[email protected] /cygdrive/c
$ nc 127.0.0.1 5555 | pv -i 0.5 > mmcblk0.raw
-bash: nc: command not found
-bash: pv: command not found
Click to expand...
Click to collapse
You don't have installed pv and netcat on cygwin. Run the setup.exe and install them.
If you run
Code:
whereis pv
whereis nc
should give you some path (in cygwin) but applies similar inside android.
scandiun said:
You don't have installed pv and netcat on cygwin. Run the setup.exe and install them.
If you run
Code:
whereis pv
whereis nc
should give you some path (in cygwin) but applies similar inside android.
Click to expand...
Click to collapse
Now i hav installed cv and nc and commands run sucessfully, but i get the raw file as just 1kb
First terminal:
[email protected] ~
$ adb forward tcp:5555 tcp:5555
adb shell
[email protected] ~
$ adb shell
$ /system/bin/busybox nc -l -p 5555 -e /system/bin/busybox dd if=/dev/block/mmcblk0
/system/bin/busybox nc -l -p 5555 -e /system/bin/busybox dd if=/dev/block/mmcblk0
$
second terminal:
[email protected] ~
$ adb forward tcp:5555 tcp:5555
[email protected] ~
$ cd c:/
[email protected] /cygdrive/c
$ nc 127.0.0.1 5555 | pv -i 0.5 > mmcblk0.raw
55 B 0:00:00 [10.7kiB/s] [<=> ]
[email protected]
No idea what you may be doing wrong
Listen, I appreciate the guide, and it being basically the only one which popped up in google results, I can't gripe too much, but... you really, really need to make it more clear.
The point of a guide is to help a large group of people with varying degrees of knowledge (and if it's a guide targeted at a specific group of people, i.e tech savvy, then it needs to be indicated as such).
With that working definition in place, it follows that you should be as specific as possible; think of *everything*. By doing so, you not only avoid headaches for the people reading the guide, but for yourself as well since you don't have to reply to comments which might've otherwise been avoided.
I would post a question, but I'll probably have figured this out (with a good 1+ hours of searching no doubt) before anyone responds.
Here are some examples of what could be more specific:
"ADB installed." - what is ADB? Where's the link? It's not reasonable to assume people use these tools on a regular basis or remember them.
"You can push parted with GPT support to your device and see all information on a partition or block." - okay, so we know what it does but not how to install it or use it.
"ADB mode" - is this important? What is it? Not sure because it was glossed over.
These are just some examples. It's not the most horrendous trespass ever committed, but definitely annoying. Just spell it out from one step to the next, it works far better than topics with subheadings and unintuitive concepts being assumed as general knowledge on the behalf of noobs like me.
Edit: I'm just going to take everything off my SD card, use nandroid, and then copy the nandroid backup to computer as well. Please improve the guide, thanks.
Greatly appreciate this!
For me, a long-time UNIX and Linux administrator, this little guide was a breath of fresh air. Scandiun, *Thank You* for putting it together. It makes perfect sense to me -- just treat the phone as the linux machine it is. I'm becoming convinced that most of the more recent "developers" hanging around the android community have never used a linux machine before -- they don't seem to know what's going on, they go way out of their way to write overkill tools to do things clumsily that can already be done cleanly and quickly from the command line, and then they wrap those tools in so much mystery, black magic, and script-kiddie terminology that I can't figure out what they do either, and I certainly don't trust them doing things to my phone.
For example, I've got a new Galaxy S3, and just wasted a whole day digging around on xda, reviewing all of the "kewl rooting mods" until I got sick of it. Why the *heck* are people flashing entire partitions just to install a setuid /system/xbin/su on these devices? The rooting method I wound up using was dirt simple -- just find an rc exploit and use it to install an 'su' binary, by typing a few commands via adb. I used a variation of the exploit mentioned in http://seclists.org/fulldisclosure/2012/Aug/171, and elaborated in http://forum.xda-developers.com/showthread.php?t=1790104, http://forum.xda-developers.com/showthread.php?t=1792342, http://galaxys3root.com/galaxy-s3-root/how-to-root-u-s-canadian-dual-core-galaxy-s3-on-mac-osx/, and http://forum.xda-developers.com/showthread.php?t=1827518. If you are a UNIX person, you'll recognize what's going on with that exploit and be able to come up with something that suits your own needs. If you aren't a UNIX person, then you'll be completely lost. Sorta like this guide.
For anyone who doesn't yet know what adb is, or who's never used standard UNIX/Linux tools like dd, netcat, gparted, or busybox, I agree that this guide is not only not going to help you, but may actually aid you in shooting yourself in the foot with extreme efficiency. But please don't criticize or nag the OP in return for helpful advice freely given. You won't learn much about UNIX tools on an Android-related web site in any case. I recommend starting with a Linux systems administration book -- the Nemeth series is always good. But if you do take that route, you need to expect to take time to learn the basics.
Absolutely beautiful!
Thank you for this work. I was able to recover deleted files from my Galaxy Nexus' internal memory using this technique. I made a [GUIDE] using most of what you accomplished here: http://forum.xda-developers.com/showthread.php?p=34185439
Thank you, thank you, thank you! It can't be said enough. I had family photos that I would not have been able to reproduce. Much love to you and yours!
:good: :highfive: :victory:
so did anyone dare to restore the drive (all of storage, everything !)? without bricking the thing ?
mai77 said:
so did anyone dare to restore the drive? w.o bricking the thing ?
Click to expand...
Click to collapse
What drive? A partition?
scandiun said:
If you are using Linux / OS X you have native tools, for Windows download Cygwin, and install with it netcat, pv and util-linux. Get them from Cygwin's setup.exe
Click to expand...
Click to collapse
netcat is obsolete (mark to even find it) install net / nc instead
---------- Post added at 01:03 PM ---------- Previous post was at 01:03 PM ----------
scandiun said:
What drive? A partition?
Click to expand...
Click to collapse
all of storage I mean. the full monty ...
----------------------
parted seems to not work fully with Samsung galaxy Y = SGY proprietary rfs filesystem
on SGY mmcblk0 gives you the sd card, not internal storage with android.
backing up my sd card was a thing I could even do before I read this (lol)
mai77 said:
netcat is obsolete (mark to even find it) install net / nc instead
Click to expand...
Click to collapse
nc is an abbreviation for netcat. On Cygwin, you choose to install either, but for the original, written by the *Hobbit*, that allows direct execution of commands with -e and -t, you have to uncheck "Hide obsolete packages" on Cygwin's setup.exe.
The two of them are here:
Netcat 1.10 (netcat.traditional): http://www.netgull.com/cygwin/release-legacy/netcat/
Netcat 1.107 (netcat.openbsd): http://www.netgull.com/cygwin/release/nc/
mai77 said:
parted seems to not work fully with Samsung galaxy Y = SGY proprietary rfs filesystem
on SGY mmcblk0 gives you the sd card, not internal storage with android.
backing up my sd card was a thing I could even do before I read this (lol)
Click to expand...
Click to collapse
Can you post where is your whole memory block then or even the PIT file for that phone? You have an example here:
[Info] List of Samsung Galaxy S2 GT-I9100 devices and partitions
scandiun said:
Can you post where is your whole memory block then or even the PIT file for that phone? You have an example here:
[Info] List of Samsung Galaxy S2 GT-I9100 devices and partitions
Click to expand...
Click to collapse
I don't know where the "whole memory block" is or what it is. is it internal storage = NAND ?
here is the pit file:
mai77 said:
I don't know where the "whole memory block" is or what it is. is it internal storage = NAND ?
Click to expand...
Click to collapse
Yes it is the NAND. See your pit analysis here:
[INFO] Samsung Galaxy Y GT-S5360 PIT File Analysis
OK
scandiun said:
Yes it is the NAND. See your pit analysis here:
[INFO] Samsung Galaxy Y GT-S5360 PIT File Analysis
Click to expand...
Click to collapse
very interesting tool.
but how do I backup NAND in one piece on SGY ?
mmcblk0 = sd card
???blk0 = NAND
it must be somewhere ...
mai77 said:
but how do I backup NAND in one piece on SGY ?
mmcblk0 = sd card
???blk0 = NAND
it must be somewhere ...
Click to expand...
Click to collapse
Is almost sure that is under /dev/block. Please post the output of
Code:
ls -lR /dev/block
Why?
MicroSD cards are traditionally formatted using ExFAT filesystem. The trouble is that while universally compatible, ExFAT is rather primitive filesystem prone to data loss, and poor speed. Linux ext4 on the contrary is highly reliable and very fast.
Trouble is that, and I quote, "Android supports devices with external storage, which is defined to be a case-insensitive and permissionless filesystem." (see http://source.android.com/devices/tech/storage/)
Well that pretty much narrows it down to dumb stuff like ExFAT.
Note: As of JB (Android 4.1) default umask is 077, which means that files created by apps on the ext4 formatted SD card will only be readable by the same apps, unless you manually update permissions. See this thread for more: http://forum.xda-developers.com/showthread.php?t=889471&page=5
The good news is that Android has Linux at its core, which naturally supports ext4, and actually all of the internal storage is (or will be in near future) formatted this way. The design limitation mentioned above is somewhat artificial and is enforced by
restricted functionality of funky little daemon, called vold. The sole purpose of vold is not monitor external storage,
detect filesystem on it, mount it as specified in /etc/vold.fstab (or vold.xxx in Android 4.3), and then report to the Volume Manager.Volume Manager in turn notifies the MTP application, and all other apps, displays icons and handles rest of user-visible stuff.
Stock Android vold only supports ExFAT/vfat filesystem. It has been improved in Cyanogenmod to support ext4 and NTFS filesystems, but for those of us stuck with OEM Android this goodness in unavailable. In my experience simply re-building vold from CM as part of AOSP,
while yields an executable, this executable results in a boot loop for an unclear reason.
All hope lost seemingly, yet there is a silver lining.
Silver Lining?
If MicroSD card is mounted manually in the way that vold can see it, re-running vold will properly report it to the Volume Manager and it will be recognized and utilized by apps.
In theory this is easy to accomplish on any rooted device, in practice there are a number of obstacles:
On a locked device, it is not possible to update init script to run the commands at system bootup.
Since Android 4.2, mount propagation no longer work (as described here http://forum.xda-developers.com/showthread.php?p=36889027),
so if sdcard is mounted in terminal, vold will still not see it. Hence the mount operation has to be done in adb.
Furthermore in Android 4.2.2, running adb on localhost is broken as a result of it loosing its private key.
See here https://code.google.com/p/android/issues/detail?id=48126 for more.
The solution?
Pre-requisites:
Rooted device (don't have to be unlocked) with USB debugging enabled.
MicroSD card formatted as ext4 (inserted)
Terminal app, such as Android Terminal Emulator https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en
Familiarity with adb.
Step 1 - Fix adb localhost.
Open terminal and type the commands:
Code:
su
setprop service.adb.tcp.port 5555
adb kill-server
stop adbd
start adbd
HOME=/sdcard adb start-server
adb connect localhost
adb -s localhost:5555 shell
exit
stop adbd
cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys
start adbd
Step 2 - Install scripts.
Please note that the script msd2.sh has to be modified if your device uses different partition names.
To get list of partition names available run command:
Code:
adb shell cat /proc/partitions
There are 3 (very simple) scripts:
sd.sh is just a convenience so that you don't have to type su everytime.
It calls msd1.sh which takes care of starting localhost adb in a reliable way.
It then executes msd2.sh in adb shell, which actually does the mounting trickery.
To install scripts, download the zip file below, open terminal, unzip the archive and change into msd directory.
Then connect your phone to your PC and run the following commands:
Code:
adb push sd.sh /sdcard/sd.sh
adb push msd1.sh /sdcard/msd1.sh
adb push msd2.sh /sdcard/msd2.sh
adb shell
su
mount -o rw,remount /system
cp sd.sh /system/xbin/
cp msd1.sh /system/xbin/
cp msd2.sh /system/xbin/
chmod 755 /system/xbin/*.sh
mount -o ro,remount /system
exit
exit
Step 3 - Profit.
In terminal app run command:
Code:
sd.sh
There will be some messages in notifications bar and then you will be asked if it is ok to restart MTP application. Click Ok.
That should be it.
Note that this last command will have to be executed every time device reboots (see obstacle #1).
You can automate it using Script Manager app from marketplace. In this case, ask Script Manager to run msd1.sh instead, marking it as Root script.
Disclaimers
I've developed and tested this procedure on Samsung Galaxy S4 Active phone from ATT.
Should work for any other Android 4.2 device.
The steps outlined are non-destructive if done properly and should not affect any other functionality, yet obviously I do not assume any responsibility for you damaging your device in the process.
It is a good idea to read the linked articles before performing the procedure, to get a better understanding of what is actually going on.
Motorola Droid 4 (xt894)
Hello!
if you have a Motorola Droid 4 you need to change the third row in "msd2.sh" from
"mount -t ext4 /dev/block/mmcblk1p1 /storage/extSdCard && sleep 5 && /system/bin/vold" to
"mount -t ext4 /dev/block/mmcblk0p1 /storage/sdcard1 && sleep 5 && /system/bin/vold"
in order to get it to work, thanks for the guide!
Best Regards
/ Rasmus
It works well on TW based MIUI
It works well on TW based MIUI, so many many thanks!!!
But I still have the permission problems mentioned.
AOSP based MIUI is ext4 compatibile out of the box, and without permission problems.
This trick is amazing, but the permission issue make it useless ...
I can not shot a picture and than have to manually change the permission of tehf ile in order to view it on the gallery ...
Is there a definititive solution?
My lg l3 e400..sd card not mounted
to sashavasco:
sir, pls help configuring my phone...the codes u've given at the top part seems to work accordingly..but after when i entered the command
"cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys"
it says: "no such file or directory"
can you point out the problem of the device plss...
i appriciate your response..
my phone s LG L3 E400..CYANOGENMOD 9..external sd wont mount on my device
sashavasko said:
Why?
Step 1 - Fix adb localhost.
Open terminal and type the commands:
Code:
su
setprop service.adb.tcp.port 5555
adb kill-server
stop adbd
start adbd
HOME=/sdcard adb start-server
adb connect localhost
adb -s localhost:5555 shell
exit
stop adbd
cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys
start adbd
Click to expand...
Click to collapse
I am getting an error here: adb -s localhost:5555 shell stating device offline. I've done this 6 times now, and it's always the same error
Galaxy S4 i337 NC1 Rooted
kevp75 said:
I am getting an error here: adb -s localhost:5555 shell stating device offline. I've done this 6 times now, and it's always the same error
Galaxy S4 i337 NC1 Rooted
Click to expand...
Click to collapse
the same for me...
same error "unable to connect to local host:5555"
rooted Asus memo-7 build ME173X_US_user_4.2.404152_20140714 release-keys. But thanks for the heads up on Cyanogenmod.
>>If MicroSD card is mounted manually in the way that vold can see it, re-running vold will properly report it to the Volume Manager and it will be recognized and utilized by apps.
Re-running vold crashes it ("Segmentation fault") if sdcard is already mounted in ext4. If not, it restarts gracefully.
Stock android 4.4.2. AFAIK, vold must inform userspace stuff that sdcard is available, without it, android do not see any sdcard at all...
What can be done here?
p.s. Is there anywhere patched or recompiled vold which supports ext4?
Gigionaytor said:
the same for me...
Click to expand...
Click to collapse
same here too. Please help.
ZeroBubble said:
same here too. Please help.
Click to expand...
Click to collapse
Same error!
I had to modify terminal commands a bit to allow me to connect properly. Only moving the "start adbd" command down because the key needed to be appended to "adb_keys" before starting the service back up.
Code:
su
setprop service.adb.tcp.port 5555
adb kill-server
stop adbd
HOME=/sdcard adb start-server
cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys
start adbd
adb connect localhost
adb -s localhost:5555 shell
exit
I'm also still dealing with the "msd1.sh" script execution consistently asking about my fingerprint and not remembering it. If I don't press "continue" quick enough it claims the resource is busy, which prompted me to also change the msd1.sh script sleep from 2 to 5. I have gotten the notification that msd2.sh has been elevated, which seems like it ran, but my partition still doesn't get mounted, even though I've got the right one from the /proc/partitions output.
Another note, because I had BusyBox installed, I needed to prepend "busybox" (no quotes) to the mount command in the msd2.sh or else that wouldn't work either.
Anyone have thoughts?
I followed DemisesAngel suggestion. There was no error this time but nothing happens when running any of the 3 scripts. I tried mmcblk1 and mmcblk1p1, also changed microsd path to match, /MicroSD, but nothing works. Even with manual ext4 mount command ...
Clicking mount in settings still results in incompatible storage and file explorer shows no sdcard.
Edit: Set permissions, script will run but nothing mounts unsupported file system ...
Error directory already exist
I folllow the steps but i.think I meaaes up.
When u run through DemiseAngel scripts
At:
car /sdcard/.android/adbkey.pub >> /
Error:tmp-mkish:cant create /:Is a directory
To I attempt to find and rm it, or would that mess something up
Rca RCT677W22
I dont know if this thread is closed but I have one simple question, can I somehow partition sdcard and have a little space for music and other stuff, and to use ext4 partition alongside with this, lets say "visible" partition ( I mean on windows).
WrathBand said:
I dont know if this thread is closed but I have one simple question, can I somehow partition sdcard and have a little space for music and other stuff, and to use ext4 partition alongside with this, lets say "visible" partition ( I mean on windows).
Click to expand...
Click to collapse
First, I have been able to create a formatted partition of less than the full size of an SD card. I did this because my Android seems to have issues with anything larger than 16GB and all I had lying around was a 64GB. I did not try to do anything with the remaining space. Maybe it could work, maybe not. I would have my doubts.
Second, thanks for this discussion. Here is what "kind of" works on my Android 5.1 TV computer:
su -mm -c mount -t ext4 -o noatime /dev/block/mmcblk0p1 /storage/sdcard1 && sleep 5 && /system/bin/vold
chown -R root:sdcard_r /storage/sdcard1
chmod 771 /storage/sdcard1
I say "kind of" because this is still not seen as a true, external storage card by Android or file manager apps (and the like). However, all apps can read/write/traverse the folder tree and do what they need to. You do NOT have to be root except to do this. As things stand for me now, I have to re-issue this upon every re-start of Android. But using Tasker makes this pretty easy to accomplish.
long as a problem remains so do this thread ! . Well i am on 7.x and wonder if the op would post a method or even approach for getting a
Code:
ext4
partitioned sdcard so that vold is well aware of that and will mount sdcardfs on that giving all apps access to the partitions. I have 3 of these on my card .
Is there a method to auto mount ext4 partition on external SD that works on lineageOS 17.1 on S4 i9506?
I really can't seem to copy files off my moto g and on to the computer like a regular SD card, my files that are copied aren't visible on my desktop.
Sent from my XT1032 using xda app-developers app
Which OS do you have on your computer? On Windows I have no problem using MTP out of the box. On Ubuntu 13.10 I had to do some console jacking to get the thing work, but it is working well now.
debaj said:
Which OS do you have on your computer? On Windows I have no problem using MTP out of the box. On Ubuntu 13.10 I had to do some console jacking to get the thing work, but it is working well now.
Click to expand...
Click to collapse
nvm I tried it on my desktop and files transfer easily thx though
debaj said:
Which OS do you have on your computer? On Windows I have no problem using MTP out of the box. On Ubuntu 13.10 I had to do some console jacking to get the thing work, but it is working well now.
Click to expand...
Click to collapse
You used mtpfs?
manudo said:
You used mtpfs?
Click to expand...
Click to collapse
Yes, though I did not need to install any extra software, 13.10 comes preinstalled with everything you need. I did the following steps:
1. Create a mount point in the file system for the phone (in my case /media/motog/)
2. Uncomment the user_allow_other line in /etc/fuse.conf
3. Add my user to the "disk" group (debaj is my username):
Code:
usermod -a -G disk debaj
3. Get the model id by connecting the phone to the computer and running the mtp-detect command. You need the PID from the following snippet:
Code:
Listing raw device(s)
Device 0 (VID=22b8 and PID=2e76) is UNKNOWN.
(Don't forget to press ctrl+c after you get the PID since collecting all the info can take a long time and we need nothing from there)
4. Create a file named 99-android.rules in /etc/udev/rules.d/ with the following content:
Code:
ENV{ID_MODEL}=="XT1032", ENV{ID_MODEL_ID}=="2e76", ACTION=="add", RUN+="/usr/bin/sudo -u debaj /usr/local/sbin/go-mtpfs -allow-other=true /media/motog"
ENV{ID_MODEL}=="XT1032", ENV{ID_MODEL_ID}=="2e76", ACTION=="remove", RUN+="/bin/umount /media/motog"
5. Reboot (logging in and out is not enough, maybe there is some commands which reload the fuse config and the udev rules but I did not bother to find them). I had a very good fight to get the thing working, I hope I didn't miss any steps.
debaj said:
Yes, though I did not need to install any extra software, 13.10 comes preinstalled with everything you need. I did the following steps:
1. Create a mount point in the file system for the phone (in my case /media/motog/)
2. Uncomment the user_allow_other line in /etc/fuse.conf
3. Add my user to the "disk" group (debaj is my username):
Code:
usermod -a -G disk debaj
3. Get the model id by connecting the phone to the computer and running the mtp-detect command. You need the PID from the following snippet:
Code:
Listing raw device(s)
Device 0 (VID=22b8 and PID=2e76) is UNKNOWN.
(Don't forget to press ctrl+c after you get the PID since collecting all the info can take a long time and we need nothing from there)
4. Create a file named 99-android.rules in /etc/udev/rules.d/ with the following content:
Code:
ENV{ID_MODEL}=="XT1032", ENV{ID_MODEL_ID}=="2e76", ACTION=="add", RUN+="/usr/bin/sudo -u debaj /usr/local/sbin/go-mtpfs -allow-other=true /media/motog"
ENV{ID_MODEL}=="XT1032", ENV{ID_MODEL_ID}=="2e76", ACTION=="remove", RUN+="/bin/umount /media/motog"
5. Reboot (logging in and out is not enough, maybe there is some commands which reload the fuse config and the udev rules but I did not bother to find them). I had a very good fight to get the thing working, I hope I didn't miss any steps.
Click to expand...
Click to collapse
Dude, haha. I asked if you used mtpfs not how to use it but thanks anyway.
Sent from my XT1034 using XDA Premium 4 mobile app