`du` 요약을 캐시하거나 달리 속도를 높이는 방법은 무엇입니까?


33

전체 du(디스크 사용량) 요약이 2 분 이상 걸리는 큰 파일 시스템이 있습니다. 해당 파일 시스템의 임의 디렉토리에 대한 디스크 사용량 요약 속도를 높이는 방법을 찾고 싶습니다.

작은 지점의 경우 du반복 요청이 훨씬 빠르기 때문에 결과가 어떻게 든 캐시되는 것처럼 보이지만 큰 지점에서는 속도가 무시할 수 있습니다.

du이전 검색 이후 수정되지 않은 분기에 대해 속도를 높이 거나 결과를보다 적극적으로 캐싱 하는 간단한 방법이 있습니까?

아니면 디스크 사용량 요약을 더 빨리 전달할 수있는 대체 명령이 있습니까?


8
2 분은 그리 오래 걸리지 않습니다. 그러나 실제 질문은 "당신은 정말로 du를 캐시하기를 원합니까?" 정확한 현재의 실제 디스크 블록 수를 정확하게 알려 주어야합니까?
Bruce Ediger

나는 교체 du가 나쁘다는 것에 동의 하지만 동일한 인터페이스를 가진 더 빠른 래퍼 스크립트가 우리에게 매우 유용 할 것입니다. 또한, 마지막 수정 시간에 따른 캐싱 결과 (예 : 조각 모음과 같은 디스크 전체 작업이 없다고 가정 할 경우)에 정확한 크기의 결과를 얻을 수있을 것으로 기대합니다.
Ian Mackinnon

2
디스크 사용량이 너무 많은 경우 할당량 구현을 고려할 수 있습니다.
pyasi

2
브루스-당신은 같은 질문을 할 수 find있습니다. 그러나 다음이 locate있습니다.
유발

Android 를 사용하는 경우 StatFs디렉토리 크기의 초고속 추정치를 살펴보십시오 . 크고 복잡한 디렉토리의 경우에 비해 거의 1000 배 빠릅니다 du.
Joshua Pinter

답변:


21

du 명령을 다시 실행할 때 표시되는 것은 디스크 버퍼링의 영향입니다. 블록을 읽으면 해당 블록이 필요할 때까지 디스크 버퍼가 버퍼 캐시에 유지됩니다. du의 경우 디렉토리의 각 파일에 대한 디렉토리와 inode를 읽어야합니다. 이 경우 du 결과는 캐시되지 않지만 훨씬 적은 디스크 IO로 파생 될 수 있습니다.

시스템이이 정보를 캐시하도록 할 수는 있지만 필요한 버퍼 공간을 적극적으로 액세스하는 파일에 사용할 수 없으므로 전체 성능이 저하됩니다.

디렉토리 자체는 파일의 크기를 모릅니다. 따라서 각 파일의 inode에 액세스해야합니다. 파일 크기가 변경 될 때마다 캐시 된 값을 최신 상태로 유지하려면 캐시 된 값을 업데이트해야합니다. 0 개 이상의 디렉토리에 파일을 나열 할 수 있으므로 각 파일의 inode가 파일이 나열된 디렉토리를 알아야합니다. 그러면 inode 구조가 크게 복잡해지고 IO 성능이 저하됩니다. 또한 du를 사용하면 다른 블록 크기를 가정하여 결과를 얻을 수 있으므로 캐시에 필요한 데이터는 가능한 각 블록 크기에 대해 캐시 된 값을 증가 시키거나 감소시켜야 성능이 더 느려집니다.


7

서로 다른 파일 계층이 서로 다른 그룹에 속할 수 있도록 디스크 할당량을 설정할 수 있습니다 . 원하는 경우가 아니면 상한을 지정하거나 디스크 크기로 설정하지 마십시오. 그룹이 사용하는 (효과적으로 무한한) 할당량의 양을 즉시 알 수 있습니다.

이를 위해서는 파일 시스템이 그룹 별 할당량을 지원해야합니다. 리눅스의 Ext [234]와 Solaris / * BSD / Linux의 zfs는 그렇게합니다. 그룹 할당량에서 ACL을 고려한 경우 유스 케이스에 좋을 것 같지만 그렇게 생각하지 않습니다.


7

을 사용하면 일반적인 사용법을 du엄청나게 빠르게 사용할 수 있습니다 ncdu.

ncdu - NCurses Disk Usage

은을 수행하고 du결과를 캐시하고 약간 비슷한 명령 줄 GUI에 표시합니다 du -hc -d 1 | sort -h. 초기 인덱싱은의 시간과 동일하게 걸리지 du만 모든 하위 디렉토리에 초기에 캐시 된 du 정보가 있으므로 귀중한 공간을 채우는 실제 "범인"을 찾는 것이 가속화됩니다.

