Android'de salt okunur dosya sistemi


212

Kısa bir süre önce Droid X'umu köklendirdim ve her şey mükemmel çalışıyor. Ben bazı değişiklikler yapılmış build.propve ben ne zaman adb push build.prop /system/aşağıdaki hatayı alıyorum: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Bunu nasıl düzeltebilirim?


19
denedin mi adb remount, ne alıyorsun?
silverfox

Android, Google'ın yazılım yığını ... Geliştirici olmayan sorular için bkz. Android.stackexchange.com
Selvin

2
Bu sorunun, Android Uygulama kodunun salt okunur bir dosya sistemi hatasıyla başarısız olduğu durumla karıştırılmaması gerektiğini lütfen unutmayın . Bunun nedeni genellikle bir konum belirtmeden dosya yazmaya çalışmak, yani kök dizine yazmaya çalışmaktır. Bu soru yalnızca köklü / geliştirme / mühendislik cihazlarına Android'in kurulumunu değiştirmekle ilgilidir.
Chris Stratton

1
Bir android emülatör ile bunu yapmanın bir yolu var mı ?? Bu çözümlerin hiçbiri taklitçim için çalışmıyor.
MikeSchem

Yanıtlar:


388

Android'in tüm telefonları ve sürümleri aynı şeyleri monte etmiyor.
Yeniden montaj sırasında seçenekleri sınırlamak en iyisi olacaktır.

Basitçe rw olarak yeniden okuma (Okuma / Yazma):

# mount -o rw,remount /system

Değişiklik yapmayı bitirdiğinizde, ro (yeniden salt okunur) ifadesine yeniden bağlayın:

# mount -o ro,remount /system

30
Bunu PC'nizde de yapabilirsiniz. adb shell mount -o rw, yeniden montaj / sistem
Matthias Weiler

8
adb rootDosyayla birlikte kullanıldığında veya dosyayı iterken İzin Reddedildi alırsınız.
KrisWebDev

1
@MikeHenke, yürüttüğünüzde kök değilmiş gibi görünüyorsunuz.
CurtisLeeBolin

21
Benim için çalışmıyor:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi

2
Zaten root olduğumdan, dosyayı / sdcard'a kopyaladım, sonra kullandım (benim durumumda)mv hosts /system/etc/hosts
Lauri Elias

85
adb remount

benim için çalışıyor ve en basit çözüm gibi görünüyor.


6
"adb remount - Salt okunur modda olması nedeniyle dosyaları / sisteme aktarmaya çalışırken hatalarla karşılaşırsanız, adb remount / kabuk okuma-yazma moduna geçecektir --- kabuğun doğru kökü olması şartıyla Bu, mount -o rw, remount / system (root olarak) veya başka bir şey gibi daha uzun bir komutu el ile yazmak zorunda kalmanın yerini alır. " ( kaynak ). Kök izinleriyle ilgili herhangi bir sorun yaşarsanız, daha önce "adb root" u deneyin.
KrisWebDev

4
Anladım Not running as root. Try "adb root" first.. Ve sonra adbd cannot run as root in production builds.
Vadzim

1
Daha yeni cihazlarda $ adb disable-verity, çalıştırmadan önce cihazı da yeniden başlatmamız gerekiyor gibi görünüyor$ adb remount
Nebel22

1
$ adb devre dışı bırakma ver: devre dışı bırakma yalnızca kullanıcı tanımlı sürümler için çalışır
William

3
çalışmıyor: Not running as root. Try "adb root" first.. Ben girdim adb rootve sonra tekrar adb remountama yine aynı hata:Not running as root. Try "adb root" first.
user924

78

Bunu aynı soruyu sorduğum bir Android forumundan aldım. Umarım bu başka birine yardımcı olur.

Telefondaki bir terminal emülatöründe:

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

Sonra cmd isteminde şunu yapın: adb push


3
adb shell <command>bilgisayardan kullanılabilir (telefonunuzda terminal yoksa)
Fletcher91

73

Sorunun gerçek cihazla ilgili olduğunu bilsem de, birinin emülatörde benzer bir sorunla karşılaşması durumunda, Şubat 2017 itibariyle en son hangi araçlarla olursa olsun, emülatörün komut satırından başlatılması gerekir:

-writable-system

Her şeyin yazılabilir olması için /system. Bu bayrak olmadanremount veya mountyazmak bir izin verecektir /system.

Emülatör bu bayrakla başlatıldıktan sonra, tek bir adb remount sonra adb root, itme izinleri almak için sonra yeterlidir /system.

İşte öykünücümü çalıştırmak için kullandığım komut satırı örneği:

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

-avdBayrakların değeri şuradan gelir:

