Android पर केवल फ़ाइल सिस्टम पढ़ें


212

मैंने हाल ही में अपने Droid एक्स को जड़ दिया और लगता है कि सब कुछ पूरी तरह से काम कर रहा है। मैं में कुछ परिवर्तन किए build.propऔर जब मैं ऐसा adb push build.prop /system/मैं निम्नलिखित त्रुटि मिलती है: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system

मैं इसे कैसे ठीक करूं?


19
क्या आपने कोशिश की है adb remount, आपको क्या मिलता है?
सिल्वरस्क्रीन

एंड्रॉइड Google का सॉफ्टवेयर स्टैक है ... गैर-डेवलपर प्रश्नों के लिए, android.stackexchange.com
सेल्विन

2
कृपया ध्यान दें कि यह प्रश्न उस मामले से भ्रमित नहीं होना चाहिए जहां Android एप्लिकेशन कोड केवल-पढ़ने के लिए फ़ाइल सिस्टम त्रुटि के साथ विफल हो जाता है। यह आमतौर पर किसी स्थान को निर्दिष्ट किए बिना फ़ाइल लिखने की कोशिश करने के कारण होता है, अर्थात, रूट निर्देशिका में लिखने की कोशिश करना। यह प्रश्न केवल जड़ / विकास / इंजीनियरिंग उपकरणों पर Android की स्थापना को संशोधित करने के बारे में है।
क्रिस स्ट्रैटन

1
क्या एंड्रॉइड एमुलेटर के साथ ऐसा करने का कोई तरीका है ?? इनमें से कोई भी समाधान मेरे एमुलेटर के लिए काम नहीं करता है।
माइकशेम

जवाबों:


388

एंड्रॉइड के सभी फोन और संस्करणों में चीजें समान नहीं हैं।
रीमाउंटिंग के लिए विकल्प सीमित करना सबसे अच्छा होगा।

बस rw के रूप में रीमाउंट करें (पढ़ें / लिखें):

# mount -o rw,remount /system

एक बार जब आप बदलाव कर रहे हों, तो रिम टू आरओ (केवल पढ़ने के लिए):

# mount -o ro,remount /system

29
आप अपने पीसी पर भी ऐसा कर सकते हैं। adb खोल माउंट -o rw, रीमाउंट / सिस्टम
Matthias Weiler

8
के साथ संयोजन के रूप में उपयोग करें adb rootया आप फ़ाइल धक्का जब एक अनुमति अस्वीकृत हो जाएगा।
क्रिशवेबडेव १13

1
@ माइकहाके, ऐसा लगता है कि जब आप इसे निष्पादित करते हैं तो आप रूट नहीं थे।
कर्टिसलाईबोलिन

21
मेरे लिए काम नहीं करता है:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi

2
चूँकि मेरे पास वैसे भी रूट था, मैंने फ़ाइल को / sdcard में कॉपी किया, फिर इस्तेमाल किया (मेरे मामले में)mv hosts /system/etc/hosts
लॉरी एलियास

85
adb remount

मेरे लिए काम करता है और सबसे सरल समाधान लगता है।


6
"adb रीमाउंट - अगर आपने फ़ाइलों को / सिस्टम में पढ़ने के लिए केवल पुश मोड में होने के कारण फाइलों को पुश करने की कोशिश की है, तो adb रिमाउंट / सिस्टम को रीड-राइट मोड में दे देगा --- बशर्ते कि शेल में सही रूट हो ऐसा करने की अनुमति। यह माउंट -o आरडब्ल्यू, रिमाउंट / सिस्टम (रूट के रूप में) या कुछ और जैसे हाथ से एक लंबी कमांड टाइप करने की जगह लेता है। " ( स्रोत )। यदि आपके पास रूट अनुमति के साथ कोई समस्या है, तो पहले "एडीबी रूट" का प्रयास करें।
क्रिशवेबदेव

4
मुझे मिल गया है Not running as root. Try "adb root" first.। और फिर adbd cannot run as root in production builds
वडज़िम

1
नए उपकरणों पर ऐसा लगता है कि हमें भी $ adb disable-verityचलाने की आवश्यकता है और फिर डिवाइस को रिबूट करने से पहले$ adb remount
Nebel22

1
$ adb अक्षमता-सत्यता दें: अक्षमता केवल उपयोगकर्ता-निर्माण के लिए काम करती है
विलियम

3
यह काम नहीं करता है Not running as root. Try "adb root" first.:। मैंने प्रवेश किया adb rootऔर फिर दोबारा adb remountलेकिन अभी भी वही त्रुटि है:Not running as root. Try "adb root" first.
user924

