Sistema de arquivos somente leitura no Android


212

Eu recentemente enraizei meu Droid X e tudo parece estar funcionando perfeitamente. Fiz algumas alterações build.prope quando eu faço adb push build.prop /system/eu recebo o seguinte erro: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Como posso consertar isso?


19
você já tentou adb remount, o que você ganha?
Silverfox

Android é a pilha de software do Google ... Para perguntas de outros desenvolvedores, consulte android.stackexchange.com
Selvin

2
Observe que esta pergunta não deve ser confundida com o caso em que o código do aplicativo Android falha com um erro do sistema de arquivos somente leitura. Isso geralmente é causado pela tentativa de gravar um arquivo sem especificar um local, ou seja, tentando gravar no diretório raiz. Esta questão é apenas sobre como modificar a instalação do Android em dispositivos com raiz / desenvolvimento / engenharia.
22816 Chris Stratton

1
Existe uma maneira de fazer isso com um emulador de android? Nenhuma dessas soluções funciona para o meu emulador.
precisa saber é o seguinte

Respostas:


388

Nem todos os telefones e versões do Android têm as mesmas coisas.
Limitar as opções ao remontar seria o melhor.

Basta remontar como rw (leitura / gravação):

# mount -o rw,remount /system

Depois de concluir as alterações, remonte para ro (somente leitura):

# mount -o ro,remount /system

29
Você também pode fazer isso no seu PC. adb shell mount -o rw, remount / sistema
Matthias Weiler

8
Use em conjunto com adb rootou você receberá uma permissão negada ao enviar o arquivo.
KrisWebDev 18/08

1
@ MikeHenke, parece que você não era root quando o executou.
CurtisLeeBolin

21
Não funciona para mim:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi 08/02

2
Desde que eu tinha raiz de qualquer maneira, eu copiei o arquivo para / sdcard, então utilizado (no meu caso)mv hosts /system/etc/hosts
Lauri Elias

85
adb remount

funciona para mim e parece ser a solução mais simples.


6
"adb remount - Se você recebeu erros ao tentar enviar arquivos para / system devido a estar no modo somente leitura, o adb remount remontará / sistema no modo de leitura e gravação --- desde que o shell tenha a raiz correta permissões para fazer isso. Isso substitui a necessidade de digitar manualmente um comando mais longo, como mount -o rw, remount / system (como root) ou algo assim. " ( fonte ). Se você tiver algum problema com permissões de root, tente "adb root" antes.
KrisWebDev 01/02

4
Eu tenho Not running as root. Try "adb root" first.. E então adbd cannot run as root in production builds.
Vadzim

1
Em dispositivos mais recentes parece que nós também precisamos $ adb disable-veritye, em seguida, reiniciar o dispositivo antes de podermos correr$ adb remount
Nebel22

1
$ Adb dar disable-verdade: disable-verdade só funciona para userdebug constrói
William

3
ele não funciona: Not running as root. Try "adb root" first.. Entrei adb roote, em seguida, novamente, adb remountmas ainda o mesmo erro:Not running as root. Try "adb root" first.
user924

78

Consegui isso em um fórum do Android, onde fiz a mesma pergunta. Espero que isso ajude outra pessoa.

Em um emulador de terminal no telefone:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

Em seguida, no prompt do cmd, faça o adb push


3
adb shell <command>pode ser usado a partir do computador (se você não tiver um terminal no seu telefone)
Fletcher91

73

Embora eu saiba que a pergunta é sobre o dispositivo real, caso alguém chegue aqui com um problema semelhante no emulador, com as ferramentas mais recentes em fevereiro de 2017, o emulador precisa ser iniciado na linha de comando com:

-writable-system

Para qualquer coisa ser gravável para o /system. Sem esse sinalizador, nenhuma combinação de remountou mountpermitirá que alguém escreva /system.

Depois que o emulador é iniciado com esse sinalizador, um único adb remountdepois adb rooté suficiente para obter permissões para enviar por push /system.

Aqui está um exemplo da linha de comando que eu uso para executar meu emulador:

./emulator -writable-system -avd Nexus_5_API_25 -no-snapshot-load -qemu

O valor para os -avdsinalizadores vem de:

./emulator -list-avds

meu prompt de comando fica extremamente lento até que não possa continuar com o adb root e o adb remount após o lançamento do emulador com -writable-system, alguém pode ajudar?
Beeing Jk

29

Eu acho que a maneira mais segura é remontar o / system como leitura e gravação, usando:

