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.
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.
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.
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.
echopara emitir cada comando antes de ser executado e redirecionar a saída de erro com 2>>.
ls -l /mnt/fuse/els -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 ofoo/diretório no cartão. Lembre-se, o ext4 suporta permissões de arquivo * nix completas, incl. usuário e grupos.