넵 제곧내. 왜 안드로이드가 아직도 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카드를 포맷하는것으로 보입니다. 개인적으론  왜 그러는지 이해가 가지 않습니다. 뭐,위에 상기한 제약을 구글에서 풀기라도 하지 않는 이상 결국 유저 입장에서는 딱히 다른 파일 시스템을 쓸 이유도 없긴 하지만요.