리눅스의 서브디렉토리 갯수 한계 (ext 계열)

리눅스에서 ext 계열 파일시스템의 서브디렉토리 생성 갯수 한계는 아래와 같다.

ext2, ext3

ext2, ext3의 제한에 대한 정의는 리눅스 커널 코드의 EXT*_LINK_MAX 값에 정의되어 있다. 아래는 linux-2.6.32.8에서 grep으로 찾아본 것이다.

include/linux/ext2_fs.h:#define EXT2_LINK_MAX		32000
include/linux/ext3_fs.h:#define EXT3_LINK_MAX		32000

이처럼 32000으로 정의되어있다. 그런데 모든 디렉토리는 기본적으로 ‘.’ 과 ‘..’ 의 링크를 이미 갖고 있기 때문에 결국 추가로 만들 수 있는 서브디렉토리의 총 갯수는 31998개가 된다. mkdir 유틸리티로 이 갯수를 초과하여 디렉토리를 생성하려고 하면 Too many links 에러를 만나게 될 것이다. ((실험해보지는 못했다. 난 ext4를 쓰는 관계로))

위 상수를 이용한 에러처리 코드의 예는 다음과 같다. (fs/ext3/namei.c의 ext3_mkdir 함수)

        if (dir->i_nlink >= EXT3_LINK_MAX)
                return -EMLINK;

ext4

ext4도 비슷한 값이 정의되어 있긴 한데, ((wikipedia 등에서는 64000으로 되어있다. 뭐가 맞는지는 모름))

fs/ext4/ext4.h:#define EXT4_LINK_MAX		65000

이 제한을 넘더라도 서브디렉토리를 계속해서 만들 수 있다. 즉, 제한이 없다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중