단일 디렉토리에 몇 개의 파일을 가질 수 있습니까? 많은 파일 (+/- 1,000,000)을 생성합니다.

이 질문은 이것과 관련 있습니다.

애니메이션을 사용하여 단일 디렉토리에 일반적으로 저장된 많은 파일 (+/- 1,000,000)을 생성합니다. Mac Os X에서는 일부 버그에 +/- 30,000 개 이상의 파일이 생겨서 애니메이션을 다양한 디렉토리로 나누었습니다.

우분투에서 단일 디렉토리가 보유 할 수있는 파일 수에 제한이 있습니까?



답변

우분투는 디렉토리의 크기를 제한하지 않으며 파일 시스템에 의해 부과됩니다. 각 파일과 디렉토리는 소위 inode입니다. 사용 df -i중인 마운트 된 모든 파일 시스템에 사용 가능한 inode 수를 확인하는 데 사용할 수 있습니다 .

내 ext4 홈 파티션의 50GB (46GiB)에 대한 inode 제한이 충분히 크기 때문에 문제없이 백만 개의 파일 하나만 만들었습니다.

touch유틸리티 와 결합하여 파일을 만들기 위해 쉘 확장을 사용했습니다 .

mkdir test
cd test
touch {0..300000}
touch {300000..600000}
touch {600000..900000}
touch {900000..1000000}

로 확인할 수있는 1000001 파일이 생성됩니다 ls | wc -l. 왜 300000..600000그렇지 300001..600000않습니까? 나는 그 1을 끝에 놓기에는 너무 게으 르기 때문에.

df -i 다음과 같습니다

/dev/sda6            3055616 1133635 1921981   38% /home

이제 테스트 파일을 제거하십시오 (시간 cd ..&&rm -f test이 오래 rm걸리므로 파일 이름과 함께 사용 하십시오).

rm {0..300000}
rm {300000..600000}
rm {600000..900000}
rm {900000..1000000}
cd ..
rmdir f

파일을 제거한 직후에 사용중인 inode 수가 감소했습니다.

/dev/sda6            3055616  133634 2921982    5% /home

파일 시스템이 많은 수의 파일을 허용하더라도 이러한 큰 파일을 단일 디렉토리에 저장하는 것은 끔찍한 아이디어입니다. 적어도 같은 구조를 가진 일부 서브 디렉토리를 사용하십시오 f/i/l/e/filename.ext. 프로그램은 종종 그러한 대량의 파일을 기대하지 않습니다.