Hanya baca sistem file di Android

212

Baru-baru ini saya melakukan root pada Droid X saya dan semuanya tampak berfungsi dengan baik. Saya membuat beberapa perubahan build.propdan ketika saya lakukan adb push build.prop /system/saya mendapatkan error berikut: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Bagaimana saya bisa memperbaikinya?

steveo225
sumber
19
Sudahkah Anda mencoba adb remount, apa yang Anda dapatkan?
silverfox
Android adalah tumpukan perangkat lunak Google ... Untuk pertanyaan non-pengembang, lihat android.stackexchange.com
Selvin
2
Harap perhatikan bahwa pertanyaan ini tidak boleh bingung dengan kasus di mana kode Aplikasi Android gagal dengan kesalahan sistem file read-only. Itu biasanya disebabkan oleh mencoba untuk menulis file tanpa menentukan lokasi, yaitu mencoba untuk menulis ke direktori root. Pertanyaan ini hanya tentang memodifikasi instalasi Android itu sendiri di root / pengembangan / perangkat rekayasa.
Chris Stratton
1
Apakah ada cara untuk melakukan ini dengan emulator android ?? Tidak ada solusi yang berfungsi untuk emulator saya.
MikeSchem

Jawaban:

388

Tidak semua ponsel dan versi android memiliki hal-hal yang sama.
Membatasi opsi saat remount akan menjadi yang terbaik.

Cukup remount sebagai rw (Baca / Tulis):

# mount -o rw,remount /system

Setelah Anda selesai melakukan perubahan, pasang kembali ke ro (hanya baca):

# mount -o ro,remount /system
CurtisLeeBolin
sumber
30
Anda juga dapat melakukannya di PC. adb shell mount -o rw, remount / system
Matthias Weiler
8
Gunakan bersama-sama dengan adb rootatau Anda akan mendapatkan Izin Ditolak saat mendorong file.
KrisWebDev
1
@ MikeHenke, sepertinya Anda tidak melakukan root ketika Anda menjalankannya.
CurtisLeeBolin
21
Tidak bekerja untuk saya:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi
2
Karena saya punya root, saya menyalin file ke / sdcard, kemudian digunakan (dalam kasus saya)mv hosts /system/etc/hosts
Lauri Elias
85
adb remount

bekerja untuk saya dan tampaknya menjadi solusi paling sederhana.

Chen Xing
sumber
6
"adb remount - Jika Anda mendapatkan kesalahan saat mencoba mendorong file ke / sistem karena sedang dalam mode baca-saja, adb remount akan remount / sistem ke mode baca-tulis --- asalkan shell memiliki root yang benar izin untuk melakukannya. Ini menggantikan harus mengetikkan perintah yang lebih panjang dengan tangan seperti mount -o rw, remount / sistem (sebagai root) atau sesuatu. " ( sumber ). Jika Anda memiliki masalah dengan izin root, coba "adb root" sebelumnya.
KrisWebDev
4
Saya punya Not running as root. Try "adb root" first.. Dan kemudian adbd cannot run as root in production builds.
Vadzim
1
Pada perangkat yang lebih baru sepertinya kita juga perlu $ adb disable-veritydan kemudian reboot perangkat sebelum kita dapat menjalankan$ adb remount
Nebel22
1
$ adb disable-verity give: disable-verity hanya berfungsi untuk userdebug build
William
3
tidak bekerja: Not running as root. Try "adb root" first.. Saya masuk adb rootdan sekali lagi adb remounttetapi masih kesalahan yang sama:Not running as root. Try "adb root" first.
user924
78

Turun dari forum Android tempat saya mengajukan pertanyaan yang sama. Semoga ini bisa membantu orang lain.

Pada emulator terminal di telepon:

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

Kemudian pada prompt cmd, lakukan adb push

steveo225
sumber
3
adb shell <command>dapat digunakan dari komputer (jika Anda tidak memiliki terminal di ponsel)
Fletcher91
73

Sementara saya tahu pertanyaannya adalah tentang perangkat yang sebenarnya, jika seseorang datang ke sini dengan masalah serupa di emulator, dengan alat apa pun yang terbaru pada Februari 2017, emulator perlu diluncurkan dari baris perintah dengan:

-writable-system

Agar segala sesuatu dapat ditulisi ke /system. Tanpa bendera ini tidak ada kombinasi remountatau mountakan memungkinkan seseorang untuk menulis /system.

Setelah emulator diluncurkan dengan bendera itu, satu adb remountsetelah adb rootcukup untuk mendapatkan izin untuk mendorong /system.

Berikut adalah contoh dari baris perintah yang saya gunakan untuk menjalankan emulator saya:

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

