본문 바로가기

Job Notes/Linux & Android

Extended File Attributes


리눅스 관련 프로젝트를 하다가 Extended file attributes라는 개념을 접해서 정리해 놓고자 합니다.

보통 파일 시스템 내의 파일들은 파일의 내용(content) 외에도 여러 가지 메터 정보를 가지게 됩니다. 예를 들어, 파일의 접근 권한(ACLs), 생성 시간(creation time), 최근 변경 시간(modification time) 등의 정보입니다. 보통 UNIX 환경에서는 stat, fstat, lstat 등의 함수를 이용하면 얻을 수 있습니다.

Extended file attributes는 운영체제가 지원하는 이런 기본적인 메터 데이터 외에 사용자가 임의로 파일에 메터 정보를 줄 수 있게 하기 위해서 사용됩니다. 여기에는 보통 파일의 인코딩(encoding) 정보나, 체크섬(checksum), 추가적인 권한 관리 정보(ACLs) 등을 넣을 수 있습니다.

리눅스에서는 ext2, ext3, ReiserFS, XFS 등의 파일 시스템이 EA(Extneded attribute)를 지원합니다. 각 EA는 (name, value)의 짝으로 구성되는데, 예를 들어 /etc/xxx.conf 파일의 작성자를 알고 싶다면 EA의 user.author를 name으로 요청하는 식입니다.

관련된 라이브러리 함수 및 시스템 콜로는 attr_get, attr_set, getxattr, setxattr 등을 찾아보시면 됩니다. EA도 커널의 지원이 필요하므로, 커널을 컴파일할 때 해당 파일 시스템의 옵션을 켜주어야 합니다. ext3의 경우 default로 EA가 활성화되어 있는데, mount 할 때 user_xattr 옵션을 주어야 EA가 동작합니다.

[참고]
1. Linux EA/ACL manual pages