With ES Explorer not to be trusted any more, I needed another solution for easy access to my SMB/CIFS network shares. Mounting a SMB/CIFS network share in Android-x86 (version 9 R2) turned out to be a lot easier than any of the solutions I found on StackExchange. I did not need to install any software or app,
mount -t cifs works just out of the box.
The problem is that I cannot make this mount visible for normal user. Only root or superuser, whatever it is called in Android, sees and can use the mounted file system, whereas the normal user keeps seeing the mountpoint as a directory of Android's own filesystem.
To clarify, have a look at this terminal session. In this example, Android is running in a Virtual Box VM, the IP address is that of the host itself. I make a subdirectory in /sdcard/Download/ to mount on, with the intent of easily moving files from Download to the share mounted on that subdirectory. I mount the share as superuser, with appropriate options, and then, both as normal and as super user, list the subdirectory contents and stat the subdirectory :
$ cd "/$EXTERNAL_STORAGE"/Download/ # i.e. /sdcard/Download/ $ mkdir SERVER_SHARE $ touch SERVER_SHARE/"NOT THE MOUNTED SHARE" # a marker for the base directory $ su -c "mount -v -o username=guest,rw,noperm,iocharset=utf8 -t cifs //192.168.1.10/SHARE $PWD/SERVER_SHARE" $ ls SERVER_SHARE/ 'NOT THE MOUNTED SHARE' $ su -c "ls SERVER_SHARE" ... lists all the files on the share ... $ stat SERVER_SHARE Size: 4096 Blocks: 0 IO Block: 512 directory Device: 1dh/29d Inode: 409629 Links: 2 Access: (0770/drwxrwx---) Uid: ( 0/ root) Gid: ( 9997/everybody) ... $ su -c "stat SERVER_SHARE" Size: 0 Blocks: 0 IO Block: 512 directory Device: 1eh/30d Inode: 217 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) ...
You see the difference between normal and super user:
ls shows different directory contents because
stat says they see the subdirectory on a different Device. A possible explanation could be that the normal user has the file descriptor for the directory open, and keeps using that file descriptor and the contents it points to, even after some other file system is mounted over it. But that would probably not explain why exactly the same thing happens if I put the
mkdir inside the su command for the
For the time being, I can only access the mounted samba share of the VM host from the terminal, as super user, to copy files between the share and the Download folder. I have put the
mount commands in a script, and added the
touch command to mount the directory under the mountpoint as 'not the network share'.
My question is this: how do I make the mounted share visible to the normal user, so that I can use the Android apps like "Files" and other file managers to access it in a GUI.