약 100000 개의 작은 파일이있는 디렉토리가 있습니다 (각 파일은 1-3 줄이고 각 파일은 텍스트 파일입니다). 크기면에서 디렉토리는 그다지 크지 않습니다 (<2GB). 이 데이터는 전문적으로 관리되는 NFS 서버에 있습니다. 서버는 Linux를 실행합니다. 파일 시스템이 ext3이라고 생각하지만 확실하지 않습니다. 또한 서버에 대한 루트 액세스 권한이 없습니다.
이 파일들은 제가 통제 할 수없는 대규모 과학 실험의 결과물입니다. 하지만 결과를 분석해야합니다.
이 디렉토리의 모든 I/O 작업/처리는 매우 느립니다. 파일 열기 (파이썬에서 fopen), 열린 파일에서 읽기, 파일 닫기는 모두 매우 느립니다. bash에서는 ls, du 등이 작동하지 않습니다.
질문은 ~이야:
처리, fopen, 읽기 등을 수행하는 것이 실용적인 방식으로 Linux에서 디렉토리의 최대 파일 수는 얼마입니까? 대답은 fs 유형, 커널 버전, 서버 버전, 하드웨어 등 여러 가지에 따라 달라진다는 것을 알고 있습니다. 가능한 경우 경험 규칙을 원합니다.
당신이 추측 하듯이, 그것은 많은 것들, 대부분 파일 시스템 유형과 옵션 그리고 어느 정도 커널 버전에 의존합니다. 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 개로 제한하는 것이 좋습니다. 파일 생성 방법을 제어 할 수없는 경우 다른 작업을 수행하기 전에 파일을 별도의 디렉토리로 이동하십시오.