Nilai untuk -avdbendera berasal dari:

./emulator -list-avds
Ishamael
sumber
command prompt saya menjadi sangat lambat sampai tidak dapat melanjutkan dengan adb root dan adb remount setelah meluncurkan emulator dengan -writable-system, ada yang bisa membantu?
Beeing Jk
29

Saya pikir cara teraman adalah remounting sistem / sebagai read-write, menggunakan:

mount -o remount,rw /system

dan setelah selesai, remount sebagai read-only:

mount -o remount,ro /system
hgdeoro
sumber
6
Selamat datang di SO! Jawaban Anda secara teknis bermanfaat, tetapi pada dasarnya merupakan duplikat dari jawaban curtlee2002 sebelumnya. Ini mungkin lebih baik sebagai komentar atas jawabannya yang mengatakan "Saya setuju bahwa paling aman untuk kembali ke baca-hanya setelah bermain-main dalam mode baca-tulis." Kami memiliki jutaan pertanyaan, jadi akan selalu ada pertanyaan lain di mana Anda adalah orang pertama yang datang dengan solusi hebat atau perspektif baru!
Jonathan Van Matre
1
ini hanya berfungsi untuk saya setelah saya menghapus "," dari pernyataan. yaitu "" mount -o remount rw / system ""
propjk007
@ TechnikEmpire, dia tidak merujuk ke jawaban yang diterima.
Paschalis
16

Pada Samsung galaxy mini S5570 saya (setelah mendapat root di ponsel):

Fist, sebagai root, aku berlari:

systemctl start adb

sebagai pengguna normal:

adb shell 
su 

Berikan izin root pada layar sentuh

mount 

daftarkan semua mount point yang kita miliki dan kita dapat melihat, dalam kasus saya, bahwa / dev / stl12 sudah di-mount pada / sistem sebagai ro (hanya siap), jadi kita hanya perlu melakukan:

mount -o rw,remount /dev/stl12 /system
Sérgio
sumber
Terima kasih atas jawaban ini. Untuk beberapa alasan saya tidak pernah melihat layar di ponsel saya untuk memberikan izin root dan mendapatkan akses ditolak tidak peduli apa yang saya coba.
Graham Mitchell
mengatakan "Anda harus menentukan tipe sistem file dengan -t.", apa artinya ini?
NehaK
mount -o rw, remount -t ext4 / dev / block / vda / system, -t berarti jenis sistem file dalam contoh saya ext4
Sérgio
11

Coba yang berikut ini pada command prompt:

>adb remount
>adb push framework-res_old.apk /system/framework-res.apk
scue
sumber
Seharusnyaadb root remount
tqjustc
10
adb disable-verity
adb reboot
adb root
adb remount

Ini berfungsi untuk saya, dan merupakan solusi paling sederhana.

byInduction
sumber
7

Inilah yang bekerja untuk saya. Saya menjalankan perangkat Android 7.1.1 (Nougat) yang dicontoh.

Di terminal, saya menekan perintah berikut. Satu hal yang perlu diperhatikan adalah flag -writable-system

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

Di tab lain

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

Semua perubahan yang Anda lakukan pada / isi sistem akan bertahan hidup restart.

George Garcés
sumber
4

Saya diperiksa dengan emulator dan berikut berhasil.

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

Seperti disebutkan di atas juga, jalankan langkah kedua dalam satu tembakan.

Kode
sumber
3

Buka emulator terminal di ponsel: lalu

adb shell

setelah itu daemon dimulai

su
mount -o rw,remount /mnt/sdcard

maka read only diubah menjadi read-Write.

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

bekerja untukku

qinqie
sumber
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
sumber
1

Saya menemukan artikel ini dari google, dan saya pikir saya akan menambahkan langkah-langkah yang diperlukan pada Sony Xperia Z (4.2.2).

Sony memiliki proses pengawas yang mendeteksi ketika Anda telah mengubah ro ke rw pada / dan / sistem (ini adalah satu-satunya yang saya coba modifikasi) dan mungkin yang lain.

Berikut ini adalah apa yang saya jalankan untuk melakukan perubahan yang saya coba capai. Saya menempelkan ini ke jendela, karena menghapus bit eksekusi dari / sbin / ric perlu dilakukan dengan cepat untuk menghentikannya restart itu sendiri. (Saya mencoba stop ric; ini tidak berhasil - walaupun itu bekerja pada versi android sebelumnya di telepon).

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

Saya memodifikasi file host di sini, jadi ini adalah tempat Anda membuat perubahan yang Anda perlukan untuk sistem file. Untuk meninggalkan sesuatu seperti yang kami temukan, lakukan ini:

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

