우리는 대용량 파일 시스템을 보유하고 있으며 전체 du
(디스크 사용량) 요약을 확인하는 데 2분 이상 걸립니다. 이 파일 시스템에 있는 임의 디렉터리의 디스크 사용량 요약 속도를 높이는 방법을 찾고 싶습니다.
작은 분기에서는 du
반복된 요청이 훨씬 빠르기 때문에 결과가 어떻게든 캐시되는 것처럼 보였지만 큰 분기에서는 속도가 미미했습니다.
du
속도를 높이 거나 마지막 검색 이후 수정되지 않은 분기에 대한 결과를 보다 적극적으로 캐시하는 쉬운 방법이 있습니까 ?
아니면 디스크 사용량 요약을 더 빠르게 제공하는 대체 명령이 있습니까?
답변1
du
를 사용하면 크게 가속화될 수 있는 일반적인 용도입니다 ncdu
.
ncdu - NCurses Disk Usage
을 실행 du
하고 결과를 캐시한 후 멋진 명령줄 GUI에 표시합니다 du -hc -d 1 | sort -h
. 초기 인덱싱에는 시간이 오래 걸리지만 du
모든 하위 디렉터리가 처음에 캐시되어 있기 때문에 귀중한 공간을 채우는 실제 "범인"을 찾는 것이 더 빠릅니다. 사용 가능.
필요한 경우 하위 디렉터리 새로 고침을 누르고 R파일/폴더 삭제를 누르면 D두 가지 모두 모든 상위 디렉터리에 대한 통계가 업데이트됩니다. 삭제하려면 확인이 필요합니다.
ncdu -1xo- / | gzip >export.gz
필요한 경우 cronjob에서 미리 캐시하고 나중에 액세스하여 속도를 더욱 높일 수 있지만 zcat export.gz | ncdu -f-
이는 확실히 더 오래된 정보를 제공하게 됩니다.
답변2
du 명령을 다시 실행하면 표시되는 내용은 디스크 버퍼링의 효과입니다. 블록을 읽으면 블록이 필요할 때까지 해당 디스크 버퍼가 버퍼 캐시에 유지됩니다. du의 경우 디렉터리와 디렉터리에 있는 각 파일의 inode를 읽어야 합니다. 이 경우 du 결과는 캐시되지 않지만 훨씬 적은 디스크 IO로 내보낼 수 있습니다.
시스템이 이 정보를 강제로 캐시하도록 할 수는 있지만 적극적으로 액세스하는 파일에 필요한 버퍼 공간을 사용할 수 없기 때문에 전반적인 성능에 영향을 미칩니다.
디렉토리 자체는 파일의 크기를 알지 못하므로 각 파일의 inode에 액세스해야 합니다. 파일 크기가 변경될 때마다 캐시된 값을 최신 상태로 유지하려면 캐시된 값을 업데이트해야 합니다. 파일은 0개 이상의 디렉토리에 나열될 수 있으므로 각 파일의 inode는 파일이 나열되는 디렉토리를 알아야 합니다. 이로 인해 inode 구조가 크게 복잡해지고 IO 성능이 저하됩니다. 또한 du를 사용하면 서로 다른 블록 크기를 가정하여 결과를 얻을 수 있으므로 캐시에 필요한 데이터는 가능한 각 블록 크기에 대해 캐시 값을 늘리거나 줄여야 하므로 성능이 더욱 저하됩니다.
답변3
duc
(바라보다https://duc.zevv.nl)가 당신이 찾고 있는 것일 수도 있습니다.
Duc는 디스크 사용량을 최적화된 데이터베이스에 저장하여 빠른 사용자 인터페이스를 가능하게 합니다. 인덱싱이 완료된 후 기다릴 필요가 없습니다.
인덱스 업데이트는 매우 빠릅니다(121k 디렉터리에 ~950k 파일, 2.8TB, 10초 미만). GUI와 ncurses UI도 있습니다.
사용 예:
duc index /usr
duc ui /usr
웹사이트에서:
Duc는 대규모 파일 시스템으로 확장되도록 설계되었습니다. 즉, 페타바이트 규모의 스토리지에 있는 수억 개의 파일을 문제 없이 색인화하고 표시합니다.
답변4
서로 다른 파일 계층이 서로 다른 그룹에 속하도록 정렬할 수 있는 경우 다음을 설정할 수 있습니다.디스크 할당량. 필요한 경우가 아니면 상한값을 지정하거나 디스크 크기로 설정하지 마세요. 그룹이 사용하고 있는 할당량(실질적으로 무제한)이 얼마나 되는지 즉시 알 수 있습니다.
이를 위해서는 파일 시스템이 각 할당량 세트를 지원해야 합니다. 이는 Linux의 Ext[234] 및 Solaris/*BSD/Linux의 zfs에 해당됩니다. 그룹 할당량이 ACL을 고려한다면 사용 사례에 좋을 것입니다. 그러나 제 생각에는 그렇지 않습니다.