File system di sola lettura su Android


212

Recentemente ho rootato il mio Droid X e tutto sembra funzionare perfettamente. Ho fatto alcune modifiche per build.prope quando lo faccio adb push build.prop /system/ricevo il seguente errore: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Come posso risolvere questo problema?


19
hai provato adb remount, cosa ottieni?
Silverfox,

Android è lo stack di software di Google ... Per domande non sviluppatore, vedi android.stackexchange.com
Selvin

2
Si noti che questa domanda non deve essere confusa con il caso in cui il codice dell'applicazione Android non riesce con un errore del file system di sola lettura. Ciò è in genere causato dal tentativo di scrivere un file senza specificare un percorso, ovvero tentando di scrivere nella directory principale. Questa domanda riguarda solo la modifica dell'installazione di Android stesso su dispositivi rooted / di sviluppo / ingegneria.
Chris Stratton,

1
C'è un modo per farlo con un emulatore Android ?? Nessuna di queste soluzioni funziona per il mio emulatore.
MikeSchem,

Risposte:


388

Non tutti i telefoni e le versioni di Android hanno le cose montate allo stesso modo.
Limitare le opzioni durante il rimontaggio sarebbe la cosa migliore.

Rimonta semplicemente come rw (Leggi / Scrivi):

# mount -o rw,remount /system

Dopo aver apportato le modifiche, rimontare su ro (sola lettura):

# mount -o ro,remount /system

30
Puoi farlo anche sul tuo PC. adb shell mount -o rw, rimontaggio / sistema
Matthias Weiler,

8
Utilizzare in combinazione con adb rooto otterrai un'autorizzazione negata quando si invia il file.
KrisWebDev il

1
@MikeHenke, sembra che tu non fossi root quando lo hai eseguito.
CurtisLeeBolin l'

21
Per me non funziona:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi,

2
Dato che avevo comunque il root, ho copiato il file su / sdcard, quindi ho usato (nel mio caso)mv hosts /system/etc/hosts
Lauri Elias il

85
adb remount

funziona per me e sembra essere la soluzione più semplice.


6
"adb remount - Se si sono verificati errori nel tentativo di inviare i file al / sistema a causa della sua modalità di sola lettura, l'adb remount rimonterà / il sistema in modalità lettura-scrittura --- a condizione che la shell abbia la radice corretta permessi per farlo. Questo sostituisce la necessità di digitare manualmente un comando più lungo come mount -o rw, remount / system (come root) o qualcosa del genere. " ( fonte ). Se riscontri problemi con le autorizzazioni di root, prova prima "adb root".
KrisWebDev,

4
Ho Not running as root. Try "adb root" first.. E poi adbd cannot run as root in production builds.
Vadzim,

1
Sui dispositivi più recenti sembra che sia necessario $ adb disable-veritye anche riavviare il dispositivo prima di poterlo eseguire$ adb remount
Nebel22

1
$ adb disable-verity give: disable-verity funziona solo per build userdebug
William

3
non funziona: Not running as root. Try "adb root" first.. Sono entrato adb roote poi di nuovo adb remountma sempre lo stesso errore:Not running as root. Try "adb root" first.
user924

78

Ho ottenuto questo da un forum Android in cui ho posto la stessa domanda. Spero che questo aiuti qualcun altro.

Su un emulatore di terminale sul telefono:

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

Quindi al prompt di cmd, eseguire adb push


3
adb shell <command>può essere utilizzato dal computer (se non hai un terminale sul telefono)
Fletcher91,

73

Mentre so che la domanda riguarda il dispositivo reale, nel caso in cui qualcuno sia arrivato qui con un problema simile nell'emulatore, con qualsiasi strumento sia l'ultimo di febbraio 2017, l'emulatore deve essere lanciato dalla riga di comando con:

-writable-system

Per qualsiasi cosa sia scrivibile al /system. Senza questo flag nessuna combinazione di remounto mountconsentirà di scrivere /system.

Dopo che l'emulatore è stato lanciato con quel flag, è sufficiente un solo adb remountdopo adb rootper ottenere le autorizzazioni a cui inviare /system.

