Hệ thống chỉ đọc tệp trên Android


212

Gần đây tôi đã root Droid X của tôi và mọi thứ dường như đang hoạt động hoàn hảo. Tôi đã thực hiện một số thay đổi build.propvà khi adb push build.prop /system/tôi nhận được lỗi sau : failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Làm thế nào tôi có thể sửa lỗi này?


19
bạn đã thử chưa adb remount, bạn nhận được gì?
silverfox

Android là ngăn xếp phần mềm của Google ... Đối với các câu hỏi không dành cho nhà phát triển, hãy xem android.stackexchange.com
Selvin

2
Xin lưu ý rằng không nên nhầm lẫn câu hỏi này với trường hợp mã Ứng dụng Android bị lỗi với lỗi hệ thống tệp chỉ đọc. Điều đó thường được gây ra bởi việc cố gắng ghi một tệp mà không chỉ định vị trí, tức là cố gắng ghi vào thư mục gốc. Câu hỏi này chỉ là về việc sửa đổi cài đặt Android trên các thiết bị đã được root / phát triển / kỹ thuật.
Chris Stratton

1
Có cách nào để làm điều này với một trình giả lập Android ?? Không có giải pháp nào trong số này làm việc cho trình giả lập của tôi.
MikeSool

Câu trả lời:


388

Không phải tất cả điện thoại và phiên bản Android đều có những thứ được gắn giống nhau.
Tùy chọn giới hạn khi kể lại sẽ là tốt nhất.

Đơn giản chỉ cần kể lại là rw (Đọc / Viết):

# mount -o rw,remount /system

Khi bạn đã thực hiện xong các thay đổi, hãy kết nối với ro (chỉ đọc):

# mount -o ro,remount /system

29
Bạn cũng có thể làm điều này trên PC của bạn. adb shell mount -o rw, remount / system
Matthias Weiler

8
Sử dụng cùng với adb roothoặc bạn sẽ nhận được Quyền từ chối khi đẩy tệp.
KrisWebDev

1
@MikeHenke, có vẻ như bạn không root khi bạn thực thi nó.
CurtisLeeBolin

21
Không làm việc cho tôi:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi

2
Vì dù sao tôi cũng đã root, tôi đã sao chép tệp vào / sdcard, sau đó được sử dụng (trong trường hợp của tôi)mv hosts /system/etc/hosts
Lauri Elias

85
adb remount

làm việc cho tôi và dường như là giải pháp đơn giản nhất.


6
"adb remount - Nếu bạn gặp lỗi khi cố gắng đẩy tệp vào / hệ thống do nó ở chế độ chỉ đọc, thì adb remount sẽ chuyển / hệ thống sang chế độ đọc-ghi --- với điều kiện shell có root đúng quyền để làm như vậy. Điều này thay thế việc phải gõ một lệnh dài hơn bằng tay như mount -o rw, remount / system (với quyền root) hoặc một cái gì đó. " ( nguồn ). Nếu bạn có bất kỳ vấn đề nào với quyền root, hãy thử "adb root" trước.
KrisWebDev

4
Tôi đã có Not running as root. Try "adb root" first.. Và sau đó adbd cannot run as root in production builds.
Vadzim

1
Trên các thiết bị mới hơn, có vẻ như chúng ta cũng cần phải $ adb disable-veritykhởi động lại thiết bị trước khi có thể chạy$ adb remount
Nebel22

1
$ adb vô hiệu hóa tính xác thực cho: vô hiệu hóa chỉ hoạt động đối với các bản dựng userdebug
William

3
nó không hoạt động : Not running as root. Try "adb root" first.. Tôi đã nhập adb rootvà sau đó một lần nữa adb remountnhưng vẫn cùng một lỗi:Not running as root. Try "adb root" first.
user924

78

Nhận được điều này từ một diễn đàn Android nơi tôi đã hỏi cùng một câu hỏi. Hy vọng điều này sẽ giúp người khác.

Trên một trình giả lập thiết bị đầu cuối trên điện thoại:

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

Sau đó, trên dấu nhắc cmd, làm adb push


3
adb shell <command>có thể được sử dụng từ máy tính (nếu bạn thiếu thiết bị đầu cuối trên điện thoại)
Fletcher91

73

Mặc dù tôi biết câu hỏi là về thiết bị thực, nhưng trong trường hợp ai đó gặp phải vấn đề tương tự trong trình giả lập, với bất kỳ công cụ nào là mới nhất kể từ tháng 2 năm 2017, trình giả lập cần được khởi chạy từ dòng lệnh với:

-writable-system

Đối với bất cứ điều gì để có thể ghi vào /system. Không có cờ này, không có sự kết hợp remounthoặc mountsẽ cho phép một người viết /system.

Sau khi trình giả lập được khởi chạy cùng với cờ đó, một lần adb remountsau adb rootlà đủ để có quyền đẩy tới /system.

Đây là một ví dụ về dòng lệnh tôi sử dụng để chạy trình giả lập của mình:

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

Giá trị cho các -avdcờ đến từ:

./emulator -list-avds

Dấu nhắc lệnh của tôi trở nên cực kỳ chậm cho đến khi không thể tiếp tục với adb root và adb remount sau khi khởi chạy trình giả lập với -writable-system, có ai có thể giúp đỡ không?
Bee Jk

29

Tôi nghĩ rằng cách an toàn nhất là kể lại / hệ thống là đọc-ghi, sử dụng:

mount -o remount,rw /system

và khi hoàn tất, hãy xem lại dưới dạng chỉ đọc:

mount -o remount,ro /system

6
Chào mừng đến với SO! Câu trả lời của bạn là hữu ích về mặt kỹ thuật, nhưng về cơ bản là một bản sao của câu trả lời trước của curicatee2002. Điều này có thể tốt hơn khi nhận xét về câu trả lời của anh ấy nói rằng "Tôi đồng ý rằng an toàn nhất là chuyển về chế độ chỉ đọc sau khi chuyển qua chế độ đọc-ghi". Chúng tôi có hàng triệu câu hỏi, vì vậy sẽ luôn có một câu hỏi khác mà bạn là người đầu tiên đi kèm với một giải pháp tuyệt vời hoặc một viễn cảnh tươi mới!
Jonathan Van Matre

1
điều này chỉ làm việc cho tôi khi tôi xóa "," khỏi câu lệnh. tức là "" mount -o remount rw / system ""
propjk007

@TechnikEmpire, anh không đề cập đến câu trả lời được chấp nhận.
Paschalis

16

Trên Samsung galaxy mini S5570 của tôi (sau khi đã root trên điện thoại di động):

Nắm tay, là root, tôi chạy:

systemctl start adb

như một người dùng bình thường:

adb shell 
su 

Cấp quyền root trên màn hình cảm ứng

mount 

liệt kê tất cả các điểm gắn kết mà chúng ta có và chúng ta có thể thấy, trong trường hợp của tôi, rằng / dev / stl12 đã được gắn trên / system dưới dạng ro (chỉ sẵn sàng), vì vậy chúng ta chỉ cần làm:

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

Cảm ơn bạn cho câu trả lời này. Vì một số lý do, tôi không bao giờ nhìn vào màn hình trên điện thoại để cấp quyền root và bị từ chối truy cập bất kể tôi đã thử gì.
Graham Mitchell

nói "Bạn phải chỉ định loại hệ thống tệp với -t.", điều này có nghĩa là gì?
NehaK

mount -o rw, remount -t ext4 / dev / block / vda / system, -t có nghĩa là loại hệ thống tệp trong ví dụ của tôi ext4
Sérgio

11

Hãy thử làm như sau trên dấu nhắc lệnh:

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

Nó sẽ làadb root remount
tqjustc

10
adb disable-verity
adb reboot
adb root
adb remount

Điều này làm việc cho tôi, và là giải pháp đơn giản nhất.


7

Đây là những gì làm việc cho tôi. Tôi đang chạy một thiết bị Android 7.1.1 (Nougat) giả lập.

Trên một thiết bị đầu cuối, tôi nhấn lệnh sau. Một điều cần chú ý là cờ -writable-system

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

Trên một tab khác

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

Tất cả các thay đổi mà bạn thực hiện trên / nội dung hệ thống sẽ tồn tại khi khởi động lại.


4

Tôi đã kiểm tra với trình giả lập và làm việc sau đây.

  1. khởi động lại adb
  2. root adb && adb remount && adb đẩy ~ / Desktop / hosts / system / etc / hosts

Như đã đề cập ở trên, thực hiện bước thứ hai trong một lần bắn.


3

Mở trình giả lập thiết bị đầu cuối trên điện thoại: sau đó

adb shell

sau đó daemon được bắt đầu

su
mount -o rw,remount /mnt/sdcard

sau đó chỉ đọc được chuyển đổi thành đọc-ghi.


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

làm việc cho tôi


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

Tôi đã tìm thấy bài viết này từ google và nghĩ rằng tôi sẽ thêm các bước cần thiết trên Sony Xperia Z (4.2.2).

Sony có một quy trình theo dõi để phát hiện khi bạn thay đổi ro thành rw trên / và / hệ thống (đây là những quy trình duy nhất tôi đang cố gắng sửa đổi) và có thể cả những người khác.

Sau đây là những gì tôi đã chạy để thực hiện những thay đổi mà tôi đang cố gắng đạt được. Tôi đã dán chúng vào một cửa sổ, bởi vì việc loại bỏ bit thực thi khỏi / sbin / ric cần phải được thực hiện nhanh chóng để ngăn chặn nó tự khởi động lại. (Tôi đã thử stop ric; điều này không hoạt động - mặc dù nó hoạt động trên phiên bản Android trước trên điện thoại).

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

Tôi đã sửa đổi tệp máy chủ ở đây, vì vậy đây là nơi bạn thực hiện các thay đổi bạn cần cho hệ thống tệp. Để mọi thứ theo cách chúng tôi tìm thấy, hãy làm điều này:

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