78

यह एक Android मंच है जहाँ मैं एक ही सवाल पूछा था। आशा है कि यह किसी और की मदद करता है।

फोन पर एक टर्मिनल एमुलेटर पर:

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

फिर cmd प्रॉम्प्ट पर, करें adb push


3
adb shell <command>कंप्यूटर से इस्तेमाल किया जा सकता है (यदि आपके फोन में टर्मिनल की कमी है)
फ्लेचर 91

73

जबकि मुझे पता है कि सवाल असली डिवाइस के बारे में है, अगर किसी को एमुलेटर में इसी तरह के मुद्दे के साथ मिला है, तो जो भी उपकरण फरवरी, 2017 तक नवीनतम हैं, एमुलेटर को कमांड लाइन से लॉन्च करने की आवश्यकता है:

-writable-system

किसी भी चीज़ के लिए योग्य होना /system। इस झंडे के बिना remountया के किसी भी संयोजन mountको लिखने की अनुमति नहीं देगा /system

एमुलेटर को उस झंडे के साथ लॉन्च किए जाने के बाद, एक सिंगल के adb remountबाद adb rootपुश करने के लिए अनुमति प्राप्त करने के लिए पर्याप्त है /system

यहाँ कमांड लाइन का एक उदाहरण है जिसका उपयोग मैं अपने एमुलेटर को चलाने के लिए करता हूँ:

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

-avdझंडे के लिए मूल्य से आता है:

./emulator -list-avds

मेरा कमांड प्रॉम्प्ट तब तक बहुत धीमा हो जाता है जब तक एड-रूट और एडीबी रीमाउंट के साथ जारी नहीं रह सकता है, एम्यूलेटर-सिस्टम के साथ लॉन्च करने के बाद, कोई भी मदद कर सकता है?
बीइंग जेक

29

मुझे लगता है कि सबसे सुरक्षित तरीका है / सिस्टम को पढ़ना-लिखना, उपयोग करना:

mount -o remount,rw /system

और जब किया, इसे केवल-पढ़ने के लिए रिमूव करें:

mount -o remount,ro /system

6
एसओ में आपका स्वागत है! आपका उत्तर तकनीकी रूप से उपयोगी है, लेकिन अनिवार्य रूप से curtlee2002 के पूर्व उत्तर का एक डुप्लिकेट है। यह उनके जवाब पर एक टिप्पणी के रूप में बेहतर हो सकता है, "मैं सहमत हूं कि यह केवल पढ़ने-लिखने की पद्धति में बंद होने के बाद वापस पढ़ने के लिए स्विच करने के लिए सबसे सुरक्षित है।" हमारे पास लाखों प्रश्न हैं, इसलिए हमेशा एक और सवाल होगा जहां आप एक महान समाधान या नए दृष्टिकोण के साथ आने वाले हैं!
जोनाथन वान मैट्रे

1
यह केवल मेरे लिए काम करता है जब मैंने बयान से "," हटा दिया। यानी "" माउंट-
रे

@TechnikEmpire, वह स्वीकृत उत्तर का संदर्भ नहीं देता है।
पासचलिस

16

मेरी सैमसंग गैलेक्सी मिनी S5570 (सेलफोन पर रूट प्राप्त होने के बाद):

मुट्ठी, जड़ के रूप में, मैं भागा:

systemctl start adb

एक सामान्य उपयोगकर्ता के रूप में:

adb shell 
su 

टच स्क्रीन पर रूट की अनुमति दें

mount 

उन सभी माउंट पॉइंट्स को सूचीबद्ध करें जो हमारे पास हैं और हम देख सकते हैं, मेरे मामले में, / dev / stl12 आरओ / सिस्टम पर आरओ (केवल तैयार) के रूप में माउंट किया गया था, इसलिए हमें बस करने की आवश्यकता है:

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

इस उत्तर के लिए धन्यवाद। किसी कारण से मैंने रूट अनुमतियाँ देने के लिए कभी भी अपने फोन की स्क्रीन को नहीं देखा था और मुझे जो भी कोशिश की थी, उससे किसी भी तरह से इनकार नहीं किया गया था।
ग्राहम मिशेल

"आपको एक फ़ाइल सिस्टम को -t के साथ निर्दिष्ट करना होगा।", इसका क्या मतलब है?
नेहा

आर-माउंट आरडब्ल्यू, रिमाउंट -t ext4 / dev / block / vda / system, -t का अर्थ है मेरे उदाहरण में फाइल सिस्टम का प्रकार ext4
सेरोगो