Ecco un esempio della riga di comando che utilizzo per eseguire il mio emulatore:

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

Il valore per i -avdflag deriva da:

./emulator -list-avds

il mio prompt dei comandi diventa estremamente lento fino a quando non riesco a continuare con la radice adb e la rimozione di adb dopo l'avvio dell'emulatore con -writable-system, qualcuno può aiutare?
Beeing Jk,

29

Penso che il modo più sicuro sia rimontare il sistema / come lettura-scrittura, usando:

mount -o remount,rw /system

e una volta terminato, rimontalo in sola lettura:

mount -o remount,ro /system

6
Benvenuti in SO! La tua risposta è tecnicamente utile, ma essenzialmente un duplicato della precedente risposta di curtlee2002. Questo avrebbe potuto essere migliore come un commento alla sua risposta che diceva "Sono d'accordo che è più sicuro tornare alla sola lettura dopo aver esplorato in modalità lettura-scrittura". Abbiamo milioni di domande, quindi ci sarà sempre un'altra domanda in cui sei il primo a trovare un'ottima soluzione o una nuova prospettiva!
Jonathan Van Matre,

1
questo ha funzionato solo per me una volta rimosso il "," dall'affermazione. vale a dire "" mount -o remount rw / system ""
propjk007

@TechnikEmpire, non si riferisce alla risposta accettata.
Paschalis,

16

Sul mio Samsung Galaxy S5570 mini (dopo aver ottenuto il root sul cellulare):

Pugno, come root, ho eseguito:

systemctl start adb

come utente normale:

adb shell 
su 

Concedere le autorizzazioni di root sul touchscreen

mount 

elenca tutti i punti di mount che abbiamo e possiamo vedere, nel mio caso, che / dev / stl12 è stato montato su / system come ro (solo pronto), quindi dobbiamo solo fare:

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

Grazie per questa risposta Per qualche motivo non ho mai guardato lo schermo del mio telefono per concedere i permessi di root e mi veniva negato l'accesso, qualunque cosa provassi.
Graham Mitchell,

dicendo "Devi specificare un tipo di filesystem con -t.", cosa significa?
NehaK,

mount -o rw, remount -t ext4 / dev / block / vda / system, -t indica il tipo di file system nel mio esempio ext4
Sérgio

11

Prova quanto segue sul prompt dei comandi:

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

Dovrebbe essereadb root remount
tqjustc,

10
adb disable-verity
adb reboot
adb root
adb remount

Questo funziona per me ed è la soluzione più semplice.


7

Ecco cosa ha funzionato per me. Stavo eseguendo un dispositivo Android 7.1.1 (Nougat) emulato.

Su un terminale, ho premuto il seguente comando. Una cosa da notare è la bandiera del sistema scrivibile

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

In un'altra scheda

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

Tutte le modifiche apportate ai contenuti / system sopravvivranno al riavvio.


4

Ho controllato con l'emulatore e seguito ha funzionato.

  1. riavvio adb
  2. radice adb && rimozione adb && push adb ~ / Desktop / hosts / sistema / etc / hosts

Come accennato anche sopra, esegui il secondo passaggio in uno scatto singolo.


3

Apri l'emulatore di terminale sul telefono: quindi

adb shell

dopo che quel demone è stato avviato

su
mount -o rw,remount /mnt/sdcard

quindi la sola lettura viene convertita in lettura-scrittura.


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

per me va bene


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

Ho trovato questo articolo su Google e ho pensato di aggiungere i passaggi necessari su un Sony Xperia Z (4.2.2).

La Sony ha un processo di watchdog che rileva quando hai cambiato ro in rw su / e / system (questi sono gli unici che stavo cercando di modificare) e possibilmente altri.

Quello che seguivo era quello che correvo per eseguire i cambiamenti che stavo cercando di ottenere. Li ho incollati in una finestra, perché la rimozione del bit di esecuzione da / sbin / ric deve essere eseguita rapidamente per impedirne il riavvio. (Ho provato stop ric; questo non funziona, anche se ha funzionato su una versione precedente di Android al telefono).

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

