[Linux] How many files to be contain in Linux file system?


유용한 정보를 찾았습니다. 특히 디렉터리내에 생성가능한 파일의 개수는 참조하면 좋을 것 같습니다.

참조: http://serna.tistory.com/7

1. ext(ext1)

ext는 ext1으로도 불리며, 리눅스 운영 체제를 목표로 만들어진 첫 번째 파일 시스템입니다. Extended File System을 줄여 extfs 또는 ext로 씁니다. ext는 Rémy Card가 MFS(MINIX File System)의 한계를 극복하기 위해 만들었으며, 1992년 4월에 구현되어 Linux 0.96c에 추가되었습니다.
MFS는 파일 시스템의 최대 크기가 64MB였지만, ext에서는 2GB로 늘어나며, 파일 이름 최대 길이도 MFS는 14byte[각주:1] 또는 30byte였지만 ext는 255byte까지 지원합니다. 하지만 분리 접근, 아이노드(inode) 수정, 자료 수정 타임스탬프[각주:2] 등의 기능을 지원하지 않으며, 프리 블록과 아이노드의 트랙을 다루기 위해 연결 리스트를 사용했기 때문에 사용하면 할수록 리스트가 뒤죽박죽이 되고 파일 시스템이 조각화된다는 단점이 있었습니다.

참고 자료
http://e2fsprogs.sourceforge.net/ext2intro.html

2. ext2

ext2는 Rémy Card가 1993년 1월에 알파 버전을 공개한 파일 시스템입니다. 정식 이름은 Second Extended File System입니다. 이 파일 시스템은 ext의 문제를 해결하기 위해 나온 파일 시스템입니다.
ext2 파일 시스템은 ext 파일 시스템 코드를 바탕으로 했으며, 많은 재구성과 개선이 있었습니다. ext2 파일 시스템은 나중에 있을 개선도 고려해 만들어진 파일 시스템이었습니다. ext2 파일 시스템은 점점 많이 쓰이게 되면서 버그도 고쳐지고 계속해서 새로운 기능이 추가되어, 현재 아주 안정한 파일 시스템이 되었습니다.
ext2 파일 시스템은 255자까지의 긴 파일 이름을 지원합니다. ext2 파일 시스템은 세 타임 스탬프[각주:3]를 지원하며, 확장이 쉽습니다. 그리고 ext에 있었던 여러 단점(분리 접근, 아이노트 수정 등 지원 안 함)도 개선되었습니다. 파일 시스템의 최대 크기는 블록 사이즈에 따라 2 TiB ~ 32 TiB이며, 서브 디렉토리 개수 제한은 32768개입니다.

Block 크기 파일 크기 제한 파일 시스템 크기 제한
 1 KiB  16448 MiB (약 16 GiB)
 2048 GiB (2 TiB)
 2 KiB
 256 GiB
 8192 GiB (8 TiB)
 4 KiB
 2048 GiB (2 TiB)
 16384 GiB (16 TiB)
 8 KiB
 65568 GiB (약 64 TiB)
 32768 GiB (32 TiB)

참고 자료
http://e2fsprogs.sourceforge.net/ext2intro.html
http://linuxreviews.org/sysadmin/filesystems

3. ext3

ext3는 Stephan Tweedie가 개발하여 2001년 11월에 Linux 2.4.15에 추가되었습니다. ext2에 저널링, 온라인 파일 시스템 증대, 큰 디렉토리를 위한 HTree[각주:4] 인덱싱 등의 기능이 추가되었습니다. ext3 파일 시스템은 ext2 파일 시스템을 바탕으로 만들었기 때문에, ext2 파일 시스템을 자료 손실 없이 ext3 파일 시스템으로 바꿀 수 있습니다.
저널링은 주 파일 시스템을 수정하기 전에 저널에 수정 사항을 먼저 기록해 놓습니다. 이렇게 함으로써, 전원이 갑자기 나가거나 시스템 충돌이 일어났을 때 데이터 손실 가능성을 줄일 수 있습니다.
ext3 파일 시스템은 ext2 파일 시스템과의 호환을 목표로 설계되었기 때문에 많은 구조가 ext2 파일 시스템과 비슷합니다. 그래서 아이노드의 동적 할당, 다양한 블록 크기 등과 같은 기능이 부족합니다. 또한 extends 기능도 지원하지 않습니다. 또 다른 ext3의 단점은 온라인 조각모음 프로그램이 없다는 것입니다. 오프라인 조각모음 프로그램이 있기는 하지만, 이를 사용하기 위해서는 ext2 파일 시스템으로 변환시켜야 하며, ext3에서 ext2로 변환 후 조각모음을 하면 조각모음 프로그램이 ext3의 새로 추가된 기능을 인식하지 못해 자료가 손상될 수 있습니다. ext3가 조각모음이 필요 없다는 주장이 있는데, FAT 시스템보다는 덜 조각화되기는 하지만 계속된 사용으로 인해 ext3도 조각화 될 수 있습니다. 이는 ext4에서 다시 조각모음 프로그램이 만들어지는 계기가 됩니다. ext3 파일 시스템은 또한 저널링을 할 때 체크섬을 검사하지 않습니다.
한 디렉토리 당 서브 디렉토리 개수 제한은 31998개입니다.