./emulator -list-avds

-writable-system ile başlatma emülatöründen sonra adb root ve adb remount ile devam edene kadar komut istemim son derece yavaş, kimse yardımcı olabilir?
Beeing Jk

29

En güvenli yolu kullanarak / sistemi okuma-yazma olarak yeniden montaj olduğunu düşünüyorum:

mount -o remount,rw /system

ve bittiğinde, salt okunur olarak yeniden takın:

mount -o remount,ro /system

6
SO hoş geldiniz! Cevabınız teknik olarak faydalı, ancak aslında curtlee2002'nin önceki cevabının bir kopyası. Bu, "Okuma-yazma modunda dolaştıktan sonra salt okunurluğa geri dönmenin en güvenli olduğunu kabul ediyorum" diyen cevabının bir yorumu olarak daha iyi olabilirdi. Milyonlarca sorumuz var, bu yüzden her zaman harika bir çözüm veya yeni bir bakış açısıyla gelen ilk kişi olduğunuz başka bir soru olacak!
Jonathan Van Matre

1
bu sadece ifadeyi "," kaldırdığımda benim için çalıştı. yani "" -o yeniden bağlama rw / montaj sistemi ""
propjk007

@TechnikEmpire, kabul edilen cevaba atıfta bulunmuyor.
Paschalis

16

Samsung galaxy mini S5570'imde (cep telefonundan root aldıktan sonra):

Yumruk, kök olarak koştum:

systemctl start adb

normal kullanıcı olarak:

adb shell 
su 

Dokunmatik ekranda kök izinleri verme

mount 

sahip olduğumuz tüm bağlama noktalarını listeliyoruz ve benim durumumda, / dev / stl12'nin / sisteme ro (yalnızca hazır) olarak monte edildiğini görebiliyoruz, bu yüzden yapmanız gerekenler:

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

Bu cevap için teşekkürler. Herhangi bir nedenden dolayı telefonumun ekranına hiçbir zaman root izinleri vermedim ve ne denesem denedim reddedildim.
Graham Mitchell

"-t ile bir dosya sistemi türü belirtmelisiniz" diyerek, bunun anlamı nedir?
NehaK

mount -o rw, remount -t ext4 / dev / block / vda / system, -t örneğimdeki ext4 dosya sistemi türü anlamına gelir
Sérgio

11

Komut isteminde aşağıdakileri deneyin:

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

O olmalıadb root remount
tqjustc

10
adb disable-verity
adb reboot
adb root
adb remount

Bu benim için çalışıyor ve en basit çözüm.


7

İşte benim için işe yarayan. Taklit edilmiş bir Android 7.1.1 (Nougat) cihazı çalıştırıyordum.

Bir terminalde, aşağıdaki komutu vurdum. Dikkat edilmesi gereken bir şey-yazılabilir sistem bayrağıdır

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

Başka bir sekmede

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

/ System içeriğinde yaptığınız tüm değişiklikler, yeniden başlatma işleminden sonra da devam eder.


4

Ben emülatör ile kontrol ve takip çalıştı.

  1. adb yeniden başlatma
  2. adb root && adb remount && adb push ~ / Masaüstü / ana bilgisayarlar / sistem / vb / ana bilgisayarlar

Yukarıda da belirtildiği gibi, tek adımda ikinci adımı uygulayın.


3

Telefondaki terminal emülatörünü açın: sonra

adb shell

arka plan programı başladıktan sonra

su
mount -o rw,remount /mnt/sdcard

daha sonra salt okunur okuma-yazma özelliğine dönüştürülür.


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

benim için çalışıyor


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

Bu makaleyi Google'dan buldum ve bir Sony Xperia Z (4.2.2) için gerekli adımları ekleyeceğimi düşündüm.

Sony, ro ve rw'yi / ve / system olarak değiştirdiğinizde (bunlar sadece değiştirmeye çalıştığım olanlar) ve muhtemelen diğerlerini algılayan bir gözlemci sürecine sahiptir.

Aşağıda elde etmeye çalıştığım değişiklikleri gerçekleştirmek için koştum. Bunları bir pencereye yapıştırdım, çünkü yürütme bitini / sbin / ric'dan kaldırmanın kendisini yeniden başlatmasını durdurmak için hızlı bir şekilde yapılması gerekiyor. (Denedim stop ric; bu işe yaramıyor - telefonda Android'in önceki bir sürümünde çalışmasına rağmen).

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

Buradaki hosts dosyasını değiştirdim, bu yüzden dosya sisteminde yapmanız gereken değişiklikleri yaptığınız yer burası. İşleri onları bulduğumuz şekilde bırakmak için şunu yapın:

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

