CentOS 6.6에서 df가 보고한 로그 파일 크기와 공간의 차이

CentOS 6.6에서 df가 보고한 로그 파일 크기와 공간의 차이

CentOS 시스템에 700MB의 공간을 차지하는 로그 파일이 있지만(를 사용하여 본 것처럼 ls), 명령을 실행하면 df -h파일 시스템(ext4)에서 200MB의 공간만 사용되는 것으로 표시됩니다.

이 차이의 원인은 무엇입니까?

파일이 df 보고서보다 더 많은 공간을 차지할 가능성이 있습니까? 그렇다면 공간을 사용하지 않는 파일을 어떻게 알 수 있습니까?

편집: 빠르게 클릭했는데 다른 게시물이 내 질문에 답변하지 않았습니다. 이것은 문제의 단순화된 형태입니다:

# ls -lh /mnt
total 29M
-rw-r--r-- 1 apache apache 678M Jan  6 10:01 Somelog.log
-rw-r--r-- 1 apache apache 1.1M Jan  1 03:20 Somelog.log-20230101.gz
-rw-r--r-- 1 apache apache 1.1M Jan  2 03:23 Somelog.log-20230102.gz
....etc....

# du -sh /mnt
29M    /mnt

전체에 포함되지 않은 파일에 대한 일부 정보를 원하지 않습니다. (파일이 아직 메모리에 있을 때 사용되는 용어는 무엇입니까? 그렇다면)

답변1

ls -l파일의 겉보기 크기를 표시합니다.파일에서 읽을 수 있는 데이터의 양입니다. du파일이 디스크에서 차지하는 실제 공간을 표시합니다.

귀하의 경우 로그 파일은 희박합니다. 여기에는 27MiB에 가까운 실제 데이터와 약 650MiB의 블록(모두 0)이 포함되어 있습니다. 파일이 기록되는 방식으로 인해 이후 블록은 디스크 공간을 차지하지 않으므로 계산되지 않습니다 du. 이런 일이 발생하는 방법은 다음과 같습니다.

  • 한 프로세스는 650MiB의 실제 데이터가 포함된 로그 파일에 씁니다.
  • 로그 파일은 순환되고 지워집니다.
  • 초기 프로세스는 로그 파일이 회전되기 전에 쓰기가 완료된 동일한 오프셋에서 동일한 로그 파일에 계속해서 씁니다.

마지막 단계에서는 새 데이터를 추가하기 전에 파일을 적절한 크기로 확장하지만 데이터는 포함하지 않습니다.

이 문제에 대한 해결책은 데몬을 다시 시작하거나 이 메커니즘을 지원하는 경우 로그 파일을 다시 열도록 신호를 보내 쓰기 프로세스가 회전 후 로그 파일을 닫았다가 다시 열도록 하는 것입니다.

관련 정보