ฉันจะเมาท์การ์ด SD ในรูปแบบ ext4 ที่มีสิทธิ์ที่ถูกต้อง (พร้อมรูท) ได้อย่างไร


9

ฉันเห็นบางคนกล่าวถึงที่นี่ในการสร้างการ์ด SD ในรูปแบบ ext4 แต่ไม่มีคำแนะนำ คำถามที่เกี่ยวข้องอย่างใกล้ชิดนี้แสดงให้เห็นว่าไม่มีวิธีการทำ แต่คำถามของฉันแตกต่างจากที่โทรศัพท์ของฉันมีการรูตโดยเฉพาะ

ฉันฟอร์แมตการ์ดของฉันเป็น 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

ฉันใช้ Samsung Galaxy S3 กับ Cyanogenmod 10.2.0-i9300

== == แก้ไข

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

นั่นคือทั้งหมดที่ ไม่มีsdcard1_realอยู่ในไดเรกทอรีนี้ดังนั้นฉันคิดว่าสคริปต์ล้มเหลว

== == EDIT2

ฉันพยายามแก้ไขสคริปต์เพื่อแก้ไขปัญหา สคริปต์เริ่มต้นที่ดี แต่แล้วล้มเหลวบนที่มีข้อผิดพลาดmkdir "$REALMNT"/data/local/userinit.sh[6]: : not found

== == edit3

ฉันรู้ว่าสคริปต์ไม่ทำงานดังนั้นการแก้ไขอาจช่วยแก้คำถามของฉันได้ แต่ฉันคิดว่าสิ่งต่อไปนี้น่าสนใจ ฉันฟอร์แมตการ์ด SD ในคอมพิวเตอร์ Linux และถ่ายโอนไฟล์บางไฟล์ไป ข้อผิดพลาดในการอนุญาตเกิดขึ้นผิดปกติในไดเรกทอรีย่อยที่ฉันสร้างขึ้นเท่านั้น ในรูทของพาร์ติชัน (ผ่าน/storage/sdcard1) ฉันมีสิทธิ์เขียนอยู่แล้ว


1
เป็นรากโปรดดำเนินการและls -l /mnt/fuse/ ls -l /mnt/fuse/sdcard1_realจากนั้นแก้ไขคำถามของคุณเพื่อรวมผลลัพธ์ ฉันเดาว่า "การอนุญาตไฟล์ผิด" - สำหรับเมานต์หรือสำหรับfoo/ไดเรกทอรีบนการ์ด โปรดจำไว้ว่า ext4 รองรับการอนุญาตไฟล์ * nix แบบเต็มรวม ผู้ใช้และกลุ่ม
Izzy

คุณพิมพ์suเทอร์มินัลเพื่อรับรูท คุณอาจต้องยืนยันการให้สิทธิ์บนโทรศัพท์หากคุณทำมันเป็นครั้งแรก
Chahk

อาจเป็นสคริปต์ที่ล้มเหลวหรือไม่ได้ดำเนินการเลย คุณอาจต้องการเพิ่มการแก้ไขข้อบกพร่องบางอย่างเช่น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

@Izzy touchแสดงให้เห็นว่าสคริปต์กำลังทำงานอยู่ ฉันพยายามรันสคริปต์ด้วยตนเองsu /data/local/userinit.shแต่ล้มเหลว ฉันลองsu echo fooและได้รับข้อผิดพลาดที่คล้ายกัน: Unknown id: echo.
Sparhawk

สำหรับ EDIT3 ของคุณดูความคิดเห็นแรกของฉัน: ext4 รองรับสิทธิ์การใช้ไฟล์ * nix แบบเต็มรวมทั้ง ผู้ใช้และกลุ่ม คุณได้สร้างไดเรกทอรีเหล่านั้นด้วยผู้ใช้ที่ไม่มีอยู่ในอุปกรณ์ Android ของคุณดังนั้นพวกเขาจึงอยู่ใน "ผู้ใช้ที่ไม่รู้จัก / กลุ่มที่ไม่รู้จัก" หากคุณไม่อนุญาตให้เขียนเพื่อ "โลก" รูทเท่านั้นที่สามารถเขียนได้ คุณควรทำความคุ้นเคยกับพื้นฐาน * nix เหล่านั้นเมื่อใช้ระบบไฟล์ดังกล่าวบนสื่อพกพา;) สำหรับสคริปต์ฉันขอแนะนำให้เพิ่มข้อมูลการดีบักเพิ่มเติมเช่นการใช้echoเพื่อแสดงผลแต่ละคำสั่งก่อนที่จะดำเนินการ2>>.
Izzy