Block 크기 최대 파일 크기 최대 파일 시스템 크기
 1 KiB  16 GiB
 < 2 TiB
 2 KiB
 256 GiB
 < 4 TiB
 4 KiB  2 TiB  < 8 TiB
 8 KiB  2 TiB  < 16 TiB

4. ext4

ext4는 Mingming Cao, Andreas Dilger, Alex Tomas, Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh와 그 외 여러 사람에 의해 ext3를 바탕으로 하여 개발되었습니다. 2006년 8월 10일 리눅스 2.6.19에서 Unstable 버전이 공개되었으며, 2008년 8월 21일에 Stable 버전이 공개되었습니다. 주요 특징은 다음과 같습니다.

(1) 큰 파일 시스템
1 EB[각주:5]까지의 볼륨과 16 TB까지의 파일을 지원합니다.
(2) Extents
ext2, ext3의 block mapping 방식 대신 extends 방식을 새로 사용합니다. 이는 큰 파일 처리를 개선하고 조각화 현상을 줄여줍니다.
(3) 호환성
ext2, ext3를 ext4 방식으로 마운트하여 성능이 향상된 상태로 사용할 수 있으며, ext4는 ext3 방식으로 마운트될 수 있습니다. 그러나 extends를 사용하는 ext4 파티션은 ext3 방식으로 마운트 될 수 없습니다.
(4) 저널 체크섬
ext3 파일 시스템에 없었던 저널 체크섬 기능이 추가됨으로써, 파일 시스템 손상 가능성이 더 줄어들었습니다.
(5) 32000개 서브 디렉토리 제한이 깨짐
서브 디렉토리 개수 제한이 32000개에서 64000개로 늘어납니다.
(6) 온라인 조각모음
ext4는 ext3에서 지원하지 않았던 온라인 조각모음을 지원할 수 있습니다.
(7) 빠른 파일 시스템 검사
ext4는 디스크 검사를 할 때 사용하지 않는 부분은 건너뜀으로써 시스템 검사를 빨리 할 수 있습니다.
(8) 파일스탬프 향상
타임스탬프가 초 단위가 아닌 나노초 단위로 재어지며, ext2, ext3에서는 1901년 12월 14일 ~ 2038년 1월 18일을 지원했지만 ext4에서는 1901년 12월 14일 ~ 2514년 4월 25일을 지원합니다.
(9) 영속적 선행 할당
디스크 공간을 프로그램이 실제로 사용하기 전에 할당해야 한다면 대부분의 파일 시스템은 아직 사용하지 않은 공간에 0을 기록함으로써 선행 할당을 하지만, ext4는 이렇게 하지 않고도 선행 할당을 할 수 있습니다.
(10) 지연 할당
ext4는 디스크 공간 할당을 마지막까지 지연하므로 성능이 향상됩니다.
(11) 그 외
Multiblock allocator, 파일 복구 기능 추후 구현 가능성

참고

1 KiB = 1024 byte, 1 MiB = 1024 KiB, 1 GiB = 1024 MiB, 1 TiB = 1024 GiB, 1 PiB = 1024 TiB, 1 EiB = 1024 PiB
1 MB는 1000 KB로 쓰이기도 하고 1024 KB로 쓰이기도 합니다. KB, GB, TB, PB, EB 등의 단위도 마찬가지이기 때문에 KiB, MiB, GiB, TiB, PiB, EiB 등의 단위를 주로 사용했습니다.
이 단위에 대해 더 자세한 정보를 알고 싶으시면 위키백과(키비바이트, 메비바이트, 이진 접두어)를 참조해 주세요.
  1. 0.99p7 전의 커널은 이것만 지원합니다. [본문으로]
  2. 파일을 수정된 날짜, 파일에 접근한 날짜 등을 기록하는 것 [본문으로]
  3. 수정(mtime), 속성 수정(ctime), 접근(atime) [본문으로]
  4. B-tree의 변형 [본문으로]
  5. 1 EB = 1024 PB = 1048576 TB [본문으로]

Ready's Additional :
위 설명에 보면 각각의 파일시스템에서 디렉토리당 생성가능한 파일의 개수가 나오는데, 파일/디렉토리의 개수 = inode개수이다. 파일시스템의 파일의 개수가 inode의 사용량인 것이다. 아래와 같이 확인해 보았다
$ df -i               # 디스크의 i노드 확인
파일시스템            I노드   I사용됨 I미사용 I사용율% 마운트 됨
/dev/sda2             625856  257086  368770   42% /
tmpfs                 218730       3  218727    1% /lib/init/rw
varrun                218730      62  218668    1% /var/run
varlock               218730       2  218728    1% /var/lock
udev                  218730    1610  217120    1% /dev
tmpfs                 218730       2  218728    1% /dev/shm
/dev/sda5            2444624    7784 2436840    1% /home
/dev/sda6            2031616      98 2031518    1% /home2
/dev내 파일 개수를 확인해 보았다

$ cd /dev
$ find .  -print |wc -l
1612
dev/ 내 포함된 디렉토리 2개를 제외하고 파일의 개수는 동일하다.

최대 파일개수를 분할된 파티션의 용량에 따라 나누고 계산해 봐야하지만.. 알아서들..(쿨럭)

참고로, JFS, XFS의 경우 inode의 수가 제한이 없다고 한다.