11

कमांड प्रॉम्प्ट पर निम्नलिखित प्रयास करें:

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

यह होना चाहिएadb root remount
tqjustc

10
adb disable-verity
adb reboot
adb root
adb remount

यह मेरे लिए काम करता है, और सबसे सरल उपाय है।


7

यहाँ मेरे लिए क्या काम किया है। मैं एक एमुलेटेड एंड्रॉइड 7.1.1 (नूगाट) डिवाइस चला रहा था।

एक टर्मिनल पर, मैंने निम्नलिखित कमांड मारा। ध्यान देने योग्य एक बात है -लेखक-प्रणाली ध्वज

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

दूसरे टैब पर

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

आपके द्वारा / सिस्टम सामग्री पर किए गए सभी परिवर्तन पुनः आरंभ होने से बच जाएंगे।


4

मैंने एमुलेटर से जांच की और निम्नलिखित काम किया।

  1. अदब रिबूट
  2. adb root && adb remount && adb पुश ~ / डेस्कटॉप / होस्ट / सिस्टम / आदि / होस्ट

जैसा कि ऊपर उल्लेख किया गया है, एकल शॉट में दूसरे चरण को निष्पादित करें।


3

फोन पर टर्मिनल एमुलेटर खोलें: फिर

adb shell

उसके बाद डेमॉन शुरू किया जाता है

su
mount -o rw,remount /mnt/sdcard

तब रीड केवल पढ़ने-लिखने में बदल जाता है।


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

मेरे लिये कार्य करता है


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

मुझे यह लेख Google से मिला, और मैंने सोचा कि मैं आवश्यक कदम एक सोनी एक्सपीरिया जेड (4.2.2) पर जोड़ दूंगा।

Sony के पास एक वॉचडॉग प्रक्रिया है, जो पता लगाती है कि आपने r / और / सिस्टम पर rw को बदल दिया है (ये केवल वही हैं जिन्हें मैं संशोधित करने की कोशिश कर रहा था) और संभवतः अन्य।

निम्नलिखित था कि मैं उन परिवर्तनों को करने के लिए दौड़ा जो मैं प्राप्त करने की कोशिश कर रहा था। मैंने इन्हें एक विंडो में चिपकाया, क्योंकि इसे अपने आप को पुनः आरंभ करने से रोकने के लिए / sbin / ric से निष्पादित बिट को जल्दी से हटाने की आवश्यकता है। (मैंने कोशिश की stop ric; यह काम नहीं करता है - हालांकि यह फोन पर एंड्रॉइड के पिछले संस्करण पर काम करता है)।

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

मैंने यहां मेजबान फ़ाइल को संशोधित किया है, इसलिए यह वह जगह है जहां आप फाइलसिस्टम के लिए आवश्यक बदलाव करते हैं। चीजों को छोड़ने के लिए जिस तरह से हमने उन्हें पाया, ऐसा करें:

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

किस बिंदु पर रिक को स्वचालित रूप से पुनरारंभ करना चाहिए। (यह मेरे लिए स्वचालित रूप से पुनः आरंभ हुआ।)


1

Jan Bergström के उत्तर में थोड़ा और जोड़ना: क्योंकि एंड्रॉइड एक लिनक्स आधारित प्रणाली है, और लिनक्स में पथ में आगे स्लैश (../) होते हैं, जबकि पुश कमांड का उपयोग करते हुए, एंड्रॉइड डिवाइस में गंतव्य पथ को परिभाषित करने के लिए "/" का उपयोग करें।

उदाहरण के लिए, कमांड जाता है: adb push C: \ Users \ admin \ Desktop \ 1.JPG sdcard / Pictures /

ध्यान दें कि, विंडोज़ पीसी से धकेलने के लिए फ़ाइल के स्रोत पथ को परिभाषित करने के लिए बैक स्लैश का उपयोग किया जाता है और गंतव्य पथ को परिभाषित करने के लिए फ़ॉरवर्ड स्लैश का उपयोग किया जाता है क्योंकि एंड्रॉइड एक लिनक्स आधारित प्रणाली है। आपको इस कमांड का उपयोग करने के लिए एक रूट के रूप में कार्य करने की आवश्यकता नहीं है और यह उत्पादन उपकरणों पर पूरी तरह से ठीक काम करता है।


1

कभी-कभी आपको त्रुटि मिलती है क्योंकि फोन में गंतव्य स्थान मौजूद नहीं है। उदाहरण के लिए, कुछ Android फ़ोन बाहरी संग्रहण स्थान के /storage/emulated/legacyबजाय है /storage/emulated/0


