android - 如何在 Android 上挂载外部驱动器的 ext4 分区并使其对所有应用程序可用

标签 android linux

我编写了以下 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 中只看到一个空目录。更奇怪的是,如果我以 root 身份使用 bash shell X 从设备导航到 /storage/emulated/sda1 ,我还看到一个空目录。

我尝试过其他不同的应用程序,我也尝试过使用 sdcard_rw 而不是 media_rw (使用 uid/gid 1015 而不是 1023),没有任何效果。

如何让 ext4 适用于 root 的 Minix NEO X8-H 上的所有应用程序?使用 ext4 以外的任何东西都不是一种选择,4TB 驱动器已经包含重要数据。附带说明一下,sda1 只是一个 1GB 的小分区。

最佳答案

我假设您的设备已根据您目前所做的一切进行 root,因此不会深入探讨。虽然我不能确定这是你的问题,但我将解释我是如何解决类似问题的。

最近的 android 版本旨在提高设备安全性,现在正在使用(有点愚蠢)功能,使大多数进程执行的挂载对其他进程不可见。令人沮丧的是,解决这个问题是特定于设备的,但是 Minix NEO X8-H 似乎使用的是“ Vanilla ”风格的 android 源代码构建。因此,您很有可能使用 StickMount为了挂载 USB 内存棒,它应该能够全局挂载运行您的 ROM 支持的任何文件系统的 USB 设备(如果您之前已经挂载过它,它应该包括 ext4)。

我没有在你的设备上亲自测试过,所以不能保证它会工作,但在许多其他安卓设备上都取得了成功,所以这当然值得一试。

关于android - 如何在 Android 上挂载外部驱动器的 ext4 分区并使其对所有应用程序可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589969/

相关文章:

android - 换出 ListView 项目 View

php - 如何在AWS上将PHP脚本作为后台服务运行?

java - 需要从控制台运行 .jar 才能工作

linux - 列出多个目录内容及其路径

android - 如何解决java.lang.NullPointerException?

android - HttpURLConnection POST 参数无法正常工作

Android 深度链接和 singleInstance/singleTask

android - Gradle:创建具有所有依赖项的单个 JAR

linux - Bash:检查命令的输出

linux - 早期启动调度极其脆弱