리눅스에서 ext 계열 파일시스템의 서브디렉토리 생성 갯수 한계는 아래와 같다.
- ext2, ext3: 31998 ((http://en.wikipedia.org/wiki/Ext3))
- ext4: 무제한 ((https://ext4.wiki.kernel.org/index.php/Frequently_Asked_Questions))
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
이 제한을 넘더라도 서브디렉토리를 계속해서 만들 수 있다. 즉, 제한이 없다.