it-swarm-ko.com

디렉토리 당 파일 수

약 100000 개의 작은 파일이있는 디렉토리가 있습니다 (각 파일은 1-3 줄이고 각 파일은 텍스트 파일입니다). 크기면에서 디렉토리는 그다지 크지 않습니다 (<2GB). 이 데이터는 전문적으로 관리되는 NFS 서버에 있습니다. 서버는 Linux를 실행합니다. 파일 시스템이 ext3이라고 생각하지만 확실하지 않습니다. 또한 서버에 대한 루트 액세스 권한이 없습니다.

이 파일들은 제가 통제 할 수없는 대규모 과학 실험의 결과물입니다. 하지만 결과를 분석해야합니다.

이 디렉토리의 모든 I/O 작업/처리는 매우 느립니다. 파일 열기 (파이썬에서 fopen), 열린 파일에서 읽기, 파일 닫기는 모두 매우 느립니다. bash에서는 ls, du 등이 작동하지 않습니다.

질문은 ~이야:

처리, fopen, 읽기 등을 수행하는 것이 실용적인 방식으로 Linux에서 디렉토리의 최대 파일 수는 얼마입니까? 대답은 fs 유형, 커널 버전, 서버 버전, 하드웨어 등 여러 가지에 따라 달라진다는 것을 알고 있습니다. 가능한 경우 경험 규칙을 원합니다.

18
carlosdc

당신이 추측 하듯이, 그것은 많은 것들, 대부분 파일 시스템 유형과 옵션 그리고 어느 정도 커널 버전에 의존합니다. ext2/ext3/ext4 시리즈에서 dir_index 옵션이 나타 났을 때 (ext3의 초기 릴리스 이후에) 크게 개선되었습니다. 디렉토리를 검색 트리 (로그 시간 액세스)로 저장하지 않고 저장합니다. 선형 목록 (선형 시간 액세스). 이것은 NFS를 통해 볼 수있는 것이 아니지만 관리자와 연락이있는 경우 tune2fs -l /dev/something |grep features를 실행하도록 요청할 수 있습니다 (아마도 업그레이드하도록 설득 할 수도 있습니까?). 크기가 아니라 파일 수만 중요합니다.

dir_index를 사용해도 100000은 큰 느낌입니다. 이상적으로는 하위 디렉터리 수준을 추가 할 파일을 만드는 프로그램의 작성자를 확보하십시오. 성능 저하를 방지하려면 dir_index가없는 ext2 또는 ext3의 경우 디렉토리 당 약 1000 개의 파일을, dir_index 또는 reiserfs를 사용하는 경우 20000 개로 제한하는 것이 좋습니다. 파일 생성 방법을 제어 할 수없는 경우 다른 작업을 수행하기 전에 파일을 별도의 디렉토리로 이동하십시오.