디스크 공간이 어디로 가는지 이해하십니까?

디스크 공간이 어디로 가는지 이해하십니까?

저는 데비안을 사용하고 있습니다. df -h약 275GB를 사용하고 있음을 보여줍니다.

 Filesystem                 Size  Used Avail Use% Mounted on
rootfs                     315G  274G   26G  92% /
udev                        10M     0   10M   0% /dev
tmpfs                      6.4G  200K  6.4G   1% /run
/dev/disk/by-label/DOROOT  315G  274G   26G  92% /
tmpfs                      5.0M     0  5.0M   0% /run/lock
tmpfs                       13G  4.0K   13G   1% /run/shm

274GB는 어디로 갔는지 궁금하네요. 다음과 같은답은 여기에 있습니다, 파일 시스템이 약 50GB를 사용하고 있음을 알 수 있습니다.

$ du -h /  --max-depth 3
...
51G     /

또한 나는 대규모 Postgres 데이터베이스를 가지고 있다는 것을 알고 있으므로 그것이 얼마나 많은 공간을 사용하는지 확인할 수 있습니다.

$ psql 
=> SELECT pg_database.datname, pg_database_size(pg_database.datname), pg_size_pretty(pg_database_size(pg_database.datname)) FROM pg_database ORDER BY pg_database_size DESC;
   datname   | pg_database_size | pg_size_pretty
-------------+------------------+----------------
 mydatabase  |     230809349908 | 215 GB
 postgres    |          6688532 | 6532 kB
 template1   |          6570500 | 6417 kB
 template0   |          6562308 | 6409 kB

따라서 Postgres는 약 215GB를 사용하고 파일 시스템은 약 50GB를 사용합니다.

그런데 남은 10GB가 어디로 갔는지 확인하는 방법은 무엇일까요?

별거 아닌데 이걸 어떻게 추적하는지 궁금하네요.

답변1

추가 공간은 열려 있었지만 삭제된 파일에 할당될 가능성이 높습니다.

du파일 시스템을 통해 액세스할 수 있는 파일(즉, 파일 이름이 있는 파일)만 표시됩니다. 파일이 삭제되면 해당 파일 이름은 디렉터리에서 제거되지만 디스크 블록(및 inode)은 모든 프로세스가 해당 파일에 대해 열려 있는 파일 핸들을 닫을 때만 해제됩니다. 이 문제를 해결하는 가장 쉬운 방법은 열려 있는 로그 파일을 삭제하고 공간을 확보하는 것입니다. 그런 다음 보유 프로세스가 파일 핸들을 닫도록 강제하거나 해당 프로세스를 종료해야 합니다(종료 프로세스는 항상 모든 파일 핸들을 닫습니다). 프로세스가 파일을 사용할 수 있는 다른 방법이 있습니다(바이너리로 실행, 공유 객체로 로드, 메모리 공간에 매핑).

실행 중인 프로세스가 저장한 열려 있지만 삭제된 파일을 보려면 와 같은 유틸리티를 사용하거나 lsof를 볼 수 있습니다 /proc/*. 여기에서 실행 중인 각 프로세스에는 PID 이름을 딴 디렉터리가 있습니다(예: /proc/1PID 번호는 1). 해당 디렉토리 아래에 있는 심볼릭 링크는 exe프로세스로 실행 중인 바이너리를 보여주고, 이름이 지정된 파일은 maps프로세스의 메모리 공간에 매핑된 파일을 보여주며, 이름이 지정된 디렉토리는 fd프로세스 핸들에 대해 열려 있는 모든 파일을 나열합니다. 거기(삭제됨)가 보이면 그게 다입니다.

답변2

파일 시스템 사용량을 대화식으로 탐색하려면 다음 과 같은 것을 사용할 수 있습니다 xdiskfree.kdiskfreebaobab.

기본적으로 에서와 동일한 정보를 얻을 수 있지만 du각 하위 디렉터리에 대한 정보를 얻는 대신 디렉터리를 클릭하기만 하면 세부 정보를 볼 수 있습니다.

답변3

앞에서 언급한 것처럼 du -sh 명령을 사용하여 폴더의 총 공간 사용량을 확인할 수 있습니다.

폴더에 있는 모든 항목에 대한 크기 정보를 캡처하려면 sudo와 함께 이 명령을 실행해야 합니다.

-s 옵션을 사용하면 du가 디스크 사용량을 재귀적으로 확인하게 됩니다.

-h 옵션은 출력을 읽을 수 있게 만드는 것입니다. 익숙해지면 -h 옵션을 사용하거나 사용하지 않고 du를 실행하여 출력을 비교할 수 있습니다. 때로는 -h 없이 출력하는 것이 유용할 수도 있습니다.

du 명령에 와일드카드를 제출하여 여러 폴더의 사용량을 평가할 수도 있습니다. 그래서:

sudo du -sh /home/*

/home에 있는 각 폴더의 총 사용량을 알려줍니다.

답변4

51GB가 보고 되었으므로 du /51GB를 사용하고 있는 것입니다. 삭제된 파일이나 마운트 지점에 의해 숨겨진 파일 등 보이지 않는 일부 사용된 공간이 있을 수 있습니다(끝 참조).디스크 사용량을 측정하는 방법이 왜 그렇게 다양합니까?– 사실 전체 답변이 흥미로울 수 있습니다.) 그러나 귀하의 경우에는 그럴 가능성이 없습니다.

PostgresQL 데이터베이스가 파일 시스템 내에 있는 경우 파일로 표시되며 총계에 포함됩니다. 분명히 보이는 파일보다 크기 때문에 데이터베이스는 액세스할 수 있는 디렉터리 트리 외부의 다른 곳에 위치합니다.

315GB는 다른 사용자와 공유할 수 있습니다. 아니면 315GB 파일 시스템에 접근할 수 있도록 스토리지를 구성했지만 일부만 디렉토리 트리로 볼 수 있고 데이터베이스는 볼 수 없는 다른 부분에 있을 수도 있습니다. 예를 들어, 두 개의 하위 디렉토리 와 /clients/richard가 있는 볼륨이 있고 디렉토리 트리만 볼 수 있습니다 (예: 프로세스는rootdatabase/clients/richard/root뿌리 뽑힌거기).

나머지 10GB는 일부 복구 시스템일 수 있습니다(많은 VPS에는 부팅되지 않는 기본 시스템을 수정해야 하는 경우 복구 시스템으로 부팅할 수 있는 이 서비스가 있습니다). 또는 루트만 사용할 수 있는 비상 예비일 수도 있습니다("reserve"로 검색).디스크 사용량을 측정하는 방법이 왜 그렇게 다양합니까?).

관련 정보