คำตอบ:


6

เรื่องนี้ได้รับการแก้ไขที่คาดคะเนเมื่อหลายเดือนก่อน แต่ผู้คนยังคงรายงานปัญหาอยู่ ฉันสามารถอ่านรายการต่าง ๆ บนการ์ด แต่ไม่ได้รับอนุญาตให้เขียน การแก้ไขปัญหานั้นผมรวมกลยุทธ์จากไม่กี่ แหล่ง

  1. พาร์ติชั่นการ์ดพร้อมตารางพาร์ติชั่น MS-DOS และระบบไฟล์ ext4 ฉันใช้ GParted บนคอมพิวเตอร์เดสก์ท็อป (Linux) ของฉัน
  2. ใส่การ์ดลงในโทรศัพท์ของคุณ (คุณอาจจะไม่สามารถเข้าถึงการเขียนได้ในขณะนี้)
  3. เปิดเทอร์มินัลอีมูเลเตอร์ติดตั้งโดยค่าเริ่มต้นใน Cyanogenmod
  4. พิมพ์ข้อความต่อไปนี้ (ฉันแนะนำWiFi Keyboardสำหรับบล็อกข้อความขนาดใหญ่) ให้สิทธิ์รูทเครื่องจำลองเมื่อมีการร้องขอ

$และ#บ่งชี้แจ้งจึงไม่พิมพ์พวกเขาใน

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

นี่เป็นการเปลี่ยนแปลงการอนุญาตของการ์ด SD เจ้าของและกลุ่มเปลี่ยนจากsystemเป็นmedia_rwและยังให้สิทธิ์เข้าถึงการเขียนกลุ่ม


ต้องการ -R สำหรับ recursif chown -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi

1

ไม่แน่ใจว่าเป็นความช่วยเหลือใด ๆ หรือไม่ แต่อาจเป็นปัญหาได้ว่าคุณพยายามจะเมาในที่ที่ผิดหรือเปล่า? นี่เป็นสคริปต์การทำงานของฉันที่ทำงานกับ S3 mini พร้อม CM11:

#!/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

@ LuisA.Florit ฉันไม่แน่ใจว่าคุณตั้งใจจะตอบคำตอบนี้หรือไม่ อย่างไรก็ตามฉันใช้ 11-20140804-SNAPSHOT-M9-i9300 ผมได้โพสต์ข้อมูลเพิ่มเติมในคำตอบอื่น
Sparhawk

@Sparhawk: การ์ดของฉันยังไม่ได้ติดตั้งและขั้นตอนการติดตั้งในการตั้งค่าล้มเหลว อาจเป็นปัญหาที่เกี่ยวข้องกับคำถามของฉันที่นี่ ( suล้มเหลวในการติดตั้ง): android.stackexchange.com/questions/82089/ … 'ฉันใช้ cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip
Luis A. Florit

@ LuisA.Florit ไม่แน่ใจจริงๆ อาจถามคำถามใหม่?
Sparhawk

0

มีคำตอบที่โพสต์โดยadasdadasdที่ฉันต้องการยอมรับ แต่ถูกลบไปแล้ว ฉันจะทำซ้ำด้านล่างและยอมรับคำตอบของฉัน แต่ถ้า adasdadasd resurfaces โปรด repost และฉันจะลบมันและยอมรับของคุณ

https://jira.cyanogenmod.org/browse/CYAN-332

https://github.com/CyanogenMod/android_packages_providers_MediaProvider/commit/faf3f77b9222554227740aed8127714ea9e3f407

แก้ไขตามค่าเริ่มต้นหรือไม่ การเปลี่ยนแปลงใหม่ใน GitHub


0

ที่นี่ simpeline

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

และที่นี่เขียนได้ ext4 ใน SD ภายนอก

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

คุณสามารถเปลี่ยน "extSdCard" เช่น "sdcard1" ซึ่งเป็นที่ตั้งของ sdcard ภายนอกของคุณ

Iam ใช้ stockrom กับ Kingroot แต่ฉันลอง Supersu กับปัญหาในการติดตั้งระบบไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.