대용량 데이터베이스(5PB)의 디스크 사용량 찾기

대용량 데이터베이스(5PB)의 디스크 사용량 찾기

저는 5PB 디스크에 있는 디렉터리의 디스크 공간 사용량을 결정하는 가장 효율적인 방법을 찾고 있습니다.

제가 분석하려는 디렉토리 위치는 다음과 같습니다.

/disk/user1/task1/ /disk/user1/task2/ /disk/user2/task3/ /disk/user100/task1/

각각의 크기를 찾아야 해요가장 효율적인 명령이 무엇인지 알고 싶습니다.

지금까지 나는 이것을 시도했습니다 ncdu -rx(며칠이 걸릴 것 같습니다).

더 좋은 방법을 아는 사람이 있나요?

나는 이러한 명령에 최고가 아니므로 자세한 답변을 주시면 감사하겠습니다.

답변1

나는 변형을 사용할 것이다명령줄에서 디렉토리 크기를 얻는 방법은 무엇입니까?-

du -sm /disk/user*/task* | sort -n | tee /tmp/disk-usage.rpt

세 가지 작업을 수행합니다.

  • -s모든 사용자 디렉터리( ) 아래 각 작업 디렉터리의 총 디스크 사용량을 메가바이트( -m) 단위로 수집합니다.
  • 출력을 첫 번째 열을 기준으로 숫자별로 정렬하면 가장 큰 작업 디렉터리가 맨 아래에 배치되고, 정렬을 반대로 하면 맨 위에 배치됩니다.sort -rn
  • 이 출력의 복사본을 화면과 /tmp/disk-usage.rpt의 파일로 보냅니다.

파일의 저장된 복사본을 사용하면 du다음으로 가장 큰 작업 디렉터리를 다시 조사하기 위해 명령을 다시 실행하지 않아도 됩니다(원하지 않는 한).

답변2

이 경우 느린 부분은 파일 크기가 아니라 파일 수입니다. ncdu, du, 및 이와 유사한 경우 stat()각 파일을 필요로 하므로 파일이 많으면 문제가 발생합니다.

파일 크기가 파일 수와 관련된 경우(예: 파일당 파일 크기가 제한된 경우) 운이 좋게도 파일 수를 세고 먼저 디렉터리별로 그룹화하여 목록 범위를 좁힐 수 있습니다. 기본적인 경우에는 stat()발급이 전혀 포함되지 않으며 대부분 readdir().

fstat()불행하게도 적어도 내 시스템에서는 GNU와 같은 일반적인 도구가 모든 파일의 문제를 찾아냅니다. 를 사용하여 작은 C 프로그램을 작성 opendir하고 readdir반환된 개체 수를 계산하면 이 문제를 상당히 쉽게 해결할 수 있습니다 .

파일 크기가 파일 수와 관련이 없다면 운이 없는 것입니다. 나중에 더 작은 파티션을 사용하거나 btrfs 하위 볼륨(역시 O(1) 계산 포함)을 사용하여 O(1) 또는 이와 유사한 디스크 크기 계산을 허용하는 방식으로 파일 시스템을 설정하는 것을 고려하십시오.

관련 정보