약 100,000개의 작은 파일이 있는 디렉토리가 있습니다(각 파일에는 1-3줄이 있고 각 파일은 텍스트 파일입니다). 이 디렉터리의 크기는 그리 크지 않습니다(< 2GB). 데이터는 전문적으로 관리되는 NFS 서버에 있습니다. 서버는 Linux를 실행합니다. 파일 시스템이 ext3인 것 같은데 확실하지 않습니다. 또한 서버에 대한 루트 액세스 권한이 없습니다.
이 파일들은 내가 통제할 수 없는 대규모 과학 실험의 결과물입니다. 그러나 결과를 분석해야 합니다.
이 디렉터리의 모든 I/O 작업/처리는 매우 느립니다. 파일 열기(Python에서는 fopen), 열린 파일 읽기, 파일 닫기가 모두 매우 느립니다. ls, du 등은 bash에서 작동하지 않습니다.
문제는 다음과 같습니다
Linux에서 디렉터리를 처리하고, 열고, 읽을 수 있는 최대 파일 수는 몇 개입니까? 대답은 파일 시스템 유형, 커널 버전, 서버 버전, 하드웨어 등 여러 요인에 따라 달라집니다. 가능하다면 경험 법칙을 원합니다.
답변1
짐작할 수 있듯이 이는 주로 파일 시스템 유형 및 옵션, 그리고 어느 정도 커널 버전과 같은 많은 요소에 따라 달라집니다. ext2/ext3/ext4 제품군에서는 dir_index
이 옵션이 나왔을 때(ext3가 처음 출시된 지 얼마 후) 크게 개선되었습니다. 선형 목록(선형 시간 액세스) 대신 검색 트리(로그 시간 액세스)로 저장된 디렉토리를 만들었습니다. ). 이는 NFS를 통해 볼 수 있는 것은 아니지만 관리자와 연락할 수 있는 경우 관리자에게 실행을 요청할 수 있습니다 tune2fs -l /dev/something |grep features
(업그레이드하도록 설득할 수도 있음). 크기는 중요하지 않고 파일 수만 중요합니다.
가 있다고 해도 dir_index
10만개는 많다고 느껴질 것이다. 이상적으로는 파일을 생성한 프로그램 작성자가 한 수준의 하위 디렉터리를 추가하도록 합니다. 성능 저하를 방지하기 위해 ext2나 ext3에는 reiserfs를 사용하지 않는 것이 좋습니다. 각 디렉터리는 약 1,000개 파일로 제한되며, reiserfs를 사용할 경우 한도는 dir_index
20,000개입니다. dir_index
파일 생성 방법을 제어할 수 없는 경우 다른 작업을 수행하기 전에 해당 파일을 별도의 디렉터리로 이동하세요.