나는 두 번의 연속 인터뷰 에서이 질문을 받았지만 여러 시스템 관리자와 조사하고 점검 한 결과 좋은 대답을 얻지 못했습니다. 누군가가 나를 도울 수 있는지 궁금합니다.
서버의 디스크 공간이 부족합니다. 로그 파일이 매우 커서 제거해도 안전한지 확인하십시오. 파일을 삭제했지만 디스크가 여전히 가득 찼음을 표시합니다. 이 문제의 원인은 무엇이며 어떻게 해결 하시겠습니까? 이 로그 파일을 작성하는 프로세스를 어떻게 알 수 있습니까?
나는 두 번의 연속 인터뷰 에서이 질문을 받았지만 여러 시스템 관리자와 조사하고 점검 한 결과 좋은 대답을 얻지 못했습니다. 누군가가 나를 도울 수 있는지 궁금합니다.
서버의 디스크 공간이 부족합니다. 로그 파일이 매우 커서 제거해도 안전한지 확인하십시오. 파일을 삭제했지만 디스크가 여전히 가득 찼음을 표시합니다. 이 문제의 원인은 무엇이며 어떻게 해결 하시겠습니까? 이 로그 파일을 작성하는 프로세스를 어떻게 알 수 있습니까?
답변:
이것은 일반적인 인터뷰 질문이며 다양한 프로덕션 환경에서 발생하는 상황입니다.
파일의 디렉토리 항목이 삭제되었지만 로깅 프로세스가 여전히 실행 중입니다. 모든 파일 핸들이 닫히고 (예 : 프로세스가 종료 됨) 모든 디렉토리 항목이 제거 될 때까지 운영 체제가 공간을 회수하지 않습니다. 파일에 쓰는 프로세스를 찾으려면 lsof
명령 을 사용해야합니다 .
질문의 다른 부분은 때때로 "프로세스를 종료하지 않고 쓰여지는 파일을 어떻게 지우나요?"일 수 있습니다. 이상적으로 는 파일을 삭제하는 대신 로그 파일 을 "제로"또는 "잘라 내기"하는 것이 가장 : > /var/log/logfile
좋습니다.
fuser
.
no-clobber
설정 한 경우 :>| /var/log/logfile
df
공간이 부족 du
하다고 말하고 거의 사용하지 않는다고 말합니다. 원인은 무엇이며 왜 두 도구가 동의하지 않습니까?"
> /var/log/file
디스크 공간이 여전히 100 %에 도달 하면 어떻게해야합니까 ? 로그 파일이 비어있는 것 같지만이 로그 파일에 기록하는 프로그램을 다시 시작한 후에 만 공간이 복구됩니다. 프로그램을 다시 시작하지 않고 디스크 공간을 복구하는 방법이 있습니까?
파일에 대한 또 다른 링크가 있습니다 (하드 링크 또는 열린 파일 핸들). 파일을 삭제하면 디렉토리 항목 만 삭제됩니다. 마지막 참조가 제거 될 때까지 파일 데이터와 inode가 정지됩니다.
서비스가 임시 파일을 작성하고 파일을 열어 둔 상태에서 즉시 삭제하는 것이 일반적입니다. 이렇게하면 디스크에 파일이 생성되지만 프로세스가 비정상적으로 종료되는 경우 파일이 삭제되고 다른 프로세스가 파일에서 실수로 스톰 핑되는 것을 방지 할 수 있습니다. 예를 들어 MySQL은 모든 온 디스크 임시 테이블에 대해이 작업을 수행합니다. 맬웨어는 종종 유사한 전술을 사용하여 파일을 숨 깁니다.
Linux에서는 다음과 같이 삭제 된 파일에 편리하게 액세스 할 수 있습니다 /proc/<pid>/fd/<filenumber>
.
프로세스가 파일을 여는 것 외에도 두 번째 경우는 btrfs
또는 같은 스냅 샷을 지원하는 파일 시스템이있는 경우입니다 ZFS
.
예를 들어, 거대한 로그 파일이 존재하는 스냅 샷을 만듭니다. 지금 파일을 삭제하면 델타 만 삭제됩니다. 델타는 파일을 사용하지 않을 때만 삭제됩니다.
참조 :
세 번째 경우는 블록 수준 중복 제거를 지원하는 파일 시스템이 있고 대부분의 파일이 다른 파일과 동일한 경우입니다. 로그 내용이 동일하도록 동일한 FS를 공유하는 syslog 컨테이너 또는 VM에 로그를 보내는 컨테이너 또는 VM이 없으면 로그에 대해 이것이 발생할 것으로 예상되지 않습니다.