디렉토리 당 파일 수


19

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

이 파일은 대규모 과학 실험의 결과물이며 제어 할 수 없습니다. 그러나 결과를 분석해야합니다.

이 디렉토리의 모든 I / O 작업 / 처리는 매우 느립니다. 열린 파일에서 읽고 파일을 닫으면 파일을 열 때 (파이썬에서 열림) 속도가 매우 느립니다. bash ls, du 등에서는 작동하지 않습니다.

질문은 ~이야:

처리, fopen, 읽기 등을 실용적으로 수행 할 수있는 방식으로 Linux 디렉토리의 최대 파일 수는 얼마입니까? 대답은 fs 유형, 커널 버전, 서버 버전, 하드웨어 등 많은 것들에 달려 있음을 이해합니다. 가능한 경우 경험 법칙을 원합니다.


6
Giles는 당신의 직접적인 질문에 잘 대답했지만, 리눅스 파일 시스템은 파일 이름을 작은 데이터 비트의 키로 사용할 때 데이터베이스를 대체 할 수 없습니다. 생성을 제어하지는 않지만 데이터를 분석하기 쉬운 형태로 후 처리 할 수 ​​있습니다. 그렇지 않으면 모든 단계에서 파일 시스템 오버 헤드를 지불하게됩니다. 오버 헤드를 줄일 수는 있지만 제거하면 가장 행복 할 수 있습니다.
msw

답변:


22

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

심지어 함께 dir_index, 100000 큰 느낀다. 이상적으로는 파일을 작성하는 프로그램 작성자에게 서브 디렉토리 레벨을 추가하도록하십시오. 성능 저하가 발생하지 않도록 ext2 또는 ext3에 대해 디렉토리 당 약 1000 개의 파일을 사용하지 않고 dir_index20000을 사용 dir_index하거나 사용 하지 않는 것이 좋습니다 . 파일 작성 방법을 제어 할 수없는 경우 다른 작업을 수행하기 전에 파일을 별도의 디렉토리로 이동하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.