Como montar um cartão SD no formato ext4 com permissões corretas (com raiz)?

9

Vejo algumas menções aqui sobre a criação de um cartão SD no formato ext4, mas nenhum guia. Esta questão intimamente relacionada sugere que não há como fazê-lo, mas minha pergunta difere no fato de meu telefone estar especificamente enraizado.

Formatei meu cartão como ext4 (tabela de partição GUID); meu telefone Cyanogenmod o instalou em /mnt/fuse/sdcard1. Segui as instruções aqui para montar o cartão em /storage/sdcard1, criando o seguinte script em/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 &

Reiniciei e tentei copiar um arquivo (usando o ES File Explorer) e colá-lo no diretório pai, que falhou:

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

Na verdade, eu posso reproduzir bem o arquivo, para poder abri-lo. FWIW, quando tento copiar do ponto de montagem original ( /mnt/fuse/sdcard1), recebo um erro ligeiramente diferente:

Failed to copy the file bar.mp3

Estou usando um Samsung Galaxy S3 com Cyanogenmod 10.2.0-i9300.

== EDIT ==

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

Isso foi tudo. Não há sdcard1_realneste diretório, então suponho que o script esteja falhando?

== EDIT2 ==

Tentei modificar o script para solucionar problemas. O roteiro começa bem, mas, em seguida, falha em mkdir "$REALMNT"com o erro /data/local/userinit.sh[6]: : not found.

== EDIT3 ==

Sei que o script não funciona, portanto, corrigi-lo pode resolver minha pergunta, mas achei o seguinte interessante. Formatei meu cartão SD no meu computador Linux e transferi alguns arquivos para ele. Curiosamente, os erros de permissão ocorrem apenas nos subdiretórios que eu criei. Na raiz da partição (via /storage/sdcard1), já tem permissão de escrita.

Sparhawk
fonte
11
Como root, execute ls -l /mnt/fuse/e ls -l /mnt/fuse/sdcard1_real. Em seguida, edite sua pergunta para incluir os resultados. Meu palpite é "permissões de arquivo incorretas" - para a montagem ou para o foo/diretório no cartão. Lembre-se, o ext4 suporta permissões de arquivo * nix completas, incl. usuário e grupos.
Izzy
Você digita o suterminal para obter root. Pode ser necessário confirmar a concessão da permissão no telefone, se você estiver fazendo isso pela primeira vez.
Chahk
Ou o script está falhando ou não é executado. Você pode querer adicionar alguma saída de depuração, por exemplo echo Script executed > /mnt/fuse/sdcard1/test.log, e verificar se está em execução. Nesse caso, faça a linha anterior para a última mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.loge verifique a mensagem de erro. Ou executar o script manualmente para ver: su /data/local/userinit.sh.
Izzy
@ Izz touchmostra que o script está sendo executado. Tentei executar o script manualmente com su /data/local/userinit.sh, mas isso falhou. Eu também tentei su echo foo, e obter um erro semelhante: Unknown id: echo.
Sparhawk
Quanto ao seu EDIT3, veja meu primeiro comentário: ext4 suporta permissões completas de arquivos * nix, incl. usuário e grupos . Você criou esses diretórios com um usuário que não existe no seu dispositivo Android; portanto, eles pertencem a "usuário desconhecido / grupo desconhecido". Se você não concedeu acesso de gravação ao "mundo", somente o root poderia escrever lá. Você deve se familiarizar com o básico do * nix ao usar esse sistema de arquivos em mídia portátil;) Quanto ao script, sugiro novamente adicionar mais algumas informações de depuração, por exemplo, usar echopara emitir cada comando antes de ser executado e redirecionar a saída de erro com 2>>.
Izzy

Respostas:

6

Este foi supostamente fixo há vários meses, mas as pessoas ainda estão relatando problemas. Consigo ler itens no cartão, mas não tenho permissão de gravação. Para corrigi-lo, eu combinei estratégias de algumas fontes .

  1. Placa de partição com tabela de partições do MS-DOS e sistema de arquivos ext4. Eu usei o GParted no meu computador desktop (Linux).
  2. Insira o cartão no seu telefone. (Você provavelmente não terá acesso de gravação agora.)
  3. Abra o emulador de terminal , instalado por padrão no Cyanogenmod.
  4. Digite o seguinte (eu recomendo o Teclado WiFi para grandes blocos de texto). Conceda privilégios de root ao emulador quando solicitados.

Os avisos $e #indicam, portanto, não os digite.

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

Isso altera as permissões do cartão SD. O proprietário e o grupo mudam de systempara media_rwe também fornecem acesso de gravação ao grupo.

Sparhawk
fonte
precisa de -R para recursif chown -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi
1

Não tem certeza se é de alguma ajuda, mas possivelmente o problema é que você está tentando montar no lugar errado? Este é o meu script de trabalho que funciona em um mini S3 com o 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 

A localização do REALMNT já existia, portanto, é claro que o mkdir nunca foi chamado. E o media_rw / sdcard1 já pertence ao media_rw

Também tive que atualizar o /etc/permissions/platform.xml para incluir: <group id="media_rw"/> em: <permission name="android.permission.WRITE_EXTERNAL_STORAGE">

user59177
fonte
Obrigado. Eu tinha desistido um pouco disso, pois também tinha alto consumo de bateria com o meu script. Como está fixado no porta-malas, não vou mais me preocupar com uma solução alternativa. Obrigado, porém, e +1.
Sparhawk 04/04
@ Sparhawk: Não sei qual versão do CYM você usa, mas meu cartão SD não está montado automaticamente.
Luis A. Florit
@ LuisA.Florit Não sei se você pretendeu responder a esta resposta . De qualquer forma, estou usando 11-20140804-SNAPSHOT-M9-i9300. Publiquei mais informações em outra resposta .
Sparhawk 13/09
@ Sparhawk: Minha placa nem está montada e o procedimento de montagem em Configurações falha. Talvez o problme está relacionado à minha pergunta aqui ( sunão montar ): android.stackexchange.com/questions/82089/... `Eu uso cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Luis A. Florit
@ LuisA.Florit Não tenho certeza. Talvez faça uma nova pergunta?
Sparhawk