Bu noktada ric otomatik olarak yeniden başlamalıdır. (Benim için otomatik olarak yeniden başladı.)


1

Jan Bergström'ün cevabına biraz daha ekleme: Android Linux tabanlı bir sistem olduğundan ve Linux'ta yol eğik çizgi (../) içerdiğinden, push komutunu kullanırken Android cihazdaki hedef yolunu tanımlamak için "/" kullanın.

Örneğin, komut şu şekildedir: adb push C: \ Users \ admin \ Desktop \ 1.JPG sdcard / pictures /

Burada, eğik çizgilerin Windows PC'den aktarılacak dosyanın kaynak yolunu tanımlamak için kullanıldığına ve Android'in Linux tabanlı bir sistem olması nedeniyle hedef eğim tanımlamak için eğik çizgi kullanıldığına dikkat edin. Bu komutu kullanmak için bir kök gibi davranmanız gerekmez ve ayrıca üretim cihazlarında mükemmel çalışır.


1

Bazen telefondaki hedef konum mevcut olmadığından hatayı alırsınız. Örneğin, bazı android telefon harici depolama yeri /storage/emulated/legacyyerine /storage/emulated/0.


1

Teşekkürler, Sérgio , parametre fikri olmadan "mount" komutu için. Yapılan I ihtiyacım olacağını adb pushiçine/data/data/com.my.app/lib "Salt okunur dosya sistemi" mesajı bazı test sorunu için, ve olsun.

ls komutu bana gösterir:

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

Böylece, "lib" dizininin diğer uygulama dizinlerinden ayrıldığı anlaşılmaktadır.

komuta mount -o rw,remount /mnt/asec "r / o fs" sorununu çözmedi, dizin parametresinden önce cihaz parametresi istiyor.

"df" komutu da yardımcı olmadı, ancak /mnt/asec/com.my.app-1 dizinimin ayrı bağlama noktasında olduğunu gösteriyor.

Sonra bakıyorum mountve işte!

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

Sonraki adımlar zaten yukarıda açıklanmıştır: RW'ye yeniden takın, itin ve RO'ya geri takın.


1

initrc.img initdosyasını ayıklayıp yeniden paketlemesi ve mount / system koduyla düzenlemesi gereken adlar


Btw. avd'yi -writeable sistem seçenekleriyle başlatmalısınız
xsilen T

0

Dosyalar SD karta kopyalansın mı?

Geliştiriciler bilgisayarından Sd karta veri kopyalamak istediğinizi varsayalım? Bu cihazı köklendirmiş ve adreslediğiniz alanı kullanılabilir hale getirmiş olabilir misiniz?) Uygulamam için veri dosyalarını yüklemek için aynı sorunla karşılaştım (Win7'de Android Studio 1.3.2), ancak.

  • İlk olarak adb komut kabuğunun bu yolda bulunması gerekir: PATH =% PATH%; C: \ Kullanıcılar \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (AppData klasörü gizlidir, bu nedenle klasör kurulumu gizli dosyaları ve klasörü bulmak için gizlemiyorsa, Yol ne olursa olsun çalışır)
  • Klasör yolunu doğru yazmanız veya salt okunur bir hata iletisi almanız gerekir, büyük olasılıkla / sdcard ile başlamalıdır veya salt okunur bir alandır. Dosyayı öykünücüye aktarırken sorun yaşamaya başlar başlamaz.

Örneğin, adb komutu şöyle görünebilir:

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


0

Salt okunur dosyayı kopyalamada bir hata varsa, orijinal dosyayı kök dizinde bulmayı ve bir kök metin düzenleyicisi (tercihen) RB metin düzenleyicisi ile değiştirmeyi deneyebilirsiniz, ROM Araç Kutusu uygulaması ile birlikte gelir.


0

Bunu bir Terminal Emülatöründe root olarak deneyin:

restorecon -v -R /data/media

0

Benim durumumda adb push komutunu kullanıyordum ~/Desktop/file.txt ~/sdcard/

Olarak değiştirdim ~/Desktop/file.txt /sdcard/ ve sonra işe yaradı.

Telefonun bağlantısını kestiğinizden ve yeniden bağladığınızdan emin olun.


Bu sorunun yazarı / sistemin okuma-yazma olarak yeniden monte edilmesini soruyor, cevabınız biraz konu dışı
Metonymy

0

As chen-xing söz basit yoludur:

adb reboot

Ama benim için önce ayarlarımı değiştirmek zorunda kaldım:

Ayarlar → Geliştirici seçenekleri → Kök erişimi

ADB'nin Kök erişimine sahip olduğundan emin olun:

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.