[r]를 눌러 필요한 서브 디렉토리를 새로 고칠 수 있고 [d]를 누르면 파일 / 폴더를 삭제할 수 있습니다. 두 디렉토리 모두 모든 상위 디렉토리에 대한 통계를 업데이트합니다. 삭제 확인을 요청합니다.

필요한 경우 ncdu -1xo- / | gzip >export.gzcronjob 을 미리 캐싱 하고 나중에로 액세스하여 추가 속도를 높일 수는 zcat export.gz | ncdu -f-있지만 더 오래된 정보를 제공합니다.


7

나는 agedu 를 사용하는 것을 선호합니다

Agedu는 이러한 파일을 원하지 않을 것이라는 가정하에 오래되고 불규칙적으로 사용 된 파일을 찾으려고하는 소프트웨어입니다. (예 : 한 번만 본 다운로드)

기본적으로와 동일한 종류의 디스크 스캔을 수행 du하지만 스캔 한 모든 항목의 마지막 액세스 시간도 기록합니다. 그런 다음 각 서브 디렉토리에 대한 결과 요약을 제공하는 보고서를 효율적으로 생성 할 수있는 색인을 작성한 다음 필요에 따라 해당 보고서를 작성합니다.


4
질문에 대답하지는 않지만 여전히 +1입니다. 좋은 팁.
0xC0000022L

나는 이것이 실제로 질문에 대답한다는 것을 분명히하기 위해 질문을 편집했습니다 (agedu는 디스크 사용량과 액세스 시간을 색인합니다).
Anthony G-모니카

5

SHW가 언급했듯이 agedu실제로 인덱스를 만들었습니다. 에 대해 읽은 후 색인을 만드는 다른 방법을 공유 할 것이라고 생각했습니다 locatedb. locatedbfrom du출력 의 고유 버전을 작성할 수 있습니다 .

du | awk '{print $2,$1}' | /usr/lib/locate/frcode > du.locatedb

awkdu 출력이 파일 이름을 먼저 갖도록 재정렬하므로 frcode올바르게 작동합니다. 그런 다음 locate이 데이터베이스와 함께 사용 하여 디스크 사용량을 신속하게보고하십시오.

locate --database=du.locatedb pingus

필요에 따라이를 확장 할 수 있습니다. 나는 그것이 locatedb를 잘 사용한다고 생각합니다.


3
duc

( https://duc.zevv.nl 참조 ) 당신이 찾고있는 것일 수 있습니다.

Duc는 디스크 사용량을 최적화 된 데이터베이스에 저장하여 빠른 사용자 인터페이스를 제공합니다. 색인이 완료되면 대기 시간이 없습니다.

인덱스 업데이트는 매우 빠릅니다 (121k 디렉토리의 약 950k 파일, 2.8TB의 경우 10 초 미만). GUI와 ncurses UI도 있습니다.

사용 예 :

duc index /usr
duc ui /usr

웹 사이트에서 :

Duc는 거대한 파일 시스템으로 확장 할 수 있도록 만들어졌습니다. 페타 바이트 급 스토리지에서 수억 개의 파일을 문제없이 색인화하고 표시합니다.


2

10 분마다 updatedb를 실행하도록 cronjob을 설정했습니다. 모든 파일 시스템 버퍼를 멋지고 신선하게 유지합니다. 값싼 RAM을 좋은 것으로 사용할 수도 있습니다. 슬랩을 사용하여 '전'과 '후'를 참조하십시오.


귀하의 답변이 질문과 어떤 관련이 있는지 이해가되지 않습니다. updatedb디스크 사용량에 대해서는 아무 것도 말하지 않습니다. 디스크를 순회하기 위해 수행하는 경우 전체 성능이 저하됩니다.
Gilles 'SO- 악마 그만해

3
du디스크에 흩어져있는 잠재적으로 많은 수의 파일의 메타 데이터에 액세스해야하기 때문에 파일 크기를 계산하는 속도가 느립니다. updatedb를 적극적으로 실행하면 모든 파일의 메타 데이터가 RAM에 저장됩니다. 다음에 디스크에서 수천 번의 검색을 수행하는 대신 다른 메타 데이터가 많은 작업을 실행할 때는 캐시를 사용합니다. 일반적으로 트리 메타 데이터의 특정 부분을 캐시 할 가능성이 적습니다. 내 '메타 데이터 캐시 프라이밍'을 사용하면 원하는 데이터가 새로 캐시 될 가능성이 높습니다. 육체적 인 탐색은 없습니다 == FAST.
Marcin

2

디렉토리의 크기 만 알면 화면에 정보를 쓰지 않아도되므로 속도를 크게 높일 수 있습니다. 총합계는 du명령 의 마지막 행이므로 간단히 파이프로 파이프 할 수 있습니다 tail.

du -hc | tail -n 1

2GB 디렉토리 구조는 전체 목록의 경우 1 초가 걸리지 만이 형식의 경우 5 분의 1 미만입니다.


2
나는 du -hs그 목적에 더 편리 하다고 생각 합니다.
lepe

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