Mac OS X의 디렉토리에 많은 파일이 있다는 제한이 있습니까?


9

MacOS X의 디렉토리에 100,000 개 이상의 파일이 있으며 스크립트에서 파일을 읽는 속도가 느립니다.

많은 파일을 갖는 데 제한이나 권장 사항이 있습니까? 일부 디렉토리로 분할해야합니까?

내가 찾은 한계는 mv * foo10 만 개의 파일을 모두 처리 할 수 없다는 것 입니다. "너무 긴 인수"라는 오류가 표시됩니다. 약 20,000 개 미만의 파일에서 작동합니다.


현재 디렉토리에 380,000 개의 파일이 있으며 파일을 열더라도 10 초 이상 걸리는 것을 알고 있습니다. 나는 그것들을 몇몇 디렉토리로 분리하기로 결정했다.
Daisuki Honey

1
HFS + 파일 시스템은 너무 많은 문제없이 전체 이름으로 디렉토리에 많은 수의 파일을 저장하고 액세스 할 수 있어야합니다. 그러나 와일드 카드를 조심해야합니다. 당신이 사용하는 경우 *또는 ?명령에 대한 인수의 일환으로, 운영 체제 검색 일치하는 파일의 전체 디렉토리 (느린)는 다음 그것은 다음에 전달하는 모든 일치하는 파일 (긴)의 목록으로 인수를 대체 명령. 루프 나 여러 mv 명령을 사용하면 더 좋습니다 mv a* foo && mv b* foo.
Matthias Fripp 2016 년

답변:


1

이 스택 오버플로 답변Apple 사이트의 특정 세부 정보에 따르면 개별 폴더에는 최대 21 억 개의 항목이 포함될 수 있습니다.

즉, 최대 21 억 개의 항목을 보유 할 수 있다고해서 해당 수준에서 성능을 유지할 수있는 것은 아닙니다. Wikipedia에 따르면 ; 강조는 내 것입니다 :

모든 파일 및 디렉토리 레코드를 단일 데이터 구조로 저장하는 카탈로그 파일은 시스템이 멀티 태스킹을 허용 할 때 한 번에 하나의 프로그램 만이 구조에 쓸 수 있으므로 성능 문제가 발생합니다. 이는 많은 프로그램이 대기열에서 대기 중일 수 있음을 의미합니다 하나의 프로그램이 시스템을 "호깅"하기 때문입니다. 이 파일이 손상되면 전체 파일 시스템이 손상 될 수 있으므로 심각한 안정성 문제이기도합니다.

따라서 카탈로그 파일은 한 번에 하나의 프로그램에서만 사용할 수 있기 때문에 성능이 자연스럽게 저하됩니다. 디렉토리의 크기가 커지면 해당 문제로 인한 위험 / 성능 저하 만 확대됩니다. 파일이 많을수록 프로그램이 해당 디렉토리의 파일에 액세스 할 가능성이 높아집니다. 여기서 그 아이디어에 대한 추가 확인 ; 다시 강조는 내 것입니다 :

카탈로그 파일은 복잡한 구조입니다. 모든 파일 및 디렉토리 정보를 유지하므로 파일 I / O를 수행하려는 스레드가 많은 경우 이상적인 상황이 아닌 파일 시스템의 직렬화를 강제 실행합니다. HFS에서 파일을 작성하거나 파일을 수정하는 조작은 카탈로그 파일을 잠 가야하므로 다른 스레드가 카탈로그 파일에 대한 읽기 전용 액세스조차하지 못합니다. 카탈로그 파일에 대한 액세스는 단일 작성기 / 다중 리더 여야합니다.


정말 고마워. 카탈로그 파일에 액세스하면 병목 현상이 발생하고 특히 멀티 태스킹에 심각한 성능 문제가 발생할 수 있음을 이해합니다.
Daisuki Honey

@DaisukiHoney 천만에요! 내 답변이 도움이된다면 투표하십시오. 문제가 해결 된 답변 인 경우 확인하시기 바랍니다.
JakeGould

네, 확실히 당신의 답변을 투표하고 확인합니다. 다시 한번 감사드립니다.
Daisuki Honey

인용Wikipedia 섹션 에서는 디렉토리가 아닌 파일 시스템 당 확장 성 제한에 대해 설명합니다. 파일 시스템 당 하나의 카탈로그 파일 만 있으며 모든 액세스는 직렬화해야합니다. 질문과는 관련이 없습니다.
poolie

@poolie 문제는 파일 시스템에 존재하는 디렉토리에 관한 것입니다. 카탈로그 파일은 파일 시스템마다 존재하지만 디렉토리 자체는 동일한 파일 시스템에도 존재합니다. 단일 파일 시스템에 존재하는 디렉토리에서 10,000 개 이상의 파일을 다루는 질문과 관련이 있습니다. 그러나이 질문은 2 세 이상이므로 Wiki 링크에 감사드립니다. 새로운 문구와 해당 섹션으로 직접 연결되는 링크를 포함하도록 답변을 업데이트했습니다.
JakeGould

4

짧은 대답 : 글쎄, 당신이 10 만 개의 파일을 읽는다면, 스크립트 속도가 느려질 것입니다.

긴 대답 : 이 질문에보다 철저하게 대답하려면 Mac에서 파일 시스템을 살펴 봐야합니다. Mac은 HFS + ( Hierarchical File System Plus )를 사용합니다.이 파일 시스템은 제한이 있지만 극한 상황에서만 사용되는 최신 파일 시스템입니다.

내 경험으로는 Linux EXT 저널링 파일 시스템과 매우 흡사합니다. 이 디렉토리는 마운트 디렉토리, UNIX 유사 권한 등을 지원합니다. 파일을 32 비트 형식으로 지정 하여이 소스 에 따라 볼륨 4,294,967,295에 저장할 수있는 최대 파일 수를 만듭니다.

파일 시스템은 현대 시스템에서 8EB보다 큰 파일과 여기에 설명 된대로 한 위치에서 최대 21 억 개의 파일 및 폴더로 중단 됩니다 .

HFS + 또는 실제로 모든 파일 시스템이 해당 문제에 맞게 설정되는 방식을 고려할 때 폴더에 많은 파일이 있으면 '이상한'작업을 수행해서는 안됩니다.

솔직히 더 복잡한 폴더 계층에 파일을 배포하는 성능 향상이 없을 것이라고 생각합니다. 실제로이 기법은 스크립트가 프로세스 도중 디렉토리를 변경하기 위해 호출해야하기 때문에 효율성이 떨어질 수 있습니다.


권리. 디렉토리 계층 변경에 대해 생각했지만 더 복잡한 알고리즘이 발생하고 성능이 크게 향상 될 것으로 생각됩니다. 답변 해주셔서 감사합니다. 현재 디렉토리에 200,000 개의 파일이 있으며 끝에 1,000,000이있을 수 있습니다. 나는 그 나쁜 성능없이 잘 작동하기를 바랍니다.
Daisuki Honey

@DaisukiHoney 많은 파일로 작업하는 경우, 디렉토리로 세분화 할 수 있는지 확인하는 것이 좋습니다. 이 단계에서 수행하기 어려울 수 있지만 앞으로 더 안정적으로 진행할 수 있습니다.
JakeGould

@JakeGould 조언에 감사드립니다. 파일을 더 추가 할 수 있기 때문에 구조 조정에 대해 생각했습니다. 감사.
Daisuki Honey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.