Android에서 파일 시스템 만 읽기


212

나는 최근에 Droid X를 근절했으며 모든 것이 완벽하게 작동하는 것 같습니다. 나는 몇 가지 변경을 build.prop하고 내가 할 때 adb push build.prop /system/나는 다음과 같은 오류가 발생합니다 : failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

이 문제를 어떻게 해결할 수 있습니까?


19
당신은 adb remount무엇을 얻습니까?
silverfox

안드로이드는 구글의 소프트웨어 스택입니다 ... 개발자가 아닌 질문은 android.stackexchange.com
Selvin

2
이 질문을 Android 애플리케이션 코드가 읽기 전용 파일 시스템 오류로 실패한 경우와 혼동해서는 안됩니다 . 일반적으로 위치를 지정하지 않고 파일을 쓰려고 시도합니다 (예 : 루트 디렉토리에 쓰려고 시도 함). 이 질문은 루팅 / 개발 / 엔지니어링 장치에서 Android 자체의 설치 수정 에만 관한 것입니다.
Chris Stratton

1
안드로이드 에뮬레이터로 이것을 수행하는 방법이 있습니까 ?? 이 솔루션 중 어느 것도 내 에뮬레이터에서 작동하지 않습니다.
MikeSchem

답변:


388

모든 휴대 전화와 Android 버전에 동일한 마운트가있는 것은 아닙니다.
다시 마운트 할 때 옵션을 제한하는 것이 가장 좋습니다.

간단히 rw (읽기 / 쓰기)로 다시 마운트하십시오.

# mount -o rw,remount /system

변경이 끝나면 ro로 다시 마운트하십시오 (읽기 전용).

# mount -o ro,remount /system

30
PC에서도이 작업을 수행 할 수 있습니다. adb shell mount -o rw, remount / system
Matthias Weiler

8
함께 사용 adb root하거나 파일을 푸시 할 때 권한이 거부됩니다.
KrisWebDev

1
@ MikeHenke, 당신이 그것을 실행할 때 뿌리가 아닌 것처럼 들립니다.
CurtisLeeBolin 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
Lauri Elias

85
adb remount

나를 위해 일하고 가장 간단한 해결책 인 것 같습니다.


6
"adb remount-파일이 읽기 전용 모드이기 때문에 파일을 / system으로 푸시하려고 시도하는 중 오류가 발생하면 adb remount는 / system이 읽기-쓰기 모드로 다시 마운트됩니다. 쉘에 올바른 루트가있는 경우 이것은 mount -o rw, remount / system (루트) 또는 다른 것과 같이 더 긴 명령을 직접 입력해야하는 것을 대체합니다. " ( 소스 ). 루트 권한에 문제가있는 경우 먼저 "adb root"를 시도하십시오.
KrisWebDev

4
나는있다 Not running as root. Try "adb root" first.. 그리고 나서 adbd cannot run as root in production builds.
Vadzim

1
최신 장치에서는 $ adb disable-verity실행하기 전에 장치를 재부팅 한 다음 다시 부팅 해야하는 것처럼 보입니다.$ adb remount
Nebel22

1
$ adb disable-verity give : disable-verity는 userdebug 빌드에만 작동
William

3
작동하지 않습니다 : Not running as root. Try "adb root" first.. 나는 adb root다시 입력 adb remount했지만 여전히 같은 오류입니다.Not running as root. Try "adb root" first.
user924

78

나는 같은 질문을 한 안드로이드 포럼에서 이것을 얻었다. 이것이 다른 누군가를 돕기를 바랍니다.

전화기의 터미널 에뮬레이터에서 :

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

그런 다음 cmd 프롬프트에서 adb push


3
adb shell <command>컴퓨터에서 사용할 수 있습니다 (휴대폰에 터미널이없는 경우)
Fletcher91

73

나는 실제 장치에 대한 질문을 알고 있지만 누군가 2017 년 2 월 현재 최신 도구를 사용하여 에뮬레이터에서 비슷한 문제가 발생하면 에뮬레이터를 명령 줄에서 시작해야합니다.

-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

-writable-system으로 실행 에뮬레이터를 실행 한 후 adb root 및 adb remount를 계속할 수 없을 때까지 명령 프롬프트가 매우 느려집니다.
Beeing Jk

29

가장 안전한 방법은 다음을 사용하여 / 시스템을 읽기 / 쓰기로 다시 마운트하는 것입니다.

mount -o remount,rw /system

완료되면 읽기 전용으로 다시 마운트하십시오.

mount -o remount,ro /system

6
SO에 오신 것을 환영합니다! 귀하의 답변은 기술적으로 유용하지만 본질적으로 curtlee2002의 이전 답변과 중복됩니다. 이것은 "읽기-쓰기 모드에서 원숭이를 돌린 후 읽기 전용으로 다시 전환하는 것이 가장 안전하다는 데 동의합니다"라는 그의 대답에 대한 의견으로 더 좋았을 것입니다. 우리는 수백만 개의 질문을 가지고 있으므로 항상 훌륭한 솔루션이나 새로운 관점을 가진 첫 번째 질문이있을 것입니다!
Jonathan Van Matre

1
이것은 진술에서 ","를 제거한 후에 만 ​​작동했습니다. 즉 "" mount -o remount rw / system ""
propjk007

@TechnikEmpire, 그는 허용되는 답변을 언급하지 않습니다.
파샬리스

16

내 삼성 갤럭시 미니 S5570에서 (휴대폰에 뿌리를 내린 후) :

주먹, 루트로, 나는 달렸다 :

systemctl start adb