Pada titik ini ric harus secara otomatis restart. (Ini dimulai kembali untuk saya secara otomatis.)

Paul
sumber
1

Menambahkan sedikit lebih banyak ke jawaban Jan Bergström: Karena Android adalah sistem berbasis Linux, dan jalur di Linux berisi garis miring (../), saat menggunakan perintah push, gunakan "/" untuk menentukan jalur tujuan di perangkat Android.

Sebagai Contoh, perintahnya: adb push C: \ Users \ admin \ Desktop \ 1.JPG sdcard / gambar /

Perhatikan bahwa di sini, garis miring digunakan untuk menentukan jalur sumber file yang akan didorong dari windows PC dan garis miring digunakan untuk menentukan jalur tujuan karena Android adalah sistem berbasis Linux. Anda tidak harus bertindak sebagai root untuk menggunakan perintah ini dan juga, itu berfungsi dengan baik pada perangkat produksi.

Bipolar Metalhead
sumber
1

Terkadang Anda mendapatkan kesalahan karena lokasi tujuan di telepon tidak ada. Sebagai contoh, beberapa lokasi penyimpanan eksternal ponsel android /storage/emulated/legacybukan /storage/emulated/0.

Geng Jiawen
sumber
1

Terima kasih, Sérgio , untuk perintah "mount" tanpa gagasan parameter. Aku akan perlu untuk dibuat adb pushmenjadi /data/data/com.my.app/libbeberapa masalah tes, dan "Read-only filesystem" pesan.

Perintah ini menunjukkan kepada saya:

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

Jadi, dapat dipahami bahwa direktori "lib" dipisahkan dari direktori aplikasi lain.

Perintah mount -o rw,remount /mnt/asec tidak menyelesaikan masalah "r / o fs", ia menginginkan parameter perangkat sebelum parameter direktori.

Perintah "df" juga tidak membantu, tetapi menunjukkan bahwa /mnt/asec/com.my.app-1direktori saya berada pada titik mount terpisah.

Lalu aku melihat mountdan voila!

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

Langkah selanjutnya sudah dijelaskan ke atas: remount ke RW, dorong dan remount kembali ke RO.

vkkeeper
sumber
1

itu sama yang harus mengekstrak dan mengemas kembali initrc.img dan mengedit initfile dengan kode mount / sistem

xsilen T
sumber
btw. Anda harus memulai avd dengan opsi -writeable-system
xsilen T
0

Salin file ke kartu SD?

Yah, saya anggap Anda suka menyalin data ke kartu SD dari komputer pengembang? Anda mungkin telah me-rooting alat dan membuat area yang Anda tangani tersedia?) Saya memiliki masalah yang sama untuk mengunggah file data untuk aplikasi saya (Android Studio 1.3.2 di Win7), tetapi.

  • Pertama-tama adb command-shell harus ditemukan di jalur: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (folder AppData disembunyikan, jadi Anda harus mengatur pengaturan folder tidak menyembunyikan file dan folder tersembunyi untuk menemukannya, Path berfungsi terlepas)
  • Anda harus mengeja jalur folder ke kanan atau Anda mendapatkan pesan kesalahan hanya-baca, kemungkinan besar itu harus dimulai dengan / sdcard atau hanya baca area. Segera setelah saya tidak ada masalah mendorong file ke emulator.

Jadi misalnya perintah adb dapat terlihat seperti ini:

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

Jan Bergström
sumber
0

Jika ada kegagalan dalam menyalin file read-only, Anda dapat mencoba mencari file asli di direktori root dan memodifikasinya dengan editor teks root (lebih disukai) editor teks RB, ia datang dengan aplikasi ROM Toolbox.

Abhishek Hamal
sumber
0

Coba ini di Terminal Emulator sebagai root:

restorecon -v -R /data/media
intrepidis
sumber
0

Dalam kasus saya, saya menggunakan perintah adb push ~/Desktop/file.txt ~/sdcard/

Saya mengubahnya menjadi ~/Desktop/file.txt /sdcard/dan kemudian berhasil.

Pastikan untuk memutuskan dan menghubungkan kembali telepon.

JavaBanana
sumber
Penulis pertanyaan ini bertanya tentang remounting sistem / sebagai baca-tulis, jawaban Anda agak off topic
Metonymy
0

Seperti yang disebutkan oleh chen-xing , cara paling sederhana adalah:

adb reboot

Tetapi bagi saya, saya harus mengubah pengaturan saya terlebih dahulu:

Pengaturan → Opsi pengembang → Akses root

Pastikan ADB memiliki akses Root:

masukkan deskripsi gambar di sini

Cillian Myles
sumber