티스토리 뷰

A2SD, D2WE, D2EXT에 대해 알아봅시다.

일단 왜 A2SD, D2WE, D2EXT라는 것이 필요한지부터 알아보겠습니다.


예전에 디자이어의 MTD파티션에 대해 설명해 드린 적이 있었습니다. (아래 링크게시물 참조)


http://cafe.naver.com/htc/202652


위 게시물처럼 디자이어의 내부 메모리(ROM)는 512mb이지만 시스템공간 및 캐쉬공간 등으로 나누어져

순정 상태에서 실제 데이터를 사용할 수 있는 공간은 약 148mb 입니다.

안드로이드 app은 용량이 비교적 작은편인데다가 게임 등과 같은 큰 용량의 어플을 사용하지 않는다면

순정상태에서도 위 148mb의 공간을 가지고도 충분히 잘 사용할 수 있습니다.

그러나 안드로이드 어플은 무료 배포가 많은 데다가 유료 어플도 블랙마켓 등에서 쉽게 구해서

설치할 수 있기 때문에 새로운 어플들을 마구 설치하다보면 데이터 용량이 금방 모자라게 됩니다.

그래서 이러한 하드웨어적인 문제를 간단한(?) 스크립트를 사용하여 보완하는 방법들(a2sd,d2we,d2ext)이 나오게 됩니다.

즉, 내부메모리의 한계를 외장 SD카드를 사용하여 보완하는 것입니다.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

루팅을 처음 하시면 롬을 설치하기 전에 SD카드에 EXT(2,3,4)파티션을 만들라고 합니다.

왜 EXT파티션을 나누는 것일까요?

기본적으로 SD카드의 주 파티션은 FAT32형식이며 이는 과거에 윈도우95에서부터 사용되었던 파일시스템입니다.

이 FAT파일시스템은 거의 모든 운영체제에서 호환이 가능하기 때문에 주로 메모리카드 등에 많이 쓰이는데

자료구조가 매우 단순하여 보안이 취약하며 성능이 떨어집니다.

안드로이드는 리눅스를 기반으로 설계된 OS입니다.

리눅스의 기본 파일 시스템은 EXT 파일 시스템입니다. (현재는 EXT4가 주로 쓰입니다.)

EXT파일시스템은 안정적이고 성능이 좋습니다. 넥서스S는 기본파일시스템으로 yaffs2가 아닌 ext4를 사용하고 있습니다.

즉 FAT보다는 EXT가 성능도 좋고 안정성도 좋기 때문에 EXT파티션을 만드는 것이라 생각하시면 됩니다.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

먼저 가장 기본이 되는 A2SD(또는 app2sd)에 대하여 알아 보겠습니다.

여기에서 설명하는 A2SD는 프로요에서부터 지원되는 sd카드로 어플을 이동하는 기능과는 다른 말입니다.

A2SD를 적용하기 위해서는 먼저 위에서 말한 것처럼 SD카드의 2번째 파티션이 필요합니다.

SD카드의 첫번째 파티션은 FAT32형식이고 두번째 파티션은 EXT2나 EXT3 또는 EXT4를 사용합니다.

(파티션을 나누는 방법에 대해서는 설명하지 않겠습니다. 팁 게시판을 검색하시면 금방 찾을 수 있습니다.)

기본적인 원리는 어플이 설치되는 Data공간(내부메모리)에서 /data/app,/data/app-private,/data/dalvik-cache 를

sd카드의 ext파티션(/system/sd 또는 /sd-ext)으로 이동하고 심볼릭 링크를 걸어줍니다.

예전에는 /data/app과 /data/app-private만 이동했는데 요즘은 /data/dalvik-cache도 이동하는 추세입니다.

/data/app 은 apk파일이 저장되는 곳이고 /data/app-private는 유료앱등이 저장되며 /data/dalvik-cache는 VM에 올라가는
dex파일들이 저장됩니다.

http://www.androidpub.com/201448 (유료앱과 내장메모리 - 안드로이드펍)

위 세가지 디렉토리가 용량을 주로 차지하는 것들입니다. 이외에도 용량을 차지하는 것 중에 /data/data 가 있는데

주로 데이터베이스 등의 작은파일이 저장되며 DB의 읽고 쓰기가 자주 발생하는 공간이라서

성능 저하 및 업그레이드 이슈 등의 문제로 SD카드로 이동하지 않고 내부메모리에 남겨둡니다.

즉, A2SD를 적용해도 /data/data가 내부메모리에 저장되기 때문에 내부메모리가 점점 줄어듭니다.

(차후에 dark tremor의 a2sd가 새버전이 나오면서 /data/data까지 ext파티션으로 이동할 수 있는 기능이 추가됩니다.)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

A2SD 적용에도 불구하고 100개 이상의 어플을 설치해서 사용하는 헤비유저의 경우

다시금 내부메모리 부족 문제로 어떤 어플을 삭제해야할지 고민하게 됩니다.

이러한 고민 끝에 나온 방법 중에 d2we 와 d2ext라는 것이 있습니다.

d2we와 d2ext는 sibere라는 XDA 개발자가 쓴 I/O boost 쓰레드를 토대로 만들어졌습니다.

http://cafe.naver.com/htc/147387 ( sibere의 i/o boost)

sibere는 SD카드의 2번째 파티션영역(/dev/block/mmcblk0p2)에 가상의 EXT2파일을 생성하여

data공간에 루프 디바이스로 마운트합니다.

