기글 하드웨어 모바일 포럼
넵 제곧내. 왜 안드로이드가 아직도 sd카드 파티션에 fat/ntfs를 고집하는지 모르겠습니다.
아시다시피 요즘 안드로이드는 컴퓨터랑 연결할때 mtp를 씁니다. 제가 mtp를 뜯어보진 않아서 잘은 모르겠지만 동작하는 것으로 볼 때는 아마 sd카드의 파일 시스템의 종류와 상관없이 동작이 가능할 것입니다. 따라서 sd카드를 직접 분리해서 컴퓨터에 연결하지 않으면 굳이 fat/ntfs를 쓰지 않아도 윈도에서도 기기의 sd카드에 접근하는데 큰 무리가 없어 보입니다.
fat같은 파티션은 posix친화적이지 않고 ntfs는 리눅스계열에선 윈도만큼 잘 동작하지는 않습니다. 이는 몇가지 문제점을 일으킵니다.
일단 fat계열의 경우 구조적 한계로 보안성이 요즘 나오는 다른 파일 시스템들에 비해 딸립니다. 따라서 어플리케이션들이 본래라면 억세스/수정할 권한이 없어야 할 파일을 건드려버릴 위험성이 있고 이는 안드로이드 운영체제가 어플리케이션들에게 sd카드 영역의 읽기/쓰기 기능에 제약을 두게 만드는 원인 중 하나입니다. (이 제약자체는 있어온지 좀 되었으나 최근 킷캣에서 강화되면서 문제가 되고 있습니다.)
또한 exFAT이 아닌 일반 FAT32은 파일 최대 크기를 4기가밖에 저장 못한다는 문제도 있으며, fat계열 파티션들은 파일들이 조각이 잘 난다는 단점도 있습니다. 플래시메모리에선 물리적 자기 드라이브에 비해 파일이 조각나는 것에 의한 성능저하가 적은 편이긴 하지만, 아예 부담이 없는 것은 아니며 성능저하자체는 일어납니다. 또한 파일들이 너무 심하게 조각난 경우 드라이브에 용량이 비어있음에도 불가하고 파일이 더 저장되지 않는 경우가 발생할 수 있습니다.
ntfs는 이론상 조각이 덜 나야 하는데, 리눅스에서 사용하는 ntfs-3g같은 경우 일반 윈도용에 비해 완성도가 좀 떨어져서 제 경험상 은근 조각이 잘 나는 편이기도 했습니다. 실제로 리눅스를 이용해 두 ntfs드라이브 사이에서 파일을 옮기는 도중에 너무 파편화가 심해져서 에러가 발생한 경험이 있습니다. 최신 버전 기준으로는 좀 낫기는 하겠지만 아무래도 여전히 일반 윈도에서 쓰는것만큼 성능이 나와주지는 않을 것으로 보입니다.
거기에, fat등 윈도용 파일시스템에 걸리는 파일 명명 제약과 posix게열 파일 시스템에 걸리는 파일 명명 제약은 조금 다릅니다. 예를 들어, 리눅스계열에선 문제 없이 사용가능한 파일명이 윈도에선 사용 불가능한 경우가 있고 그럽니다. 그리고 리눅스에서 fat/ntfs파티션에 접근할 때는 이를 잘 고려하지 않고 접근하는 경우가 있습니다. 따라서 원칙적으론 쓸 수 없는 파일명으로 파일이 생성되거나 할 위험성이 있습니다.
이러한 문제점들을 가지고도 굳이 이런 파일 시스템들을 쓰는 이유는 아무래도 윈도가 대세기 때문입니다. 아무 컴퓨터에서나 쉽게 sd카드에 접근하기 위한 것이지요. 하지만 지금의 안드로이드는 mtp를 쓰고, 따라서 카드리더를 쓰는 사람을 제외하고는 딱히 이런 파일 시스템들을 써야만 하는 이유가 없는게 아닐까라는것이 제 생각입니다. ntfs나 fat에서 벗어나면 훨씬 더 리눅스에 적합한 파일 시스템들이 많습니다. 개중엔 플래시메모리에 더 친화적인 파일시스템들도 있고요. 이런 걸 잘 쓰면 지금같이 어플리케이션들에게 sd카드 접근 권한 제한을 심하게 주지 않아도 되지 않을까 하는 생각이 있습니다. 카드리더를 쓰는 사람들에겐 지장이 오겠지만, 아무래도 그만한 득이 있을 수 있다는 거지요.
그럼에도 불구하고, 아직은 보통 안드로이드에선 fat/ntfs등을 이용해 sd카드를 포맷하는것으로 보입니다. 개인적으론 왜 그러는지 이해가 가지 않습니다. 뭐,위에 상기한 제약을 구글에서 풀기라도 하지 않는 이상 결국 유저 입장에서는 딱히 다른 파일 시스템을 쓸 이유도 없긴 하지만요.
fat/ntfs를 안 쓴다고 딱히 언마운트를 방지해야 할 이유는 없지요. 그냥 카드리더기로 윈도에서 쓰기 불편해질 뿐. 당장 암호화 안 걸린 ext같은걸로만 가도 지금처럼 쓰기금지를 하지 않아도 될 정도로 어플리케이션 데이터 간의 보안성은 확보되고(일단 명목상으로 sd카드 쓰기방지는 어플리케이션이 다른 어플리케이션의 영역을 침범할 수 있다는 이유니까요. 안드로이드에서는 uid/pid를 응용해서 어플리케이션마다 영역을 나누어서 보안을 확보하기 때문에 이런 기능이 결함없이 동작할 파티션 타입이기만 하면 됩니다.) 언마운트도 문제없이 가능하지 싶습니다.
정 뭐하면 윈도상에서 ext도 마운트가 가능하고요. 추가 파일시스템 드라이버가 필요하지만..
제가 안드로이드를 거기까지 뜯어보진 않았지만 그렇게 개발에 어려울거란 생각은 안 듭니다만..
게다가 오히려 위에서 말씀하신것처럼 윈도폰등도 더 심한 제약을 넣고 팔았습니다만..
2. 듀얼 파일시스템을 구현했을 경우 나오는 사이드 이펙트와 지원 확대로 인한 리스크는 저같으면 안합니다.
생각보다 일반 사용자는 무섭습니다.
만약에 파일시스템 옵션을 제공했을 경우 파일시스템 변환시 데이터가 모두 날아가게 되는데...
유저가 이걸 '알고' 눌러도 제조사는 그것에 대한 클레임을 처리해야 합니다.
과거 갤럭시가 진저브레드에서 ICS로 업그레이드했을때 파티션 문제로 인해서 홍역을 치룬적이 있었죠.그 이후로 파일시스템 변경을 해야 할 경우 업그레이드를 거부하는걸로 알고있습니다.
게다가 굳이 클레임거리라고 하자면 지금 킷캣 쓰기제한 사태가 더 큰 클레임거리로 보입니다. 파일을 건드리는 앱들이 다들 절름발이가 되어버려서 아예 위키등에 추가될 정도니까요. 이거라도 해결되면 오히려 클레임이 줄 수가 있겠지요.
mtp랑 sd카드 분리 문제는 지금도 있는 문제고요. 안드로이드에서 mtp쓰면 킷캣 기준으로도 아직까지 문제가 좀 있죠.. 어차피 지금 상황에선 완전히 개선하기는 좀 힘들 겁니다.
참고로 리눅스용 스팀도 비슷하게 게임 라이브러리의 파일 시스템을 인식해서 관리하더라고요.
최신 킷캣에서 외장 메모리 읽기 쓰기 하는 방법 아래 링크로 하시면됩니다...
http://technofaq.org/posts/2014/04/fixing-external-sd-card-write-issue-on-android-kitkat/
아이폰과의 차이점 중 하나가 sd메모리슬롯이었는데 ㅡㅡ;; 먼가 속은 느낌이네요 ㅎㅎ
sd메모리는 사진이나 동영상촬영(블랙박스)과같은 것 위주로 사용해야겠어요!!!
구글 플레이에서 받을 수 있는 파일 탐색기나 영상 플레이어 등은 sdcard에 저장된 파일 중 자신에게 권한이 주어진 디렉터리에서 벗어난 파일을 수정하지 못할 겁니다. 즉,해당 기능을 위해선 무조건 제조사 앱을 써야 하는거고 기본으로 탐색기가 번들되지 않는 폰이나 번들되는 탐색기가 별로인 폰은 루팅하지 않는 이상 망하는 거죠(..) 다행히도 엔간해선 파일 탐색기 하나정도는 넣어주지만요.
안드로이드에서는 엄연히 ExSD카드와 내장 메모리카드를 분리해서 인식하고 있습니다.
또한 구글의 공식적인 입장으로는 외장메모리카드를 권하고 있지 않고 안드로이드가 업데이트될수록 외장SD에 대한 접근 권한이 축소되고 있습니다. 하지 말라는거죠 -_-(당장 지금 공식적으로는 젤리빈부터,서드파티들은 킷켓부터 외장메모리카드의 쓰기권한이 없어져서 파일관리 앱들이 맨붕중입니다. -_-;;)
레퍼런스인 넥서스 시리즈에서는 아예 외장 슬롯 자체가 없습니다.
그런데 역시 말씀하신대로 파일시스템을 fat이나 ntfs를 사용하지 않을 경우...
외장 메모리카드를 시스템에 더 구속적인 형태로 결합을 해야 합니다.과거 윈도폰들이 SD카드에 취한 정책과 비슷하게 되겠네요.
그리고 SD카드를 시스템에서 빼지 못하도록 만들어야겠죠.