안드로이드 파티션


 데스크탑에서는 1 ~ 2 개의 파티션만 사용하지만 모바일 디바이스에서는 여러 개의 파티션을 사용합니다. 시스템 복구나 부팅을 보장하기 위해서 입니다. 모바일 기기의 특성 상 자주 수리도 해야하고, 팩토리 리셋을 해도 지워지지 않는 영역이 있어야 하고, 복구를 위한 영역이나 부팅을 위한 파일을 따로 보관해야 하는 등의 영역이 필요하기에 파티션을 많이 나누었다고 합니다.


안드로이드의 디바이스 파티션의 종류에 대해서 살펴보면 크게 '표준 안드로이드 파티션' '칩셋 특화 파티션' '벤더 특화 파티션' 을 들 수 있습니다. 각각의 파티션에 대한 설명은 제목으로 대체 할 수 있을 것 같습니다. 표준 안드로이드 파티션은 말 그대로 표준으로 사용되는 파티션이며, 칩셋, 벤더 특화 파티션은 퀄컴, S.LSI 와 같은 칩셋에 특화된 파티션을 의미 합니다. 그리고 벤더 특화 파티션은 삼성이나 LG, HTC 와 같이 각 벤더에 따라 다른 파티션이 있을 수 있겠습니다.



[표준 안드로이드 파티션]

 영역 이름명

포맷

설명

boot

bootimg

 커널 + initramfs(램디스크), 부팅을 위한 커널 및 램디스크가 있는 공간

cache

Ext4

 안드로이드 /cache, 업데이트 및 복구에 사용

recovery

bootimg

 부트-복구 : 시스템 복구를 위한 커널 + 다른 initramfs

system

Ext4

 안드로이드 /system, OS 바이너리와 프레임워크

userdata

Ext4 / F2Fs

 안드로이드 /data, 사용자 데이터와 설정

어떤 파티션이 현재 마운트 되어 있는지 확인하고자 한다면 df / mount 명령어를 통해 살펴 볼 수 있습니다.

 


파일 시스템

안드로이드 루트 파일시스템에 보면 다양한 디렉토리 들이 있습니다. (adb shell 로 디바이스에 진입하였을 때 보이는 리스트) 아래의 표를 통해 주요 디렉토리에 대한 설명을 하고자 합니다.

default.prop추가 system property 파일로, init 을 통해 얻어져 시스템 속성으로 적재 됩니다. 기본적으로 읽기 전용 입니다.
file_contextsSE-Linux 를 위한 파일 컨텍스트 입니다. 시스템 파일과 디렉터리 접근 속성을 제한 합니다.
fstab.hardware파일시스템 마운트 테이블 입니다
initPID 1번으로 시스템 시작 시에 커널에서 실행하는 바이너리 입니다.
init[...].rc

init 을 위한 설정 파일 입니다. 메인은 init.rc 이고 옵션명에 따라 추가 설정 파일이 있습니다.

property_contextsSE-Linux 를 위한 프로퍼티로 시스템 속성에 대한 접근을 제한 합니다.
seapp_contextsSE-Linux 앱 컨텍스트로 앱 동작 범위를 제한 합니다.
sepolicySE-Linux 정책 입니다.
sbin/시스템 핵심 바이너리들이 포함된 디렉터리로 벤더 특화 바이너리들도 함께 포함될 수 있습니다.

 

그 외 주요 디렉토리에 대해 좀 더 자세히 알아보도록 하겠습니다.



/system

이곳은 모든 안드로이드 컴포넌트의 홈입니다. root:root 소유의 755(rwxr-xr-x) 권한을 가진 곳 입니다. 하지만 일단 마운트 되게 되면 읽기 전용으로 마운트 되게 되어 있습니다.

어찌보면 당연한 것이겠지만 이곳을 잘못 변경하면 단말이 벽돌이 될수도 있습니다. 이곳에 벤더 특화 컴포넌트도 함께 포함되어 있습니다.


또한 시스템 앱들이 있는 /priv-app 도 이곳에 포함되어 있습니다. /app 과 /priv-app 의 차이라면 /app 내에는 시스템 어플리케이션이 들어가며 /priv-app 에는 프리빌리지드 앱이 들어가게 되어 있습니다. Google 앱의 경우 /app 내에 들어가게 되어 있습니다.

/priv-app 과 /app 영역의 차이는 아래의 글을 참조 하시면 좋을 것 같습니다.

다시 말해 signatureOrSystem 퍼미션을 가지기 위해서는 /priv-app 디렉토리 내의 apk 만 가능하며 /app 은 가능하지 않습니다.

 

Some system apps are more system than others "signatureOrSystem" permissions are no longer available to all apps residing en the /system partition.

Instead, there is a new /system/priv-app directory, and only apps whose APKs are in that directory are allowed to use signatureOrSystem permissions without sharing the platform cert. This will reduce the surface area for possible exploits of system- bundled applications to try to gain access to permission-guarded operations.

The ApplicationInfo.FLAG_SYSTEM flag continues to mean what it is says in the documentation: it indicates that the application apk was bundled on the /system partition. A new hidden flag FLAG_PRIVILEGED has been introduced that reflects the actual right to access these permissions.

 

이곳에 있는 파일 중 build.prop 이 저희가 알고 있는 SystemProperties 가 정의 된 곳 입니다. cat 으로 까보면 단말의 정의된 속성들을 확인 할 수 있습니다.

(물론 adb shell getprop > ,, 을 통해 확인 할수도 있습니다.)



/system/bin, /system/xbin

system 내에 사용되는 바이너리, 스크립트 등이 포함되어 있는 디렉토리 입니다. 예를 들어 해당 경로 내에 bootanimation 을 직접 실행할 경우 단말의 부트 애니메이션이 실행 됩니다.

dex 를 ART 로 변경해 주는 dex2oat 와 같은 도구 이 경로 내에 포함되어 있으며 dumpsys, logcat, am, pm, sm, wm 흔히 adb 명령어를 수행할 할때 쓰는 각각의 명령어 바이너리가 바로 이 곳에 저장되어 있습니다.

'모바일' 카테고리의 다른 글

Android 개발 : 파일 파티션 및 파일 시스템 (1)  (0) 2017.03.06
Android 소식 : Instant app 테스트  (0) 2017.01.30
모토로라-아트릭스  (0) 2011.02.09