Ho modificato il file hosts qui, quindi questo è il posto in cui apporti le modifiche necessarie al filesystem. Per lasciare le cose nel modo in cui le abbiamo trovate, fai questo:

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

A quel punto ric dovrebbe riavviarsi automaticamente. (Si è riavviato automaticamente per me.)


1

Aggiungendo un po 'di più alla risposta di Jan Bergström: Poiché Android è un sistema basato su Linux e il percorso in Linux contiene barre (../), mentre usando il comando push, usa "/" per definire il percorso di destinazione nel dispositivo Android.

Ad esempio, il comando va: adb push C: \ Users \ admin \ Desktop \ 1.JPG sdcard / pictures /

Si noti che qui vengono utilizzate le barre rovesciate per definire il percorso di origine del file da inviare dal PC Windows e le barre rovesciate vengono utilizzate per definire il percorso di destinazione perché Android è un sistema basato su Linux. Non è necessario agire come root per utilizzare questo comando e funziona perfettamente anche sui dispositivi di produzione.


1

A volte viene visualizzato l'errore perché la posizione di destinazione nel telefono non esiste. Ad esempio, al /storage/emulated/legacyposto di una posizione di memoria esterna del telefono Android /storage/emulated/0.


1

Grazie, Sérgio , per il comando "mount" senza idea di parametri. Avrei bisogno di fatto adb pushin /data/data/com.my.app/libqualche problema di prova, e ottengo "sola lettura del file system" messaggio.

Il comando mi 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

Quindi, si comprende che la directory "lib" è separata dalle altre directory dell'applicazione.

Il comando mount -o rw,remount /mnt/asec non ha risolto il problema "r / o fs", ma desidera il parametro del dispositivo prima del parametro della directory.

Anche il comando "df" non ha aiutato, ma mostra che la mia /mnt/asec/com.my.app-1directory è nel punto di mount separato.

Poi guardo mounte voilà!

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

I passaggi successivi sono già descritti verso l'alto: rimontare su RW, spingere e rimontare su RO.


1

è lo stesso che deve estrarre e reimballare initrc.img e modificare il initfile con il codice di mount / system


btw. devi avviare avd con -writeable-system options
xsilen T

0

Copiare i file sulla scheda SD?

Bene, presumo che ti piaccia copiare i dati sulla scheda SD dal computer degli sviluppatori? Potresti aver effettuato il root del progetto e reso disponibile l'area a cui ti rivolgi?) Ho avuto lo stesso problema con il caricamento dei file di dati per la mia applicazione (Android Studio 1.3.2 in Win7), ma.

  • Innanzitutto la shell dei comandi adb deve essere trovata nel percorso: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (la cartella AppData è nascosta, quindi devi impostare l'installazione della cartella non nasconde i file nascosti e la cartella per trovarlo, Path funziona indipendentemente)
  • Devi scrivere correttamente il percorso della cartella o ricevi un messaggio di errore di sola lettura, molto probabilmente deve iniziare con / sdcard oppure è un'area di sola lettura. Non appena non ho avuto problemi a inviare il file all'emulatore.

Ad esempio, il comando adb può apparire così:

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


0

Se si verifica un errore nella copia del file di sola lettura, puoi provare a individuare il file originale nella directory principale e modificarlo con un editor di testo radice (preferibilmente) editor di testi RB, viene fornito con l'app ROM Toolbox.


0

Prova questo in un emulatore di terminale come root:

restorecon -v -R /data/media

0

Nel mio caso stavo usando il comando push adb ~/Desktop/file.txt ~/sdcard/

L'ho cambiato ~/Desktop/file.txt /sdcard/e poi ha funzionato.

Assicurarsi di scollegare e ricollegare il telefono.


L'autore di questa domanda chiede di rimontare il / system come read-write, la tua risposta è un po 'fuori tema
Metonimia

0

Come menzionato da Chen-Xing, il modo più semplice è:

adb reboot

Ma per me ho dovuto prima cambiare le mie impostazioni:

Impostazioni → Opzioni sviluppatore → Accesso root

Assicurati che ADB abbia accesso root:

inserisci qui la descrizione dell'immagine

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.