【发布时间】:2015-04-12 13:24:27
【问题描述】:
我编写了以下 shell 脚本:
alias mount='/system/xbin/busybox mount'
set -e
set -x
MNT=sda1
function mkdir_ext() {
if [ ! -d $1 ]; then
mkdir -p $1
fi
chown $2 $1
chmod $3 $1
}
mkdir_ext /storage/emulated/$MNT root:media_rw 777
mount -t ext4 /dev/block/$MNT /storage/emulated/$MNT
mkdir_ext /data/media/$MNT root:media_rw 777
sdcard -u 1023 -g 1023 /storage/emulated/$MNT /data/media/$MNT
执行上述命令后,挂载报告:
root@NEO-X8:/sdcard # mount|grep sda
/dev/block/sda1 /storage/emulated/sda1 ext4 rw,seclabel,relatime,data=ordered 0 0
/dev/fuse /data/media/sda1 fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
我正在通过 ssh 远程工作,使用 rooted ssh/sftp daemon,当我以 root 身份登录时,我可以列出 /storage/emulated/sda1 中的文件。
据我了解,android 在设计上对文件系统不区分大小写,因此必须融合文件系统。
问题是,我在/data/media/sda1 中只看到一个空目录。更奇怪的是,如果我使用bash shell X 以root 身份从设备导航到/storage/emulated/sda1,我还会看到一个空目录。
我尝试了其他不同的应用程序,我也尝试使用 sdcard_rw 而不是 media_rw(使用 uid / gid 1015 而不是 1023),但没有任何效果。
如何让 ext4 为根深蒂固的 Minix NEO X8-H 上的所有应用程序工作?不能使用除 ext4 以外的任何东西,4TB 驱动器已经包含重要数据。附带说明一下,sda1 只是一个 1GB 的小分区。
【问题讨论】:
-
Android 和 ext4 都不区分大小写,尽管它用于“外部存储”之类的其他一些文件系统和仿真方案可能是这样。您可能会遇到这样一个事实,即 Android 上的每个进程祖先都有一组独特的挂载 - 因此您在从一个应用程序下降的 setuid 进程中所做的事情不会反映在另一个应用程序或 adb 中。
-
你是说所有应用都不能访问外接U盘吗?
-
不一定,但到目前为止,您的努力可能还没有为所有人安装它。 “mount”在无法访问的 shell 中作为输出给出了什么?
-
那些挂载点不会出现。那么您对解决方案有什么想法吗?
-
不,但至少我们知道问题出在哪里。在这一点上,可能值得阅读一下 Linux 中的每个进程挂载功能是如何工作的,因为这正是 Android 所利用的。