mount -o remount,rw /system

e quando terminar, remonte-o como somente leitura:

mount -o remount,ro /system

6
Bem-vindo ao SO! Sua resposta é tecnicamente útil, mas essencialmente uma duplicata da resposta anterior de curtlee2002. Isso pode ter sido melhor como um comentário em sua resposta dizendo "Concordo que é mais seguro voltar para somente leitura depois de pesquisar no modo de leitura e gravação". Como temos milhões de perguntas, sempre haverá outra pergunta em que você é o primeiro a vir com uma ótima solução ou uma nova perspectiva!
Jonathan Van Matre

1
isso só funcionou para mim quando removi o "," da declaração. ie "" mount -o remount rw / system ""
propjk007 06/04

@TechnikEmpire, ele não se refere à resposta aceita.
26515 Paschalis

16

No meu Samsung galaxy mini S5570 (depois de ter root no celular):

Punho, como raiz, eu corri:

systemctl start adb

como um usuário normal:

adb shell 
su 

Conceder permissões de root na tela de toque

mount 

liste todos os pontos de montagem que temos e podemos ver, no meu caso, que / dev / stl12 foi montado no / system como ro (apenas pronto), então precisamos fazer:

mount -o rw,remount /dev/stl12 /system

Obrigado por esta resposta. Por alguma razão, nunca olhei para a tela do meu telefone para conceder permissões de root e estava obtendo acesso negado, não importa o que eu tentasse.
Graham Mitchell #

dizendo "Você deve especificar um tipo de sistema de arquivos com -t.", o que isso significa?
21418 NehaK

montar rw -o, remount -t ext4 / dev / block / vda / sistema, -t dizer o tipo de sistema de arquivos no meu exemplo ext4
Sérgio

11

Tente o seguinte no prompt de comando:

>adb remount
>adb push framework-res_old.apk /system/framework-res.apk

Deve seradb root remount
tqjustc

10
adb disable-verity
adb reboot
adb root
adb remount

Isso funciona para mim e é a solução mais simples.


7

Aqui está o que funcionou para mim. Eu estava executando um dispositivo emulado Android 7.1.1 (Nougat).

Em um terminal, pressionei o seguinte comando. Uma coisa a ser notada é a sinalização -writable-system

./emulator -writable-system -avd Nexus_6_API_25  -partition-size 280

Em outra guia

./adb shell
su
mount -o rw,remount -t ext4 /dev/block/vda /system

Todas as alterações que você fizer no conteúdo do sistema / sobreviverão a uma reinicialização.


4

Eu verifiquei com o emulador e seguinte funcionou.

  1. reinicialização adb
  2. raiz do adb && adb remount && adb push ~ / Desktop / hosts / sistema / etc / hosts

Como mencionado acima, execute o segundo passo em um único disparo.


3

Abra o emulador de terminal no telefone: depois

adb shell

depois que o daemon é iniciado

su
mount -o rw,remount /mnt/sdcard

então o somente leitura é convertido na leitura-gravação.


2
mount -o rw,remount /dev/stl12 /system

funciona para mim


2
This worked for me

#Mount as ReadOnly

su -c "mount -o rw,remount /system"
# Change Permission for file
su -c "chmod 777 /system/build.prop" 
#Edit the file to add the property
su -c "busybox vi /system/build.prop"
# Add now
service.adb.tcp.port=5678

# Reset old permissions
su -c "chmod 644 /system/build.prop"

# Mount as readonly again once done
su -c "mount -o ro,remount /system"

1

Encontrei este artigo no google e pensei em adicionar as etapas necessárias em um Sony Xperia Z (4.2.2).

A Sony possui um processo de vigilância que detecta quando você altera o ro para rw em / e / system (esses são os únicos que eu estava tentando modificar) e possivelmente outros.

A seguir, corri para executar as alterações que estava tentando realizar. Colei-os em uma janela, porque a remoção do bit de execução de / sbin / ric precisa ser feita rapidamente para impedir que ele seja reiniciado. (Tentei stop ric; isso não funciona - embora tenha funcionado em uma versão anterior do Android no telefone).

pkill -9 ric; mount -o rw,remount -t rootfs /
chmod 640 /sbin/ric
mount -o rw,remount /system

Eu modifiquei o arquivo hosts aqui, portanto, este é o local em que você faz as alterações necessárias no sistema de arquivos. Para deixar as coisas como as encontramos, faça o seguinte:

