Come posso montare una scheda SD in formato ext4 con le autorizzazioni corrette (con root)?


9

Vedo alcune menzioni qui sulla creazione di una scheda SD in formato ext4, ma nessuna guida. Questa domanda strettamente correlata suggerisce che non c'è modo di farlo, ma la mia domanda differisce in quanto il mio telefono è specificamente radicato.

Ho formattato la mia carta come ext4 (tabella delle partizioni GUID); il mio telefono Cyanogenmod l'ha montato su /mnt/fuse/sdcard1. Ho seguito le istruzioni qui per montare la scheda su /storage/sdcard1, creando il seguente script su/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 &

Ho riavviato e ho tentato di copiare un file (utilizzando ES File Explorer) e incollarlo nella directory principale, che non è riuscita:

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

Posso davvero riprodurre il file bene, quindi posso aprirlo. FWIW, quando provo a copiare dal punto di montaggio originale ( /mnt/fuse/sdcard1), ottengo un errore leggermente diverso:

Failed to copy the file bar.mp3

Sto usando un Samsung Galaxy S3 con Cyanogenmod 10.2.0-i9300.

== EDIT ==

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

Questo era tutto. Non ce n'è sdcard1_realin questa directory, quindi suppongo che lo script non riesca?

== EDIT2 ==

Ho provato a modificare lo script per risolvere. Lo script inizia bene, ma poi non riesce mkdir "$REALMNT"con l'errore /data/local/userinit.sh[6]: : not found.

== Edit3 ==

So che lo script non funziona, quindi correggerlo potrebbe risolvere la mia domanda, ma ho pensato che il seguente fosse interessante. Ho formattato la mia scheda SD nel mio computer Linux e trasferito alcuni file su di essa. Stranamente, gli errori di autorizzazione si verificano solo nelle sottodirectory che ho creato. Nella radice della partizione (via /storage/sdcard1), ho già il permesso di scrittura.


1
Come root, eseguire ls -l /mnt/fuse/e ls -l /mnt/fuse/sdcard1_real. Quindi modifica la tua domanda per includere i risultati. La mia ipotesi è "permessi per i file errati" - sia per il mount, sia per la foo/directory sulla scheda. Ricorda, ext4 supporta le autorizzazioni complete per i file * nix, incl. utente e gruppi.
Izzy

Digiti il suterminale per ottenere il root. Potrebbe essere necessario confermare la concessione dell'autorizzazione sul telefono, se lo stai facendo per la prima volta.
Chahk

Lo script non sta funzionando o non viene eseguito affatto. Potresti voler aggiungere qualche output di debug, ad esempio echo Script executed > /mnt/fuse/sdcard1/test.log, e verificare se è in esecuzione. In tal caso, crea la riga precedente all'ultima mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.loge controlla il messaggio di errore. O eseguire lo script manualmente per vedere: su /data/local/userinit.sh.
Izzy

@Izzy touchmostra che lo script è in esecuzione. Ho provato a eseguire lo script manualmente con su /data/local/userinit.sh, ma questo non è riuscito. Ho anche provato su echo foo, e ottenere un errore simile: Unknown id: echo.
Sparhawk,

Per quanto riguarda il tuo EDIT3, vedi il mio primo commento: ext4 supporta le autorizzazioni complete per i file * nix, incl. utente e gruppi . Hai creato quelle directory con un utente che non esiste sul tuo dispositivo Android, quindi appartengono a "utente sconosciuto / gruppo sconosciuto". Se non hai concesso l'accesso in scrittura al "mondo", solo root poteva scrivere lì. Dovresti familiarizzare con queste nozioni di base * nix quando si utilizza un tale file system su supporti portatili;) Per quanto riguarda lo script, suggerisco di nuovo di aggiungere alcune informazioni di debug, ad esempio utilizzando echoper generare ciascun comando prima che venga eseguito e reindirizzare l'output dell'errore con 2>>.
Izzy

Risposte:


6

Ciò è stato presumibilmente corretto diversi mesi fa, ma le persone segnalano ancora problemi. Riesco a leggere elementi sulla carta, ma non ho il permesso di scrivere. Per risolvere il problema, ho combinato le strategie di alcune fonti .

  1. Scheda di partizione con tabella delle partizioni MS-DOS e filesystem ext4. Ho usato GParted sul mio computer desktop (Linux).
  2. Inserisci la carta nel telefono. (Probabilmente non avrai accesso in scrittura ora.)
  3. Aprire l' emulatore di terminale , installato per impostazione predefinita in Cyanogenmod.
  4. Digita quanto segue (raccomando WiFi Keyboard per grandi blocchi di testo). Concedi i privilegi di root dell'emulatore quando li richiede.

I prompt $e #indicano, quindi non digitarli.

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

Ciò modifica le autorizzazioni della scheda SD. Il proprietario e il gruppo cambiano da systema media_rw, e dà anche al gruppo l'accesso in scrittura.


bisogno -R per chown ricorsivo -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi

1

Non sei sicuro che sia di aiuto, ma forse il problema è che stai provando a montare nel posto sbagliato? Questo è il mio script di lavoro che funziona su un mini S3 con 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 

La posizione REALMNT esisteva già, quindi ovviamente mkdir non è mai stato chiamato. E media_rw / sdcard1 è già di proprietà di media_rw

Ho anche dovuto aggiornare /etc/permissions/platform.xml per includere: <group id="media_rw"/> in: <permission name="android.permission.WRITE_EXTERNAL_STORAGE">


Grazie. In qualche modo avevo rinunciato a questo, dal momento che avevo anche un elevato utilizzo della batteria con la mia sceneggiatura. Dato che è riparato nel bagagliaio, non mi preoccuperò più di una soluzione alternativa. Grazie comunque e +1.
Sparhawk,

@Sparhawk: Non sono sicuro di quale versione CYM usi, ma la mia scheda SD non è montata automaticamente.
Luis A. Florit,

@ LuisA.Florit Non sono sicuro di voler rispondere a questa risposta . Ad ogni modo, sto usando l'11-20140804-SNAPSHOT-M9-i9300. Ho pubblicato più informazioni in un'altra risposta .
Sparhawk,

@Sparhawk: la mia scheda non è nemmeno montata e la procedura di montaggio in Impostazioni non riesce. Forse il problema è legato alla mia domanda qui ( sunon riesce a montare ): android.stackexchange.com/questions/82089/… `Uso cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Luis A. Florit

@ LuisA.Florit Non sono proprio sicuro. Forse fai una nuova domanda?
Sparhawk,

0

C'è stata una risposta pubblicata da adasdadasd che volevo accettare, ma da allora è stata cancellata. Lo riprodurrò di seguito e accetterò la mia risposta, ma se adasdadasd riappare, ti preghiamo di ripubblicare e cancellerò questo e accetterò il tuo.

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

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

Risolto per impostazione predefinita? Nuovo cambio in github.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.