[Android] '/dev/block/dm-0' is read-only 해결
[분석환경]
OSX, Android Emulator API 33
이 글은 안드로이드 모의해킹 카테고리 중 트러블슈팅을 위한 글입니다.
문제 1. Read only filesystem
해결 1.
adb 내에서 다음 절차를 진행한다. 전체 파일 시스템을 읽기쓰기 가능한 모드로 리마운트 시켜준다.
mount -o rw,remount /
문제 2. '/dev/block/dm-4' is read-only
해결 2-1.
에뮬레이터 환경에서 실제 기기와 다른 경로에 파일시스템이 마운트되어 있는 경우 위와 같은 에러가 발생한다.
> adb root
> adb shell avbctl disable-verification
Successfully disabled verification. Reboot the device for changes to take effect.
> adb disable-verity
using overlayfs
Successfully disabled verity
Now reboot your device for settings to take effect
> adb reboot
> adb root && adb remount
remount succeeded
> adb push ScreenCap.apk /system/app/
ScreenCap.apk: 1 file pushed. 33.1 MB/s (1640812 bytes in 0.047s)
> adb reboot
해결 2-2.
해결이 되지 않는다면 AVD(안드로이드 가상 머신)을 명령행 도구로 쓰기 가능한 모드로 실행시켜야 한다.
먼저 명령어만 따라할 경우 다음과 같이 진행한다.
> emulator -avd Pixel_3a_XL_API_30 -writable-system
> adb shell avbctl disable-verification
> adb disable-verity
> adb root
> adb remount
> adb shell "su 0 mount -o rw,remount /system"
부가설명은 다음과 같다.
emulator를 실행하기 위해 환경변수 등록이 필요하다. 실행중인 쉘에서 입력해도 되고, 쉘 설정파일(.bashrc, .zshrc)에 다음과 같이 작성한다. 입력한 후에는 쉘을 재시작하면 적용된다.
$ANDROID_HOME 내에는 두 개의 emulator 바이너리가 있으므로 환경변수 순서를 잘 구분해야 한다.
export ANDROID_HOME="/Users/{USER}/Library/Android/sdk"
export PATH=$PATH:$ANDROID_HOME/platform-tools/
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
Android Studio에서 생성한 에뮬레이터는 ./android/avd 경로에 위치한다. 이 경로로 이동한다.
cd ./android/avd
에뮬레이터 목록을 확인하고 쓰기가능한 모드로 실행한다.
emulator -list-avds
emulator -avd [생성한 에뮬레이터] -writable-system
참고
Android O, failed to mount /system, /dev/block/dm-0 is read only
I try to mount /system in Android O to RW using the command mount -o rw,remount /system, and i got this feedback on terminal dev/block/dm-0 is read-only *Already in adb root Any idea? Thanks
android.stackexchange.com