Tại điểm nào ric sẽ tự động khởi động lại. (Nó tự động khởi động lại cho tôi.)


1

Thêm một chút nữa vào câu trả lời của Jan Bergström: Bởi vì Android là một hệ thống dựa trên Linux và đường dẫn trong Linux chứa các dấu gạch chéo (../), trong khi sử dụng lệnh đẩy, hãy sử dụng "/" để xác định đường dẫn đích trong thiết bị Android.

Ví dụ: lệnh đi: adb đẩy C: \ Users \ admin \ Desktop \ 1.JPG sdcard / hình ảnh /

Lưu ý rằng ở đây, dấu gạch chéo ngược được sử dụng để xác định đường dẫn nguồn của tệp sẽ được đẩy từ Windows PC và dấu gạch chéo được sử dụng để xác định đường dẫn đích vì Android là hệ thống dựa trên Linux. Bạn không phải đóng vai trò là người dùng gốc để sử dụng lệnh này và đồng thời, nó hoạt động hoàn toàn tốt trên các thiết bị sản xuất.


1

Đôi khi bạn gặp lỗi vì vị trí đích trong điện thoại không tồn tại. Ví dụ, một số vị trí lưu trữ bên ngoài của điện thoại Android /storage/emulated/legacythay vì /storage/emulated/0.


1

Cảm ơn, Sérgio , cho lệnh "mount" mà không có ý tưởng tham số. Tôi sẽ cần phải làm adb pushvào /data/data/com.my.app/libđối với một số vấn đề kiểm tra, và nhận được "Read-only hệ thống tập tin" tin nhắn.

Lệnh ls chỉ cho tôi:

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

Vì vậy, nó được hiểu, thư mục "lib" được tách ra khỏi các thư mục ứng dụng khác.

Lệnh mount -o rw,remount /mnt/asec không giải quyết vấn đề "r / o fs", nó muốn tham số thiết bị trước tham số thư mục.

Lệnh "df" cũng không giúp được gì, nhưng cho thấy /mnt/asec/com.my.app-1thư mục của tôi đang ở điểm gắn kết riêng.

Sau đó, tôi nhìn mountvà voila!

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

Các bước tiếp theo đã được mô tả trở lên: nối lại với RW, đẩy và quay lại RO.


1

nó phải trích xuất và đóng gói lại initrc.img và chỉnh sửa inittệp với mã của mount / system


btw. bạn phải bắt đầu avd với các tùy chọn hệ thống có thể ghi được
xsilen T

0

Sao chép tập tin vào thẻ SD?

Chà, tôi giả sử bạn muốn sao chép dữ liệu vào thẻ Sd từ máy tính của nhà phát triển? Bạn có thể đã bắt nguồn từ thiết kế và cung cấp khu vực bạn giải quyết?) Tôi gặp vấn đề tương tự để tải lên các tệp dữ liệu cho ứng dụng của mình (Android Studio 1.3.2 trong Win7), nhưng.

  • Đầu tiên, trình bao lệnh adb phải được tìm thấy trong đường dẫn thứ: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (thư mục AppData bị ẩn, vì vậy bạn phải đặt thiết lập thư mục không ẩn các tệp và thư mục bị che giấu để tìm thấy nó, Đường dẫn hoạt động bất kể)
  • Bạn phải đánh vần đúng đường dẫn thư mục hoặc bạn nhận được thông báo lỗi chỉ đọc, rất có thể nó phải bắt đầu bằng / sdcard hoặc đó là khu vực chỉ đọc. Ngay sau khi tôi không có vấn đề đẩy tập tin vào trình giả lập.

Vì vậy, ví dụ lệnh adb có thể trông như thế này:

adb đẩy C: \ testdata \ t.txt /sdcard/doad/t.txt


0

Nếu thất bại trong việc sao chép tệp chỉ đọc, bạn có thể thử định vị tệp gốc trong thư mục gốc và sửa đổi nó bằng trình soạn thảo văn bản gốc (tốt nhất là) trình soạn thảo văn bản RB, nó đi kèm với ứng dụng ROM Toolbox.


0

Hãy thử điều này trong Trình mô phỏng đầu cuối với quyền root:

restorecon -v -R /data/media

0

Trong trường hợp của tôi, tôi đã sử dụng lệnh adb đẩy ~/Desktop/file.txt ~/sdcard/

Tôi đã thay đổi nó ~/Desktop/file.txt /sdcard/và sau đó nó hoạt động.

Đảm bảo ngắt kết nối và kết nối lại điện thoại.


Tác giả của câu hỏi này hỏi về việc giới thiệu / hệ thống là đọc-viết, câu trả lời của bạn không đúng chủ đề
Ẩn dụ

0

Như chen-xing đã đề cập cách đơn giản nhất là:

adb reboot

Nhưng đối với tôi, tôi đã phải thay đổi cài đặt của mình trước:

Cài đặt → Tùy chọn nhà phát triển → Truy cập root

Đảm bảo ADB có quyền truy cập Root:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.