如何安装具有正确权限(具有root用户)的ext4格式的SD卡?


9

我在这里看到有关创建ext4格式的SD卡的一些提及,但没有指导。这个密切相关的问题表明无法解决问题,但我的问题不同之处在于我的手机专门扎根。

我将卡格式化为ext4(GUID分区表);我的Cyanogenmod手机安装在/mnt/fuse/sdcard1。我按照此处的说明上安装/storage/sdcard1了以下脚本,将其安装在上/data/local/userinit.sh

#!/system/bin/sh
REALMNT=/mnt/fuse/sdcard1_real
if ! [ -d "$REALMNT" ]; then
  mkdir "$REALMNT" || exit 1
fi
mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 &

我重新启动并尝试复制文件(使用ES File Explorer)并将其粘贴到其父目录中,该操作失败:

/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).

实际上,我可以正常播放该文件,因此可以打开它。FWIW,当我尝试从原始安装点(/mnt/fuse/sdcard1)复制时,出现了稍微不同的错误:

Failed to copy the file bar.mp3

我正在使用带有Cyanogenmod 10.2.0-i9300的Samsung Galaxy S3。

==编辑==

su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw   2014-03-04 22:08 sdcard1

这就是全部了。sdcard1_real此目录中没有,所以我想脚本失败了吗?

== EDIT2 ==

我尝试修改脚本进行故障排除。该脚本可以正常运行,但是随后失败mkdir "$REALMNT"并显示error /data/local/userinit.sh[6]: : not found

== EDIT3 ==

我知道该脚本不起作用,因此修复它可能可以解决我的问题,但是我认为以下内容很有趣。我在Linux计算机上格式化了SD卡,并向其中传输了一些文件。奇怪的是,权限错误仅发生在我创建的子目录中。在分区的根目录(通过/storage/sdcard1),我已经具有写权限。


1
作为根用户,请执行ls -l /mnt/fuse/ls -l /mnt/fuse/sdcard1_real。然后编辑您的问题以包括结果。我的猜测是“错误的文件权限” –无论是安装还是foo/卡上的目录。请记住,ext4支持完整的* nix文件权限,包括。用户和组。
伊齐

您输入su终端以获取根。如果是第一次,您可能需要确认在电话上授予许可。
Chahk 2014年

脚本失败,或者根本不执行。您可能希望添加一些调试输出,例如echo Script executed > /mnt/fuse/sdcard1/test.log,并检查它是否正在运行。如果是这样,请从前到后,mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.log并检查错误消息。或手动执行脚本以查看:su /data/local/userinit.sh
伊齐

@Izzy touch显示脚本正在运行。我尝试使用手动执行脚本su /data/local/userinit.sh,但这失败了。我也尝试过su echo foo,并收到类似的错误:Unknown id: echo
Sparhawk

至于您的EDIT3,请参阅我的第一条评论:ext4支持完整的* nix文件权限,包括。用户和组。您已经使用Android设备上不存在的用户创建了这些目录,因此它们属于“未知用户/未知组”。如果您不授予对“ world”的写访问权限,则只有root可以在其​​中写。在便携式媒体上使用这样的文件系统时,您应该熟悉那些* nix基础知识;)至于脚本,我再次建议添加更多调试信息,例如echo用于在执行每个命令之前输出每个命令,并使用2>>
伊兹

Answers:


6

该问题据说是在几个月前解决的,但是人们仍在报告问题。我可以读取卡上的项目,但没有写权限。为了解决这个问题,我结合从战略的几个 来源

  1. 带有MS-DOS分区表和ext4文件系统的分区卡。我在(Linux)台式计算机上使用了GParted。
  2. 将卡插入手机。(您现在可能没有写访问权限。)
  3. 打开默认安装在Cyanogenmod中的终端仿真器
  4. 输入以下内容(对于大块文字,我建议使用WiFi键盘)。在请求仿真器时赋予其root特权。

$#表示提示,所以请不要输入他们进来。

$ su
# chown media_rw:media_rw /mnt/media_rw/sdcard1
# chmod g+w /mnt/media_rw/sdcard1

这将更改SD卡的权限。所有者和组从更改systemmedia_rw,并且还为组提供了写访问权限。


需要-R for recursif chown -R media_rw:media_rw / mnt / media_rw / sdcard1
m3asmi

1

不确定是否有帮助,但是可能的问题是您尝试将其安装在错误的位置?这是我的工作脚本,可在带有CM11的S3 mini上使用:

#!/system/bin/sh
REALMNT=/mnt/media_rw/sdcard1
if ! [ -d "$REALMNT" ]; then
mkdir "$REALMNT" || exit 1
fi
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 

REALMNT位置已经存在,因此当然从未调用过mkdir。并且media_rw / sdcard1已由media_rw拥有

我还必须更新/etc/permissions/platform.xml使其包含 <group id="media_rw"/><permission name="android.permission.WRITE_EXTERNAL_STORAGE">


谢谢。我有些放弃,因为我的脚本也消耗大量电池。由于它已固定在后备箱中,因此我不再烦恼其他解决方法。不过,谢谢您,并且+1。
Sparhawk

@Sparhawk:不确定您使用的是哪个CYM版本,但是我的SD卡没有自动安装。
Luis A. Florit 2014年

@ LuisA.Florit我不确定您是否要回复此答案。无论如何,我正在使用11-20140804-SNAPSHOT-M9-i9300。我在另一个答案中发布了更多信息。
Sparhawk

@Sparhawk:我的卡甚至都没有安装,并且“设置”中的安装过程失败。也许问题与我的问题有关(su无法挂载): android.stackexchange.com/questions/82089/… “我使用cm
mondrianwifi.zip。– Luis A. Florit 2014年

@ LuisA.Florit不确定。也许问一个新问题?
Sparhawk


0

在这里辛

#!/system/bin/sh
REALMNT="/mnt/media_rw/extSdCard"
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1     "$REALMNT"
sdcard "$REALMNT" /storage/extSdCard 1023 1023 &

在外部SD上可写的ext4

#!/system/bin/sh
chown media_rw:media_rw /mnt/media_rw/extSdCard
chmod g+w /mnt/media_rw/extSdCard

您可以更改安装了外部sdcard的“ extSdCard”(如“ sdcard1”)

Iam在Kingroot中使用了stockrom,但我尝试用Supersu来挂载文件系统

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.