System plików tylko do odczytu w systemie Android

212

Niedawno zrootowałem mojego Droida X i wszystko wydaje się działać idealnie. Zrobiłem kilka zmian build.propi kiedy zrobić adb push build.prop /system/pojawia się następujący błąd: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Jak mogę to naprawić?

steveo225
źródło
19
próbowałeś adb remount, co dostajesz?
silverfox
Android jest stosem oprogramowania Google ... W przypadku pytań niezwiązanych z programistami zobacz android.stackexchange.com
Selvin
2
Należy pamiętać, że tego pytania nie należy mylić z przypadkiem, gdy kod aplikacji na Androida zawiedzie z błędem systemu plików tylko do odczytu. Jest to zwykle spowodowane próbą zapisu pliku bez określenia lokalizacji, tj. Próbą zapisu do katalogu głównego. To pytanie dotyczy jedynie modyfikacji instalacji Androida na urządzeniach zrootowanych / programistycznych / inżynierskich.
Chris Stratton
1
Czy można to zrobić za pomocą emulatora Androida? Żadne z tych rozwiązań nie działa w moim emulatorze.
MikeSchem

Odpowiedzi:

388

Nie wszystkie telefony i wersje Androida mają takie same elementy.
Najlepszym rozwiązaniem byłoby ograniczenie opcji przy ponownym montażu.

Wystarczy zamontować ponownie jako rw (odczyt / zapis):

# mount -o rw,remount /system

Po zakończeniu wprowadzania zmian podłącz ponownie do ro (tylko do odczytu):

# mount -o ro,remount /system
CurtisLeeBolin
źródło
29
Możesz to zrobić również na komputerze. adb shell mount -o rw, remount / system
Matthias Weiler
8
Używaj w połączeniu z adb rootlub otrzymasz Odmowę dostępu podczas wypychania pliku.
KrisWebDev
1
@MikeHenke, brzmi to tak, jakbyś nie był rootem podczas jego wykonywania.
CurtisLeeBolin
21
Nie działa dla mnie:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi
2
Ponieważ i tak miałem root, skopiowałem plik do / sdcard, a następnie użyłem (w moim przypadku)mv hosts /system/etc/hosts
Lauri Elias,
85
adb remount

działa dla mnie i wydaje się być najprostszym rozwiązaniem.

Chen Xing
źródło
6
„adb remount - Jeśli wystąpiły błędy podczas próby wypchnięcia plików do / systemu ze względu na to, że jest on w trybie tylko do odczytu, adb remount ponownie zamontuje system w trybie do odczytu i zapisu --- pod warunkiem, że powłoka ma prawidłowy katalog główny uprawnienia do tego. Zastępuje to konieczność ręcznego wpisywania dłuższego polecenia, takiego jak mount -o rw, remount / system (jako root) lub coś w tym rodzaju. ” ( źródło ). Jeśli masz jakiś problem z uprawnieniami roota, wypróbuj wcześniej „adb root”.
KrisWebDev
4
Mam Not running as root. Try "adb root" first.. A potem adbd cannot run as root in production builds.
Vadzim
1
Na nowszych urządzeniach wygląda na to, że musimy także $ adb disable-verityuruchomić urządzenie, zanim będziemy mogli uruchomić$ adb remount
Nebel22,
1
$ adb disable-verity give: disable-verity działa tylko dla kompilacji userdebug
William
3
to nie działa: Not running as root. Try "adb root" first.. Wszedłem adb root, a następnie ponownie adb remount, ale wciąż ten sam błąd:Not running as root. Try "adb root" first.
user924
78

Mam to na forum Androida, na którym zadałem to samo pytanie. Mam nadzieję, że to pomaga komuś innemu.

W emulatorze terminali w telefonie:

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

Następnie w wierszu polecenia cmd wykonaj adb push

steveo225
źródło
3
adb shell <command>może być używany z komputera (jeśli brakuje terminala w telefonie)
Fletcher91
73

Chociaż wiem, że pytanie dotyczy prawdziwego urządzenia, na wypadek gdyby ktoś tu dotarł z podobnym problemem w emulatorze, niezależnie od tego, jakie narzędzia są najnowsze od lutego 2017 r., Emulator należy uruchomić z wiersza polecenia za pomocą:

-writable-system

Aby cokolwiek było zapisywalne w /system. Bez tej flagi żadna kombinacja remountani mountnie pozwoli na pisanie /system.

Po uruchomieniu emulatora z tą flagą, jeden adb remountpo adb rootwystarcza, aby uzyskać uprawnienia do push to /system.

Oto przykład wiersza polecenia, którego używam do uruchomienia emulatora:

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

Wartość -avdflag pochodzi z:

./emulator -list-avds
Ishamael
źródło
mój wiersz polecenia staje się bardzo powolny, dopóki nie można kontynuować z adb root i adb remount po uruchomieniu emulatora z -writable-system, ktoś może pomóc?
Beeing Jk
29

Myślę, że najbezpieczniejszym sposobem jest ponowne zamontowanie systemu / do odczytu i zapisu przy użyciu:

mount -o remount,rw /system

a po zakończeniu zamontuj go jako tylko do odczytu:

mount -o remount,ro /system
hgdeoro
źródło
6
Witamy w SO! Twoja odpowiedź jest przydatna technicznie, ale zasadniczo jest kopią wcześniejszej odpowiedzi curtlee2002. Mogłoby to być lepsze jako komentarz do jego odpowiedzi: „Zgadzam się, że najbezpieczniej jest wrócić do trybu tylko do odczytu po małpowaniu w trybie do odczytu i zapisu”. Mamy miliony pytań, więc zawsze będzie inne pytanie, w którym jako pierwszy znajdziesz świetne rozwiązanie lub nową perspektywę!
Jonathan Van Matre,
1
działało to dla mnie tylko wtedy, gdy usunąłem „,” ze stwierdzenia. tzn. „” mount -o remount rw / system ””
propjk007,
@ TechnikEmpire, nie odnosi się do zaakceptowanej odpowiedzi.
Paschalis
16

Na moim Samsungu Galaxy mini S5570 (po rootowaniu na telefonie komórkowym):

Pięść jako root uruchomiłem:

systemctl start adb

jako zwykły użytkownik:

adb shell 
su 

Udziel uprawnień root na ekranie dotykowym

mount 

wypisz wszystkie punkty montowania, które mamy, i możemy zobaczyć, w moim przypadku, że / dev / stl12 został zamontowany w / systemie jako ro (tylko gotowy), więc wystarczy:

mount -o rw,remount /dev/stl12 /system
Sérgio
źródło
Dziękuję za tę odpowiedź. Z jakiegoś powodu nigdy nie patrzyłem na ekran w telefonie, aby przyznać uprawnienia roota i odmawiałem dostępu bez względu na to, co próbowałem.
Graham Mitchell
mówiąc „Musisz określić typ systemu plików za pomocą -t.”, co to znaczy?
NehaK
mount -o rw, remount -t ext4 / dev / block / vda / system, -t oznacza typ systemu plików w moim przykładzie ext4
Sérgio
11

Spróbuj wykonać następujące czynności w wierszu polecenia:

>adb remount
>adb push framework-res_old.apk /system/framework-res.apk
scue
źródło
Powinno byćadb root remount
tqjustc
10
adb disable-verity
adb reboot
adb root
adb remount

To działa dla mnie i jest najprostszym rozwiązaniem.

byInduction
źródło
7

Oto, co zadziałało dla mnie. Pracowałem na emulowanym urządzeniu z Androidem 7.1.1 (Nougat).

Na terminalu nacisnąłem następujące polecenie. Należy zwrócić uwagę na flagę -writable-system

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

Na innej karcie

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

Wszystkie zmiany dokonane w treści / system przetrwają restart.

George Garcés
źródło
4

Sprawdziłem za pomocą emulatora i działało.

  1. adb restart
  2. adb root && adb remount && adb push ~ / Desktop / hosts / system / etc / hosts

Jak wspomniano powyżej, wykonaj drugi krok w pojedynczym ujęciu.

Kod
źródło
3

Otwórz emulator terminala w telefonie: następnie

adb shell

po uruchomieniu tego demona

su
mount -o rw,remount /mnt/sdcard

następnie tylko odczyt jest konwertowany na odczyt-zapis.

Ashwani
źródło
2
mount -o rw,remount /dev/stl12 /system

pracuje dla mnie

qinqie
źródło
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"
Ashwin Rayaprolu
źródło
1

Znalazłem ten artykuł w Google i pomyślałem, że dodam kroki niezbędne w Sony Xperia Z (4.2.2).

Sony ma proces kontrolny, który wykrywa, kiedy zmieniłeś ro na rw na / i / system (tylko te próbowałem zmodyfikować) i ewentualnie inne.

Oto, co pobiegłem, aby wykonać zmiany, które starałem się osiągnąć. Wkleiłem je do okna, ponieważ usunięcie bitu wykonawczego z / sbin / ric musi być wykonane szybko, aby zatrzymać jego ponowne uruchamianie. (Próbowałem stop ric; to nie działa - chociaż działało na poprzedniej wersji Androida na telefon).

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

Zmodyfikowałem tutaj plik hosts, więc w tym miejscu dokonujesz potrzebnych zmian w systemie plików. Aby pozostawić rzeczy tak, jak je znaleźliśmy, wykonaj następujące czynności:

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