mount -o ro,remount /system
chmod 750 /sbin/ric
mount -o ro,remount -t rootfs /

Nesse ponto, o ric deve reiniciar automaticamente. (Ele foi reiniciado automaticamente para mim.)


1

Adicionando um pouco mais à resposta de Jan Bergström: Como o Android é um sistema baseado em Linux, e o caminho no Linux contém barras (../), ao usar o comando push, use "/" para definir o caminho de destino no dispositivo Android.

Por exemplo, o comando é: adb push C: \ Users \ admin \ Desktop \ 1.JPG sdcard / pictures /

Observe que aqui, barras invertidas são usadas para definir o caminho de origem do arquivo a ser enviado a partir do Windows PC e barras invertidas são usadas para definir o caminho de destino porque o Android é um sistema baseado em Linux. Você não precisa agir como raiz para usar este comando e também funciona perfeitamente em dispositivos de produção.


1

Às vezes, você recebe o erro porque o local de destino no telefone não existe. Por exemplo, em /storage/emulated/legacyvez de um local de armazenamento externo do telefone Android /storage/emulated/0.


1

Obrigado Sérgio , pelo comando "mount" sem a idéia de parâmetros. Eu precisaria feita adb pushem /data/data/com.my.app/libpor algum problema de teste, e obter "Read-only sistema de arquivos" mensagem.

O comando ls me mostra:

root@android:/ # ls -l /data/data/com.my.app/
drwxrwx--x u0_a98 u0_a98 2016-05-06 09:16 cache drwxrwx--x u0_a98 u0_a98 2016-05-06 09:04 files lrwxrwxrwx system system 2016-05-06 11:43 lib -> /mnt/asec/com.my.app-1/lib

Portanto, entende-se que o diretório "lib" é separado de outros diretórios de aplicativos.

O comando mount -o rw,remount /mnt/asec não resolveu o problema "r / o fs", deseja o parâmetro do dispositivo antes do parâmetro do diretório.

O comando "df" também não ajudou, mas mostra que meu /mnt/asec/com.my.app-1diretório está no ponto de montagem separado.

Então eu mountolho e voila!

root@android:/ # mount ......... /dev/block/dm-4 /mnt/asec/com.my.app-1 ext4 ro,dirsync,relatime 0 0

Os próximos passos já estão descritos para cima: remontar para RW, empurrar e remontar de volta para RO.


1

é o mesmo nome que deve extrair e reembalar o initrc.img e editar o initarquivo com o código de montagem / sistema


btw. você deve começar a AVD com opções de sistema -writeable
xsilen T

0

Copiar arquivos para o cartão SD?

Bem, suponho que você gostaria de copiar dados para o cartão SD do computador do desenvolvedor? Você pode ter enraizado o dispositivo e disponibilizado a área que aborda?) Eu tive o mesmo problema para enviar arquivos de dados para o meu aplicativo (Android Studio 1.3.2 no Win7), mas.

  • Primeiro, o shell de comando adb deve ser encontrado no caminho: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (a pasta AppData está oculta, portanto, você deve definir a configuração da pasta não oculta arquivos e pastas ocultos para encontrá-lo, o Path funciona independentemente)
  • Você precisa digitar o caminho da pasta corretamente ou recebe uma mensagem de erro somente leitura, provavelmente deve começar com / sdcard ou é a área somente leitura. Assim que não tive problema em enviar o arquivo para o emulador.

Por exemplo, o comando adb pode ser assim:

push adb C: \ testdata \ t.txt /sdcard/download/t.txt


0

Se houver uma falha na cópia do arquivo somente leitura, você pode tentar localizar o arquivo original no diretório raiz e modificá-lo com um editor de texto raiz (de preferência) editor de texto RB, ele vem com o aplicativo ROM Toolbox.


0

Tente isso em um emulador de terminal como raiz:

restorecon -v -R /data/media

0

No meu caso, eu estava usando o comando adb push ~/Desktop/file.txt ~/sdcard/

Eu mudei para ~/Desktop/file.txt /sdcard/e funcionou.

Certifique-se de desconectar e reconectar o telefone.


O autor desta pergunta pergunta sobre remontar o sistema / como leitura / gravação, sua resposta está meio fora de tópico
Metonymy

0

Como o chen-xing mencionou, a maneira mais simples é:

adb reboot

Mas para mim eu tive que mudar minhas configurações primeiro:

Configurações → Opções do desenvolvedor → Acesso root

Verifique se o ADB tem acesso root:

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.