디스크 공간이 꽉 찼습니다
리눅스에는 휴지통 기능이 없기 때문에 온라인 서버에서 삭제할 모든 파일은 먼저 시스템의 /tmp 디렉터리로 이동한 후 / tmp 디렉토리는 정기적으로 지워집니다. 이 전략 자체에는 아무런 문제가 없으나, 점검 결과 이 서버의 시스템 파티션에는 별도의 /tmp 파티션이 없어 실제로는 /tmp 아래의 데이터가 루트 파티션의 공간을 차지하고 있는 것으로 나타났습니다. 이제 문제가 발견되었으니 /tmp 디렉토리에서 많은 공간을 차지하는 일부 데이터 파일을 삭제하고 /tmp에서 가장 큰 데이터 파일 3개를 확인하면 됩니다.
du -sh /tmp/* | sort -nr | head -3
/tmp 아래에서 가장 큰 데이터 파일 3개를 확인하고 명령 출력을 통해 /tmp 디렉터리에 66GB 파일 access_log가 있음을 확인합니다. 이 파일은 Apache에서 생성된 액세스 로그 파일이어야 합니다. 로그로 볼 때, 아파치 로그 파일이 오랫동안 정리되지 않은 것으로 보입니다. 기본적으로 이 파일로 인해 루트 공간이 가득 찬 것으로 판단됩니다. 파일을 삭제할 수 있는지 확인한 후 작업을 수행합니다. 다음 삭제 작업:
rm /tmp/access_log
그런 다음 시스템을 확인하십시오. 루트 파티션 공간이 해제되었습니까? 출력에서 루트 파티션 공간이 여전히 해제되지 않은 것을 확인할 수 있습니다.
파일을 삭제해도 공간이 해제되지 않습니다
일반적으로 파일 삭제는 발생하지 않습니다. 그러나 프로세스에 의해 파일이 잠겼거나 프로세스가 파일에 데이터를 쓰는 등의 예외가 있습니다. 등. 이 문제를 이해하려면 Linux에서의 파일 저장 메커니즘과 저장 구조를 알아야 합니다.
파일의 데이터 및 포인터 부분
파일 시스템에서 파일의 저장은 데이터 부분과 포인터 부분으로 나누어집니다. 포인터는 메타에 있습니다. - 파일 시스템의 데이터. 데이터가 삭제된 후 이 포인터는 메타데이터에서 지워지고 데이터 부분은 디스크에 저장됩니다. 데이터에 해당하는 포인터를 메타데이터에서 지운 후에는 파일 데이터가 차지한 공간을 덮어쓰고 새로운 내용을 쓸 수 있습니다. access_log 파일을 삭제한 후에도 공간이 해제되지 않는 이유는 httpd 프로세스 때문입니다. 여전히 이 파일에 내용을 계속 쓰고 있어 access_log 파일이 삭제되지만, 프로세스 잠금으로 인해 해당 파일에 해당하는 포인터 부분이 메타데이터에서 지워지지 않고, 포인터가 삭제되지 않기 때문에 시스템 커널이 파일이 삭제되지 않았다고 생각합니다.
어플리케이션이 점유하고 있는 삭제된 파일 목록을 찾아보세요
따라서 df 명령을 통해 공간을 쿼리했는데 해제되지 않았으니 이제 문제를 해결할 아이디어가 생겼습니다. access_log 파일에 데이터를 쓰려면 Linux에서 lsof 명령을 사용해야 합니다. 이 명령을 통해 애플리케이션에서 여전히 사용 중인 삭제된 파일 목록을 얻을 수 있습니다. >
출력 결과에서 볼 수 있듯이 /tmp/access_log 파일은 httpd 프로세스에 의해 잠겨 있으며 httpd 프로세스는 계속해서 이 파일에 로그 데이터를 씁니다. 7열을 보면 이 로그 파일의 크기가 약 70GB이고, 시스템 루트 파티션의 전체 크기가 100GB에 불과하다는 것을 알 수 있습니다. 이 파일이 시스템 루트 파티션의 공간을 소진시키는 원인임을 알 수 있습니다. . 마지막 열의 "삭제됨" 상태는 로그 파일이 삭제되었지만 프로세스가 여전히 이 파일에 데이터를 쓰고 있기 때문에 공간이 해제되지 않았음을 나타냅니다.lsof | grep delete
파일을 올바르게 지우세요
이러한 유형의 문제를 해결하는 방법은 여러 가지가 있습니다. 가장 간단한 방법은 httpd 프로세스를 닫거나 다시 시작하는 것입니다. 물론 운영 체제를 다시 시작할 수도 있습니다. 그러나 이것은 가장 일반적인 접근 방식은 아닙니다. 파일에 계속 로그를 쓰는 이러한 종류의 프로세스의 경우 파일이 차지하는 디스크 공간을 해제하는 가장 좋은 방법은 온라인으로 파일을 지우는 것입니다.
을 통해 수행할 수 있습니다. 이 방법은 디스크 공간을 즉시 해제할 뿐만 아니라 프로세스가 계속해서 파일에 로그를 기록하도록 보장합니다. 이 방법은 Apache, Tomcat 및 Nginx와 같은 웹 서비스에서 생성된 로그 파일을 온라인으로 정리하는 데 자주 사용됩니다.[root@localhost ~]# echo " " >/tmp/access_log