Schreibgeschütztes Dateisystem unter Android


212

Ich habe kürzlich mein Droid X gerootet und alles scheint perfekt zu funktionieren. Ich habe einige Änderungen vorgenommen build.propund wenn ich dies tue, adb push build.prop /system/erhalte ich die folgende Fehlermeldung : failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Wie kann ich das beheben?


19
Hast du es versucht adb remount, was bekommst du?
Silberfuchs

Android ist Googles Software-Stack ... Für Fragen von Nicht-Entwicklern siehe android.stackexchange.com
Selvin

2
Bitte beachten Sie, dass diese Frage nicht mit dem Fall verwechselt werden sollte, in dem der Android- Anwendungscode mit einem schreibgeschützten Dateisystemfehler fehlschlägt. Dies wird normalerweise dadurch verursacht, dass versucht wird, eine Datei zu schreiben, ohne einen Speicherort anzugeben, dh in das Stammverzeichnis zu schreiben. Bei dieser Frage geht es nur darum, die Installation von Android selbst auf gerooteten / Entwicklungs- / Engineering-Geräten zu ändern.
Chris Stratton

1
Gibt es eine Möglichkeit, dies mit einem Android-Emulator zu tun? Keine dieser Lösungen funktioniert für meinen Emulator.
MikeSchem

Antworten:


388

Nicht alle Telefone und Versionen von Android haben die gleichen Dinge montiert.
Am besten ist es, die Optionen beim erneuten Einhängen einzuschränken.

Einfach als rw (Lesen / Schreiben) wieder montieren:

# mount -o rw,remount /system

Wenn Sie alle Änderungen vorgenommen haben, stellen Sie die Verbindung zu ro wieder her (schreibgeschützt):

# mount -o ro,remount /system

29
Sie können dies auch auf Ihrem PC tun. ADB Shell Mount -o rw, Remount / System
Matthias Weiler

8
In Verbindung mit verwenden adb rootoder Sie erhalten eine Berechtigung verweigert, wenn Sie die Datei verschieben.
KrisWebDev

1
@ MikeHenke, es hört sich so an, als wären Sie bei der Ausführung nicht root.
CurtisLeeBolin

21
Funktioniert nicht für mich:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi

2
Da ich sowieso root hatte, habe ich die Datei auf / sdcard kopiert und dann (in meinem Fall) verwendetmv hosts /system/etc/hosts
Lauri Elias

85
adb remount

funktioniert für mich und scheint die einfachste Lösung zu sein.


6
"adb remount - Wenn beim Versuch, Dateien an / system zu senden, Fehler aufgetreten sind, weil es sich im schreibgeschützten Modus befindet, wird adb remount / system erneut in den Lese- / Schreibmodus versetzt - vorausgesetzt, die Shell verfügt über das richtige Stammverzeichnis Berechtigungen dazu. Dies ersetzt die Notwendigkeit, einen längeren Befehl von Hand einzugeben, z. B. mount -o rw, remount / system (als root) oder so. " ( Quelle ). Wenn Sie Probleme mit Root-Berechtigungen haben, versuchen Sie es vorher mit "adb root".
KrisWebDev

4
Ich habe Not running as root. Try "adb root" first.. Und dann adbd cannot run as root in production builds.
Vadzim

1
Auf neueren Geräten müssen wir $ adb disable-veritydas Gerät $ adb remount
anscheinend auch neu starten

1
$ adb Disable-Verity geben: Disable-Verity funktioniert nur für Userdebug Builds
William

3
es funktioniert nicht : Not running as root. Try "adb root" first.. Ich habe eingegeben adb rootund dann nochmal adb remountaber immer noch den gleichen Fehler:Not running as root. Try "adb root" first.
user924

78

Habe dies von einem Android-Forum bekommen, in dem ich die gleiche Frage gestellt habe. Hoffe das hilft jemand anderem.

Auf einem Terminalemulator am Telefon:

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

Führen Sie dann an der Eingabeaufforderung cmd das aus adb push


3
adb shell <command>kann vom Computer aus verwendet werden (wenn Sie kein Terminal auf Ihrem Telefon haben)
Fletcher91

73

Obwohl ich weiß, dass es sich bei der Frage um das reale Gerät handelt, muss der Emulator über die Befehlszeile mit folgendem Befehl gestartet werden, falls jemand mit einem ähnlichen Problem im Emulator hierher gekommen ist.

-writable-system

Damit alles auf die geschrieben werden kann /system. Ohne dieses Flag gibt es keine Kombination von remountoder mounterlaubt es, darauf zu schreiben /system.

Nachdem der Emulator mit diesem Flag gestartet wurde, reicht ein einzelnes adb remountNachher adb rootaus, um die Berechtigungen zum Push zu erhalten /system.

Hier ist ein Beispiel für die Befehlszeile, mit der ich meinen Emulator ausführe:

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

Der Wert für die -avdFlags stammt von:

./emulator -list-avds

Meine Eingabeaufforderung wird extrem langsam, bis nach dem Start des Emulators mit -writable-system nicht mehr mit adb root und adb remount fortgefahren werden kann. Kann jemand helfen?
Beeing Jk

29

Ich denke, der sicherste Weg ist, das / System als Lese- / Schreibzugriff erneut zu installieren, indem ich Folgendes verwende:

mount -o remount,rw /system

und wenn Sie fertig sind, montieren Sie es erneut als schreibgeschützt:

mount -o remount,ro /system

6
Willkommen bei SO! Ihre Antwort ist technisch nützlich, aber im Wesentlichen ein Duplikat der vorherigen Antwort von curtlee2002. Dies könnte besser gewesen sein als ein Kommentar zu seiner Antwort: "Ich bin damit einverstanden, dass es am sichersten ist, nach dem Herumspielen im Lese- / Schreibmodus wieder schreibgeschützt zu sein." Wir haben Millionen von Fragen, daher wird es immer eine andere Frage geben, bei der Sie als Erster eine großartige Lösung oder eine neue Perspektive finden!
Jonathan Van Matre

1
Dies funktionierte nur für mich, wenn ich das "," aus der Anweisung entfernt hatte. dh "" mount -o remount rw / system ""
propjk007

@TechnikEmpire, er verweist nicht auf die akzeptierte Antwort.
Paschalis

16

Auf meinem Samsung Galaxy Mini S5570 (nachdem ich auf dem Handy root wurde):

Faust, als Wurzel lief ich:

systemctl start adb

als normaler Benutzer:

adb shell 
su 

Gewähren Sie Root-Berechtigungen auf dem Touchscreen

mount 

Listen Sie alle Mount-Punkte auf, die wir haben, und wir können in meinem Fall sehen, dass / dev / stl12 auf / system als ro gemountet wurde (nur bereit), also müssen wir nur Folgendes tun:

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

Vielen Dank für diese Antwort. Aus irgendeinem Grund habe ich nie auf den Bildschirm meines Telefons geschaut, um Root-Berechtigungen zu erteilen, und mir wurde der Zugriff verweigert, egal was ich versuchte.
Graham Mitchell

Was bedeutet das, wenn Sie sagen, dass Sie einen Dateisystemtyp mit -t angeben müssen?
NehaK

mount -o rw, remount -t ext4 / dev / block / vda / system, -t bedeutet den Typ des Dateisystems in meinem Beispiel ext4
Sérgio

11

Versuchen Sie Folgendes an der Eingabeaufforderung:

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

Es sollte seinadb root remount
tqjustc

10
adb disable-verity
adb reboot
adb root
adb remount

Das funktioniert bei mir und ist die einfachste Lösung.


7

Hier ist, was für mich funktioniert hat. Ich habe ein emuliertes Android 7.1.1 (Nougat) -Gerät ausgeführt.

Auf einem Terminal habe ich den folgenden Befehl gedrückt. Eine Sache, die beachtet werden muss, ist das Flag -writable-system

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

Auf einer anderen Registerkarte

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

Alle Änderungen, die Sie am / system-Inhalt vornehmen, überleben einen Neustart.


4

Ich habe mit dem Emulator nachgesehen und folgendes funktioniert.

  1. ADB-Neustart
  2. adb root && adb remount && adb push ~ / Desktop / hosts / system / etc / hosts

Führen Sie, wie oben erwähnt, den zweiten Schritt in einem einzigen Schuss aus.


3

Öffnen Sie den Terminalemulator auf dem Telefon: dann

adb shell

Danach wird der Daemon gestartet

su
mount -o rw,remount /mnt/sdcard

dann wird das schreibgeschützte in das schreibgeschützte umgewandelt.


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

funktioniert bei mir


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

Ich habe diesen Artikel von Google gefunden und dachte, ich würde die notwendigen Schritte für ein Sony Xperia Z (4.2.2) hinzufügen.

Der Sony verfügt über einen Watchdog-Prozess, der erkennt, wenn Sie ro auf rw on / und / system geändert haben (dies sind die einzigen, die ich ändern wollte) und möglicherweise andere.

Das Folgende war das, was ich ausgeführt habe, um die Änderungen durchzuführen, die ich erreichen wollte. Ich habe diese in ein Fenster eingefügt, da das Entfernen des Ausführungsbits aus / sbin / ric schnell erfolgen muss, um einen Neustart zu verhindern. (Ich habe es versucht stop ric; das funktioniert nicht - obwohl es auf einer früheren Version von Android auf dem Telefon funktioniert hat).

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

Ich habe die Hosts-Datei hier geändert, sodass Sie hier die erforderlichen Änderungen am Dateisystem vornehmen. Gehen Sie folgendermaßen vor, um die Dinge so zu belassen, wie wir sie gefunden haben:

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

An diesem Punkt sollte ric automatisch neu gestartet werden. (Es wurde für mich automatisch neu gestartet.)


