Bagaimana saya bisa memasang kartu SD berformat ext4 dengan izin yang benar (dengan root)?

9

Saya melihat beberapa menyebutkan di sini tentang membuat kartu SD berformat ext4, tetapi tidak ada panduan. Pertanyaan yang berkaitan erat ini menyarankan tidak ada cara untuk melakukannya, tetapi pertanyaan saya berbeda karena ponsel saya secara khusus di-root.

Saya memformat kartu saya sebagai ext4 (GUID partisi-table); ponsel Cyanogenmod saya memasangnya di /mnt/fuse/sdcard1. Saya mengikuti instruksi di sini untuk memasang kartu di /storage/sdcard1, dengan membuat skrip berikut di/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 &

Saya memulai kembali dan mencoba menyalin file (menggunakan ES File Explorer) dan menempelkannya ke direktori induknya, yang gagal:

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

Saya benar-benar dapat memutar file dengan baik, jadi saya bisa membukanya. FWIW, ketika saya mencoba menyalin dari titik mount asli ( /mnt/fuse/sdcard1), saya mendapatkan kesalahan yang sedikit berbeda:

Failed to copy the file bar.mp3

Saya menggunakan Samsung Galaxy S3 dengan Cyanogenmod 10.2.0-i9300.

== EDIT ==

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

Itu saja. Tidak ada sdcard1_realdalam direktori ini, jadi saya kira skripnya gagal?

== EDIT2 ==

Saya mencoba memodifikasi skrip untuk memecahkan masalah. Script dimulai dengan baik, tetapi kemudian gagal mkdir "$REALMNT"dengan kesalahan /data/local/userinit.sh[6]: : not found.

== EDIT3 ==

Saya tahu bahwa skrip tidak berfungsi, jadi memperbaikinya dapat menyelesaikan pertanyaan saya, tetapi saya pikir yang berikut ini menarik. Saya memformat kartu SD saya di komputer Linux saya, dan mentransfer beberapa file ke dalamnya. Anehnya, kesalahan izin hanya terjadi di subdirektori yang saya buat. Di root partisi (via /storage/sdcard1), saya sudah memiliki izin menulis.

Sparhawk
sumber
1
Sebagai root, jalankan ls -l /mnt/fuse/dan ls -l /mnt/fuse/sdcard1_real. Kemudian edit pertanyaan Anda untuk memasukkan hasilnya. Dugaan saya adalah "izin file yang salah" - baik untuk mount, atau untuk foo/direktori pada kartu. Ingat, ext4 mendukung izin file * nix lengkap, termasuk. pengguna dan grup.
Izzy
Anda mengetik suterminal untuk mendapatkan root. Anda mungkin perlu mengonfirmasi pemberian izin di telepon, jika Anda melakukannya untuk pertama kalinya.
Chahk
Entah skrip gagal, atau tidak dijalankan sama sekali. Anda mungkin ingin menambahkan beberapa hasil debug, misalnya echo Script executed > /mnt/fuse/sdcard1/test.log, dan memeriksa apakah itu berjalan sama sekali. Jika demikian, buat baris sebelum-ke-terakhir mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.logdan periksa pesan kesalahan. Atau menjalankan script secara manual untuk melihat: su /data/local/userinit.sh.
Izzy
@Izzy touchmenunjukkan bahwa skrip sedang berjalan. Saya mencoba menjalankan skrip secara manual su /data/local/userinit.sh, tetapi ini gagal. Saya juga mencoba su echo foo, dan mendapatkan kesalahan yang sama: Unknown id: echo.
Sparhawk
Adapun EDIT3 Anda, lihat komentar pertama saya: ext4 mendukung izin file * nix penuh, termasuk. pengguna dan grup . Anda telah membuat direktori tersebut dengan pengguna yang tidak ada di perangkat Android Anda, sehingga direktori tersebut adalah milik "pengguna tidak dikenal / grup tidak dikenal". Jika Anda tidak memberikan akses tulis ke "dunia", hanya root yang bisa menulis di sana. Anda harus membiasakan diri dengan dasar-dasar * nix tersebut saat menggunakan sistem file pada media portabel;) Adapun skrip, saya sarankan lagi menambahkan beberapa informasi debug, misalnya menggunakan echountuk output setiap perintah sebelum dieksekusi, dan redirect output kesalahan dengan 2>>.
Izzy

Jawaban:

6

Ini seharusnya diperbaiki beberapa bulan yang lalu, tetapi orang masih melaporkan masalah. Saya dapat membaca item di kartu, tetapi tidak memiliki izin menulis. Untuk memperbaikinya, saya menggabungkan strategi dari beberapa sumber .

  1. Kartu partisi dengan tabel partisi MS-DOS dan sistem file ext4. Saya menggunakan GParted di komputer desktop (Linux) saya.
  2. Masukkan kartu ke telepon Anda. (Anda mungkin tidak akan memiliki akses tulis sekarang.)
  3. Buka emulator terminal , dipasang secara default di Cyanogenmod.
  4. Ketik yang berikut (Saya sarankan WiFi Keyboard untuk blok teks besar). Berikan hak akses root emulator ketika memintanya.

Tanda $dan #tunjukkan meminta, jadi jangan mengetikkannya.

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

Ini mengubah izin kartu SD. Pemilik dan grup berubah dari systemmenjadi media_rw, dan juga memberikan akses tulis grup.

Sparhawk
sumber
perlu -R untuk chown recursif -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi
1

Tidak yakin apakah ini bisa membantu, tapi mungkin masalahnya Anda mencoba memasang di tempat yang salah? Ini adalah skrip kerja saya yang berfungsi pada S3 mini dengan 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 

Lokasi REALMNT sudah ada, jadi tentu saja mkdir tidak pernah dipanggil. Dan media_rw / sdcard1 sudah dimiliki oleh media_rw

Saya juga harus memperbarui /etc/permissions/platform.xml untuk memasukkan: <group id="media_rw"/> di: <permission name="android.permission.WRITE_EXTERNAL_STORAGE">

pengguna59177
sumber
Terima kasih. Saya agak menyerah dalam hal ini, karena saya juga menggunakan baterai yang tinggi dengan skrip saya. Karena sudah diperbaiki di bagasi, saya tidak akan repot dengan solusi lagi. Terima kasih, dan +1.
Sparhawk
@Sparhawk: Tidak yakin versi CYM yang Anda gunakan, tetapi kartu SD saya tidak dipasang secara otomatis.
Luis A. Florit
@ LuisA.Florit Saya tidak yakin apakah Anda bermaksud membalas jawaban ini . Lagi pula, saya menggunakan 11-20140804-SNAPSHOT-M9-i9300. Saya telah memposting lebih banyak informasi di jawaban lain .
Sparhawk
@Sparhawk: Kartu saya bahkan tidak dipasang, dan prosedur pemasangan pada Pengaturan gagal. Mungkin masalahnya terkait dengan pertanyaan saya di sini ( sugagal me-mount ): android.stackexchange.com/questions/82089/... `Saya menggunakan cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Luis A. Florit
@ LuisA.Florit Tidak begitu yakin. Mungkin mengajukan pertanyaan baru?
Sparhawk
0

Ada jawaban yang diposting oleh adasdadasd yang ingin saya terima, tetapi sejak itu dihapus. Saya akan mereproduksinya di bawah, dan menerima jawaban saya, tetapi jika adasdadasd muncul kembali, tolong posting ulang dan saya akan menghapus ini dan menerima jawaban Anda.

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

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

Diperbaiki secara default? Perubahan baru di github.

Sparhawk
sumber