이렇게 함으로써 얻게 되는 장점은 파티션의 크기를 크게 잡을 수록 기존 A2SD보다 더 많은 어플을 설치할 수 있는

데이터 공간을 확보할 수 있게됩니다. (또한 쿼드란트 i/o 점수가 비약적으로 상승하여 i/o boost라는 별칭이 생겼습니다)


즉, sd카드의 2번째 파티션을 /data공간으로 바꾸어 쓰는 것과 동일한 것입니다.

다만 초기에는 재부팅을 할 경우 data가 날아가버리는 증상이 있어서 실사용은 불가능했습니다.

현재는 루프 디바이스 마운트 방식을 버리고 직접 마운트 하는 방식으로 변경되어 안정성에는 큰 문제가 없습니다.

이 방법이 발전하여 지금은 DATA2SD라는 방식으로 사용되고 있습니다.

http://forum.xda-developers.com/showthread.php?t=852219 (sibere의 DATA2SD)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

XDA의 다른 개발자 ownhere는 i/o boost 쓰레드에서 힌트를 얻어 data2ext라는 방법을 만들어 냅니다.

ownhere의 data2ext(줄여서 d2ext)는 sd카드의 2번째 파티션 외에 추가로 sd카드의 3번째 파티션을 만들어 사용합니다.

즉 FAT+EXT4+EXT4+swap 의 형태를 띄게 되는데 이런 파티션 구성을 사용하는 이유는

I/O의 분산을 통해 안정성과 성능의 밸런스를 맞추기 위해서 입니다.

두번째 파티션에는 /data/app,/data/dalvik-cache 등을, 세번째 파티션에는 /data/data를 저장하여

I/O 를 분산시키는 방법입니다.

따라서 2번째 파티션의 크기는 3번째 파티션 크기보다 2배이상 크게 잡습니다.

swap파티션은 메모리가 부족한 현상이 발생할 수 있기 때문에 따로 잡아줍니다.

여러개의 파티션을 나누어 안정성과 성능이 향상되는 장점이 있지만

롬을 백업하거나 복원할 때 3번째 파티션은 리커버리에서 인식을 못하기 때문에

사용성에 불편한 점이 있습니다.

(물론 3번째 파티션을 만들지 않고 A2SD나 D2WE처럼 FAT+EXT 파티션 구성만으로도 사용은 가능합니다.

그럴경우 D2WE와 차이는 없다고 보시면 됩니다.)

data2ext도 계속 업그레이드 되어서 현재는 시스템어플의 데이터는 내부메모리에 저장되도록 하고

symlink 대신 mount -bind 옵션을 사용합니다.

http://forum.xda-developers.com/showthread.php?t=859419 (ownhere의 data2ext)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

XDA 또 다른 개발자 melethron은 sibere, ownhere와는 조금 시각을 달리하여

sd카드 2번째 파티션의 파일시스템 형식을 EXT3나 EXT4가 아닌 ReiserFS나 BTRFS, NILFS2 등의

최신 파일시스템으로 변경하여 성능을 향상시키고자 발상을 전환합니다.

그래서 그가 내놓은 방식의 이름은 Data2Whatever입니다. (줄여서 D2WE)

melethron은 여러가지 파일시스템을 가지고 테스트를 합니다.

그리고 그중에서 ReiserFS와 BTRFS 그리고 EXT2,3,4 파일시스템 중 어떤 것이든지 SD카드의 2번째 파일시스템 형식으로

사용할 수 있도록 Data2Whatever 스크립트를 만듭니다.

(NILFS2의 경우는 가비지컬렉션이 일어나면 성능이 매우 저하되는 문제가 있어 제외되었습니다.)

/data/property, /data/misc, /data/system을 제외하고는 모두 sd카드 2번째 파티션으로 이동합니다.

이 방법의 장점은 파일시스템의 성능이 좋으면 롬의 성능도 좋아집니다.

단점은 ReiserFS나 BTRFS 파일시스템이 리커버리에서 지원하지 않기 때문에 해당 파일시스템을 사용할 경우

롬의 백업, 복원 등이 불편합니다. (그래서 전 이때부터 리커버리 커널을 교체하여 쓰기 시작했습니다.)

http://forum.xda-developers.com/showthread.php?t=867049( melethron 의 DATA2WHATEVER)


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

사족을 달자면 위 3가지 방법 중 제가 쓰는 것은 Data2Whatever 입니다.

사실 저도 melethron이 d2we를 만들었을때 여러가지 파일시스템을 테스트하였습니다.

그 중 쓸만한게 ReiserFS 와 BTRFS였는데

ReiserFS 는 재부팅 시 마운트가 잘 안되는 현상이 생기는 단점이 있고

BTRFS 는 아직 리눅스 커널에서도 Experimental 상태입니다.

그래서 EXT4의 마운트 옵션으로 성능이 향상되는 방법을 찾고 지금은 EXT4로만 사용하고 있습니다.

그리고 tune2fs를 이용해 ext4로 변환하는 스크립트도 추가했습니다.

지금 제가 배포하는 data2whatever는 사실 data2ext4인 셈이죠.

(실제로 data2ext에서 일부 스크립트를 가져오기도 했습니다.)

'나의 이야기 > 핸드폰' 카테고리의 다른 글

HTC HD2(슈퍼폰)구매  (0) 2011.10.11
MIUI를 기준으로 쓴 A2SD+ 만들기  (1) 2011.10.11