W którym momencie ric powinien się automatycznie zrestartować. (Uruchomił się dla mnie automatycznie).

Paweł
źródło
1

Dodając jeszcze trochę do odpowiedzi Jana Bergströma: Ponieważ Android jest systemem opartym na Linuksie, a ścieżka w Linuksie zawiera ukośniki do przodu (../), używając polecenia push, użyj „/”, aby zdefiniować ścieżkę docelową na urządzeniu z Androidem.

Na przykład polecenie brzmi: adb push C: \ Users \ admin \ Desktop \ 1.JPG sdcard / pictures /

Zauważ, że tutaj ukośniki wsteczne służą do zdefiniowania ścieżki źródłowej pliku, który ma być wypchnięty z komputera z systemem Windows, a ukośniki do przodu są używane do zdefiniowania ścieżki docelowej, ponieważ Android jest systemem opartym na systemie Linux. Nie musisz działać jako root, aby użyć tego polecenia, a także działa doskonale doskonale na urządzeniach produkcyjnych.

Bipolar Metalhead
źródło
1

Czasami pojawia się błąd, ponieważ docelowa lokalizacja w telefonie nie istnieje. Na przykład /storage/emulated/legacyzamiast zewnętrznego miejsca do przechowywania niektórych telefonów z Androidem /storage/emulated/0.

Geng Jiawen
źródło
1

Dzięki, Sérgio , za polecenie „mount” bez pomysłu na parametry. Że muszę się adb pushdo /data/data/com.my.app/libjakiegoś problemu badawczego i dostać „tylko do odczytu systemu plików” wiadomości.

Polecenie ls pokazuje mi:

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

Rozumie się zatem, że katalog „lib” jest oddzielony od innych katalogów aplikacji.

Polecenie mount -o rw,remount /mnt/asec nie rozwiązało problemu „r / o fs”, wymaga parametru urządzenia przed parametrem katalogu.

Polecenie „df” również nie pomogło, ale pokazuje, że mój /mnt/asec/com.my.app-1katalog znajduje się w osobnym punkcie montowania.

Potem patrzę mounti voila!

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

Kolejne kroki są już opisane w górę: podłącz ponownie do RW, wciśnij i ponownie podłącz do RO.

vkkeeper
źródło
1

sames, które muszą wyodrębnić i przepakować initrc.img i edytować initplik z kodem mount / system

xsilen T.
źródło
btw. musisz rozpocząć avd z opcjami -writeable-system
xsilen T
0

Skopiować pliki na kartę SD?

Zakładam, że lubisz kopiować dane na kartę SD z komputera programisty? Być może zrootowałeś urządzenie i udostępniłeś adresowany obszar?) Miałem mniej więcej ten sam problem z przesyłaniem plików danych dla mojej aplikacji (Android Studio 1.3.2 w Win7), ale.

  • Najpierw należy znaleźć powłokę poleceń adb w ścieżce: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (folder AppData jest ukryty, więc musisz ustawić konfiguracja folderu nie ukrywa ukrytych plików i folderu, aby go znaleźć, ścieżka działa niezależnie)
  • Musisz przeliterować ścieżkę do folderu w przeciwnym razie lub pojawi się komunikat o błędzie tylko do odczytu, najprawdopodobniej musi zaczynać się od / sdcard lub jest to obszar tylko do odczytu. Gdy tylko nie miałem problemu z wypchnięciem pliku do emulatora.

Na przykład polecenie adb może wyglądać następująco:

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

Jan Bergström
źródło
0

Jeśli kopiowanie pliku tylko do odczytu nie powiedzie się, możesz spróbować zlokalizować oryginalny plik w katalogu głównym i zmodyfikować go za pomocą edytora tekstu root (najlepiej) edytora tekstu RB, jest on dostarczany z aplikacją ROM Toolbox.

Abhishek Hamal
źródło
0

Wypróbuj to w emulatorze terminali jako root:

restorecon -v -R /data/media
intrepidis
źródło
0

W moim przypadku korzystałem z polecenia adb push ~/Desktop/file.txt ~/sdcard/

Zmieniłem to ~/Desktop/file.txt /sdcard/i wtedy zadziałało.

Pamiętaj, aby odłączyć i ponownie podłączyć telefon.

JavaBanana
źródło
Autor tego pytania pyta o ponowne zamontowanie / systemu jako do odczytu i zapisu, twoja odpowiedź jest trochę poza tematem
Metonimia
0

Jak wspomniano chen-xing, najprostszym sposobem jest:

adb reboot

Ale dla mnie najpierw musiałem zmienić ustawienia:

Ustawienia → Opcje programisty → Dostęp root

Upewnij się, że ADB ma dostęp do rootowania:

wprowadź opis zdjęcia tutaj

Cillian Myles
źródło