1

Ein bisschen mehr zu Jan Bergströms Antwort hinzufügen: Da Android ein Linux-basiertes System ist und der Pfad unter Linux Schrägstriche (../) enthält, verwenden Sie bei Verwendung des Push-Befehls "/", um den Zielpfad auf dem Android-Gerät zu definieren.

Der Befehl lautet beispielsweise: adb push C: \ Benutzer \ admin \ Desktop \ 1.JPG sdcard / images /

Beachten Sie, dass hier Schrägstriche verwendet werden, um den Quellpfad der Datei zu definieren, die vom Windows-PC übertragen werden soll, und Schrägstriche verwendet werden, um den Zielpfad zu definieren, da Android ein Linux-basiertes System ist. Sie müssen nicht als Root fungieren, um diesen Befehl zu verwenden, und er funktioniert auch auf Produktionsgeräten einwandfrei.


1

Manchmal wird der Fehler angezeigt, weil der Zielort im Telefon nicht vorhanden ist. Zum Beispiel ist ein externer Speicherort für Android-Telefone /storage/emulated/legacyanstelle von /storage/emulated/0.


1

Vielen Dank, Sérgio , für den Befehl "mount" ohne Parameteridee. Ich würde gemacht müssen adb pushin /data/data/com.my.app/libfür einige Test Problem, und erhalten „Read-only - Dateisystem“ -Meldung.

Der Befehl zeigt mir:

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

Es versteht sich also, dass das Verzeichnis "lib" von anderen Anwendungsverzeichnissen getrennt ist.

Der Befehl mount -o rw,remount /mnt/asec hat das Problem "r / o fs" nicht behoben. Er möchte, dass der Geräteparameter vor dem Verzeichnisparameter steht.

Der Befehl "df" hat auch nicht geholfen, zeigt aber, dass sich mein /mnt/asec/com.my.app-1Verzeichnis am separaten Einhängepunkt befindet.

Dann mountschaue ich vorbei und voila!

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

Die nächsten Schritte sind bereits nach oben beschrieben: erneut auf RW montieren, drücken und wieder auf RO montieren.


1

Es ist dasselbe, das initrc.img extrahieren und neu packen und die initDatei mit dem Code von mount / system bearbeiten muss


Übrigens. Sie müssen avd mit -writeable-system options
xsilen T

0

Dateien auf die SD-Karte kopieren?

Nun, ich nehme an, Sie möchten Daten vom Entwicklercomputer auf die SD-Karte kopieren? Möglicherweise haben Sie das Gerät gerootet und den von Ihnen adressierten Bereich verfügbar gemacht?) Ich hatte ungefähr das gleiche Problem beim Hochladen von Datendateien für meine Anwendung (Android Studio 1.3.2 in Win7), aber.

  • Zuerst muss die adb-Befehlsshell im folgenden Pfad gefunden werden: PATH =% PATH%; C: \ Benutzer \ XXXXX \ AppData \ Local \ Android \ sdk \ Plattform-Tools (der Ordner AppData ist ausgeblendet, daher müssen Sie festlegen Das Ordner-Setup verbirgt keine versteckten Dateien und Ordner, um es zu finden. Der Pfad funktioniert unabhängig davon.
  • Sie müssen den Ordnerpfad richtig buchstabieren, oder Sie erhalten eine schreibgeschützte Fehlermeldung. Höchstwahrscheinlich muss sie mit / sdcard beginnen oder es handelt sich um einen schreibgeschützten Bereich. Sobald ich kein Problem damit hatte, die Datei in den Emulator zu verschieben.

So kann beispielsweise der Befehl adb folgendermaßen aussehen:

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


0

Wenn beim Kopieren der schreibgeschützten Datei ein Fehler auftritt, können Sie versuchen, die Originaldatei im Stammverzeichnis zu suchen und sie mit einem Stammtexteditor (vorzugsweise) RB Texteditor zu ändern. Diese wird mit der ROM Toolbox-App geliefert.


0

Versuchen Sie dies in einem Terminal-Emulator als root:

restorecon -v -R /data/media

0

In meinem Fall habe ich den Befehl adb push verwendet ~/Desktop/file.txt ~/sdcard/

Ich habe es geändert ~/Desktop/file.txt /sdcard/und dann hat es funktioniert.

Stellen Sie sicher, dass Sie das Telefon trennen und wieder anschließen.


Der Autor dieser Frage fragt nach dem erneuten Bereitstellen des / Systems als Lese- / Schreibzugriff. Ihre Antwort ist ein bisschen vom Thema
abweichend

0

Wie Chen-Xing erwähnt hat, ist der einfachste Weg:

adb reboot

Aber für mich musste ich zuerst meine Einstellungen ändern:

Einstellungen → Entwickleroptionen → Root-Zugriff

Stellen Sie sicher, dass ADB Root-Zugriff hat:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.