1

धन्यवाद, Sérgio , पैरामीटर विचार के बिना "माउंट" कमांड के लिए। मैंने बनाया नहीं करनी adb pushमें /data/data/com.my.app/libकुछ परीक्षण जारी करने के लिए, और प्राप्त "रीड-ओनली फाइल सिस्टम" संदेश।

ls कमांड मुझे दिखाता है:

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

तो, यह समझा जाता है, कि "lib" निर्देशिका को अन्य अनुप्रयोग निर्देशिकाओं से अलग किया गया है।

कमांड mount -o rw,remount /mnt/asec "r / o fs" समस्या को हल नहीं करता है, यह निर्देशिका पैरामीटर से पहले डिवाइस पैरामीटर चाहता है।

"df" कमांड ने भी मदद नहीं की, लेकिन यह दर्शाता है कि मेरी /mnt/asec/com.my.app-1निर्देशिका अलग-अलग आरोह बिंदु पर है।

तब मैं mountवॉयला देखता हूँ !

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

अगले चरणों को पहले से ही ऊपर की ओर वर्णित किया गया है: आरडब्ल्यू को रीमाउंट करें, पुश करें और आरओ पर वापस जाएं।


1

यह बताता है कि initrc.img को निकालना और फिर से भरना होगा और initफ़ाइल को माउंट / सिस्टम के कोड के साथ संपादित करना होगा


btw। आपको -विस्तारनीय-सिस्टम विकल्पों के साथ avd शुरू करना होगा
xsilen T

0

एसडी-कार्ड में फाइल कॉपी करें?

ठीक है, मुझे लगता है कि आप डेवलपर्स कंप्यूटर से एसडी-कार्ड में डेटा कॉपी करना चाहते हैं? हो सकता है कि आपने वसीयत को जड़ दिया हो और आपके द्वारा उपलब्ध क्षेत्र को उपलब्ध कराया हो?) मुझे अपने आवेदन के लिए डेटा फ़ाइलों को अपलोड करने की समान समस्या थी (Win7 में एंड्रॉइड स्टूडियो 1.3.2), लेकिन।

  • पहले adb कमांड-शेल को वें पथ में मिलना चाहिए: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (फ़ोल्डर AppData छिपा हुआ है, इसलिए आपको सेट करना होगा फ़ोल्डर सेटअप छुप छुपाने के लिए फ़ाइलें और फ़ोल्डर इसे खोजने के लिए नहीं, पथ की परवाह किए बिना काम करता है)
  • आपको फ़ोल्डर पथ को सही वर्तनी देना है या आपको केवल-पढ़ने में त्रुटि संदेश मिलता है, सबसे अधिक संभावना है कि यह / sdcard के साथ शुरू होना चाहिए या यह केवल क्षेत्र पढ़ा जाता है। जैसे ही मुझे फ़ाइल को एमुलेटर पर धकेलने में कोई समस्या नहीं हुई।

उदाहरण के लिए adb कमांड इस तरह दिख सकता है:

adb पुश C: \ testdata \ t.txt /sdcard/download/t.txt


0

यदि रीड-ओनली फ़ाइल की प्रतिलिपि बनाने में विफलता है, तो आप मूल निर्देशिका में मूल फ़ाइल का पता लगाने की कोशिश कर सकते हैं और इसे रूट टेक्स्ट एडिटर (अधिमानतः) आरबी टेक्स्ट एडिटर के साथ संशोधित कर सकते हैं, यह ROM टूलबॉक्स ऐप के साथ आता है।


0

मूल के रूप में एक टर्मिनल एमुलेटर में यह प्रयास करें:

restorecon -v -R /data/media

0

मेरे मामले में मैं कमांड अदब पुश का उपयोग कर रहा था ~/Desktop/file.txt ~/sdcard/

मैंने इसे बदल दिया ~/Desktop/file.txt /sdcard/और फिर इसने काम किया।

फोन को डिस्कनेक्ट और रीकनेक्ट करना सुनिश्चित करें।


इस प्रश्न का लेखक / प्रणाली को पढ़ने-लिखने के रूप में
रिमूव करने के

0

जैसा कि chen-xing ने सबसे सरल तरीका बताया है:

adb reboot

लेकिन मेरे लिए मुझे अपनी सेटिंग पहले बदलनी होगी:

सेटिंग → डेवलपर विकल्प → रूट एक्सेस

सुनिश्चित करें कि एडीबी की रूट एक्सेस है:

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.