안드로이드는 여러 파티션이 존재합니다.
안드로이드에 기본적으로 존재하는 표준 파티션이있으며 동적으로 사용자가 추가하는 파티션도 많이 있습니다.
1. 표준 파티션
boot, cache, recovery, system, userdata가 존재합니다.
- boot
커널+initamfs, 부팅을 위한 커널 및 램디스크가 존재하는 공간입니다.
kernel 부분은 가상 kernel 파티션을 통해서 kernel만 업데이트가 가능하다. 먼저 새 버전 kernel인 가상 kernel 이미지를 만들고 기존 kerenl 이미지의 위치를 찾아 커널 이미지만 덮어씌우는 방식으로 kernel update를 진행한다. 이 때 만약 새 kernel의 이미지가 기존 kernel 이미지보다 크다면 추가로 오류 및 안쓰는 프로세스를 정리하여 해당 공간을 추가 확보한다.
마찬가지로 ramdisk 부분도 기존 ramdisk 이미지 위치를 eMMC에서 찾아 ramdisk만 교체할 수 있다.
-> eMMC : 임베디드 멀티미디어 카드로 플래시 메모리와 같은 개념으로 보면된다. 모바일 장치에서 주로 사용되며 플래시메모리의 속도적인 단점을 해결하고자 만든 일종의 플래시 메모리역할을 하는 저장공간이다.
- cache
EXT4 포맷을 가지며 안드로이드 업데이트 및 복구에 관한 내용을 저장하고있다.
기존에는 안드로이드 업데이트를 진행할 때 cache파티션에 업데이트 내용을 임시로 저장하고 cache 파티션을 통해서 업데이트를 진행했었다 하지만 안드로이드는 현재 업데이트 시 system파티션을 이용하며 기존 버전 내용과 업데이트 버전에 대한 내용을 system에 모두 넣어두고 파티션포인터 교체하는 방식으로 업데이트가 진행된다.
위와 같은 업데이트 방식 변화 등의 이유로 현재 cache 파티션의 사용이유는 많이 줄어든 상태이다.
-> 현재 안드로이드의 A/B 기기 방식의 update 방식
구글에서는 위와 같은 구조로 update를 진행하기를 원한다 기본적으로 update를 하면서 복사 및 update된 새로운 파티션을 만들고 재부팅 하면서 해당 pointer를 가리키게하여 update하는 방식이다. 위와 같이 특정 파티션의 복사에 의한 부하가 부담으로인해 vendor 사에서는 N OS이후 지원됬음에도 해당 업데이트 방식을 사용하지 않았으나 Andorid 11부터는 해당 방법이 강제화 되었다.
- recovery
시스템 복구를 위한 커널로 부팅과 다른 램디스크들이 존재하는 공간이다.
- system
EXT4 포맷으로 안드로이드 OS 바이너리와 프레임워크에 대한 내용이 존재하는 공간이다.
해당 공간에는 기본적으로 구글에서 미리 컴파일한 android system APK(AOSP 라이브러리 포함) 등이 존재하며 android GUI 프로그램도 해당 파티션에 존재한다.
- userdata
EXT4 포맷으로 안드로이드 data, 사용자의 data 및 설정 파일들이 존재한다.
기본적으로 공장초기화를 진행하면 해당 파티션이 reset되는 것이다.
2. 추가 파티션
추가 파티션은 안드로이드에서 기본적으로 제공되는 표준 파티션이 아닌 벤더사, 추가 HW 등에 따라 생기는 메모리 공간에 대한 부분이다.
실제로 갤럭시 디바이스에서도 표준 파티션에 더해 여러 목적과 역할을 수행하는 다양한 파티셔닝 존재한다.
- sdcard
sdcard는 sdcard내역에 저장되는 파일들이 존재하는 파티션이다. 기본적으로 사진, 동영상 등의 파일들이 sdcard에 저장되며 해당 파티션에서 파일들을 확인할 수 있다.
- dev
Device에 따른 파티션이다. 안드로이드를 사용하는 어떤 핸드폰도 AP에 안드로이드만 깔린것이 아닌 다양한 device들이 연결될 것인데 해당 device들에 저장하기 위한 파티션 공간이 바로 dev 파티션 공간이다.
- vendor
각 벤더사에서 벤더사관련 파일 및 설정등을 진행하기 위한 파티션이다.
3. 동적 파티션
동적 파티션은 Adnroid 10이후 지원되는 기능으로 Android OTA Update시 파티션 크기 조절 및 새 파티션 생성 등의 파티션을 변화시키는 작업을 할 수 있도록 지원해주는 기능이다.
기본적으로 boot Loader에 의해 요구되는 파티션은 동적 파티션의 대상에서 제외되고 그 외 system, vendor 등의 파티션에 동적 파티션 기능을 추가할 수 있습니다. 이를 사용하면 vendor사는 더 이상 vendor 파티션에 대한 사이즈 고민이 필요 없습니다.
부팅과 관련된 파티션을 제외한 나머지 파티션을 super 파티션이라는 새로운 파티션으로 만들게되는데 바로 이 super파티션이 동적 파티션입니다. 기본적으로 super에 해당되는 기본 파티션은 system, vendor, product, system_ext, ODM이 존재합니다.
super 파티션은 OTA update시 원하는 만큼 동적으로 파티션을 할당해서 사용할 수 있으며 이를 통해 필요한 공간만큼만 확보하여 사용하지 않는 여백의 공간을 최소화하고 사이즈를 효율화하여 사용할 수 있습니다.
여기서 super 파티션은 Linux에서는 바로 인식이 불가능한 기존 Linux에는 존재하지 않는 구글에서 새로 정의한 파티션이기 때문에 기존 Linux에서 system 파티션을 곧 바로 마운트 하는 역할은 Linux가아닌 init process에서 super에 접근하는 방식을 통해 mount를 진행하도록 변경되었습니다.
'Android > 안드로이드 운영체제' 카테고리의 다른 글
[Android] 안드로이드(12) - JNI (0) | 2021.01.30 |
---|---|
[Android] 안드로이드(11) - KeyStore (0) | 2021.01.02 |
[Android] 안드로이드(9) - AIDL (0) | 2020.11.29 |
[Android] 안드로이드(8) - Application의 권한 (0) | 2020.11.21 |
[Android] 안드로이드(7) - TEE (0) | 2020.11.21 |