일반 사용자로서 :

adb shell 
su 

터치 스크린에 루트 권한 부여

mount 

우리가 가진 모든 마운트 지점을 나열하고 필자의 경우 / dev / stl12가 / system에 ro (준비 전용)로 마운트되었음을 ​​알 수 있으므로 다음과 같이하면됩니다.

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

이 답변에 감사드립니다. 어떤 이유로 든 루트 권한을 부여하기 위해 휴대 전화의 화면을 보지 않고 시도한 것이 무엇이든 액세스 거부가 발생했습니다.
Graham Mitchell

"-t를 사용하여 파일 시스템 유형을 지정해야합니다"라고 말하는 것은 무엇을 의미합니까?
NehaK

mount -o rw, remount -t ext4 / dev / block / vda / system, -t 내 예제에서 파일 시스템의 유형을 의미합니다. ext4
Sérgio

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

여기 나를 위해 일한 것이 있습니다. 에뮬레이트 된 Android 7.1.1 (Nougat) 장치를 실행 중이었습니다.

터미널에서 다음 명령을 수행했습니다. 주목해야 할 것은 -writable-system 플래그입니다.

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

다른 탭에서

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

/ system 내용에 대한 모든 변경 사항은 재시작 후에도 유지됩니다.


4

에뮬레이터로 확인하고 다음 작업을 수행했습니다.

  1. adb 재부팅
  2. adb 루트 && adb 다시 마운트 && adb 푸시 ~ / Desktop / hosts / system / etc / hosts

위에서도 언급했듯이 단일 샷에서 두 번째 단계를 실행하십시오.


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 에서이 기사를 찾았으며 Sony Xperia Z (4.2.2)에 필요한 단계를 추가한다고 생각했습니다.

소니는 워치 독 프로세스를 통해 / 및 / system에서 ro를 rw로 변경했을 때 (이것은 내가 수정하려고 한 유일한 것) 다른 것을 감지합니다.

다음은 달성하려는 변경 사항을 수행하기 위해 실행 한 것입니다. 나는 / sbin / ric에서 실행 비트를 제거하는 것이 스스로 다시 시작되는 것을 막기 위해 신속하게 수행해야하기 때문에 이것을 창에 붙여 넣었습니다. (나는 stop ric전화에서 안드로이드의 이전 버전에서 작동 했지만 시도 하지 않았다.)

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

여기서 hosts 파일을 수정 했으므로 파일 시스템을 변경해야합니다. 찾은 방식대로 작업을 수행하려면 다음을 수행하십시오.

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

이 시점에서 ric이 자동으로 다시 시작되어야합니다. (자동으로 다시 시작되었습니다.)


1

Jan Bergström의 답변에 조금 더 추가 : Android는 Linux 기반 시스템이며 Linux의 경로에는 슬래시 (../)가 포함되어 있으므로 push 명령을 사용하는 동안 "/"를 사용하여 Android 장치에서 대상 경로를 정의하십시오.

예를 들어, 명령은 다음과 같습니다. adb push C : \ Users \ admin \ Desktop \ 1.JPG sdcard / pictures /

여기서 백 슬래시는 Windows PC에서 푸시 할 파일의 소스 경로를 정의하는 데 사용되고 슬래시는 대상 경로를 정의하는 데 사용됩니다. Android는 Linux 기반 시스템이기 때문입니다. 이 명령을 사용하기 위해 루트 역할을 할 필요는 없으며 프로덕션 장치에서 완벽하게 작동합니다.


1

전화의 대상 위치가 없기 때문에 때때로 오류가 발생합니다. 예를 들어 일부 Android 휴대 전화 외부 저장 위치는 /storage/emulated/legacy대신입니다 /storage/emulated/0.


1

덕분에, 세르지오 에 대한 매개 변수를 생각하지 않고 명령을 "마운트". 나는 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

다음 단계는 이미 위쪽에 설명되어 있습니다. RW로 다시 마운트하고 다시 RO로 다시 마운트하십시오.


1

initrc.img를 추출하고 다시 압축하고 initmount / system 코드로 파일을 편집 해야하는 것과 동일 합니다.


btw. -writeable-system 옵션으로 avd를 시작해야합니다
xsilen T

0

SD 카드에 파일을 복사 하시겠습니까?

글쎄, 개발자 컴퓨터에서 SD 카드로 데이터를 복사한다고 가정합니까? 당신은 고안을 근절하고 당신이 처리 할 수있는 영역을 만들었습니까?) 내 응용 프로그램 (Win7의 Android Studio 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

읽기 전용 파일을 복사하는 데 실패하면 루트 디렉토리에서 원본 파일을 찾아 루트 텍스트 편집기 (바람직하게는) RB 텍스트 편집기를 사용하여 파일을 수정 해보십시오. ROM Toolbox 앱과 함께 제공됩니다.



0

내 경우에는 adb push 명령을 사용하고있었습니다. ~/Desktop/file.txt ~/sdcard/

나는 그것을 바꾼 ~/Desktop/file.txt /sdcard/다음 효과가있었습니다.

전화기를 분리했다가 다시 연결하십시오.


이 질문의 저자는 / system을 읽기 / 쓰기로 다시 마운트하는 것에 대해 묻습니다. 귀하의 답변은 다소 주제가
아닙니다

0

으로 첸 - 싱이 언급 한 가장 간단한 방법은 다음과 같습니다

adb reboot

그러나 나를 위해 먼저 설정을 변경해야했습니다.

설정 → 개발자 옵션 → 루트 액세스

ADB에 루트 액세스 권한이 있는지 확인하십시오.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.