df -l이 100% 가득 찼다고 표시하지만 파일이 제거되었습니다.

df -l이 100% 가득 찼다고 표시하지만 파일이 제거되었습니다.

로컬 디스크가 가득 찼다는 경고를 받았습니다.

dm@fooserv:/local/data/plog $ df -l
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/rootvg-datavol
                     121790564 115659468         0 100% /local/data
tmpfs                   102400      1028    101372   2% /var/asagent/lib/asagen

디렉토리를 확인하고 파일을 보았습니다.

user@fooserv:/local/data/plog $ ls -ltr
total 84926904
lrwxrwxrwx 1 user ers_gsd          37 Aug 15 03:00 bomb.log -> /local/data/plog/bomb.31655.log
-rw-rw-rw- 1 user ers_gsd           0 Aug 15 03:00 recovery.log
drwxrwxrwt 2 user ers_gsd        4096 Aug 15 03:00 log/
-rw-rw-rw- 1 user ers_gsd           0 Aug 15 03:00 dropping.log
-rw-rw-rw- 1 user ers_gsd       10109 Aug 15 09:20 proc_fooserv.log
-rw-rw-rw- 1 user ers_gsd      381083 Aug 15 10:25 trip_bomb.rip.1.log
-rw-rw-rw- 1 user ers_gsd    60563456 Aug 15 13:35 bomb.31655.log
-rw-rw-rw- 1 user ers_gsd           0 Aug 15 13:37 bomb.stats
-rw-rw-rw- 1 user ers_gsd 86819237888 Aug 15 13:37 process-one.log

어떤 프로세스가 파일을 생성하고 종료했는지 알아냈습니다.

user@fooserv:/local/data/plog $ ps -ef | grep 12077
user    12077     1  0 09:20 ?        00:00:00 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log
user    12085 12077  0 09:20 ?        00:00:35 tail -f /local/data/plog/process-one.log
user    12088 12077  0 09:20 ?        00:01:31 grep ERR
user    12095 12077  0 09:20 ?        00:02:06 grep -v FIXME
user    12098 12077 61 09:20 ?        02:38:56 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log
user    22836 32756  0 13:36 pts/0    00:00:00 grep 12077
user@fooserv:/local/data/plog $ kill 12098
user@fooserv:/local/data/plog $ kill 12100

파일을 제거했습니다.

user@fooserv:/local/data/plog $ rm 프로세스-원.로그

df는 여전히 디렉토리가 꽉 찼다고 말합니다.

dm@fooserv:/local/data/plog $ df -l
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/rootvg-datavol
                    121790564 115659468         0 100% /local/data
   tmpfs                   102400      1028    101372   2% /var/asagent/lib/asagent
user@fooserv:/local/data/plog $

~

답변1

파일 리소스를 보류시키는 프로세스가 계속 실행되고 있는지 확인하는 중입니다.

lsof -nP | grep '(deleted)'

출발점을 주어야 합니다.

답변2

올바른 프로세스를 종료하셨나요? 12077문제의 파일을 열거나 생성하거나 보관하는 것과 같습니다 .

답변3

아마도 Hymie의 말이 맞을 것입니다. 잘못된 프로세스를 종료했거나 둘 이상의 프로세스에서 파일이 열려 있는 것입니다. 파일을 삭제하면 디렉터리 테이블에서 inode가 제거되지만 파일을 사용하는 모든 프로세스가 이를 닫을 때까지 공간이 해제되지 않습니다. 그 자체로는 잠겨 있지 않지만 공간을 회수하기 전에 0이 되어야 하는 카운터가 있습니다.

lsof를 사용해 보세요. 파일을 이미 제거했으므로 디렉터리에 무엇이 열려 있는지 확인하세요.

$lsof +D /로컬/데이터/plog

또는 lsof의 다른 주문 중 하나:http://www.thegeekstuff.com/2012/08/lsof-command-examples/

답변4

여기서 좋은 설명을 찾았습니다.

https://access.redhat.com/solutions/2316

RJ의 답변에서와 같이 lsof | grep deleted큰 도움이 됩니다. 주요 위반자(예: 수십 GB 파일)를 식별한 후 를 사용했습니다. echo > /proc/pid/fd/fd_number여기서 pid와 fd는 위 링크에서와 같이 식별됩니다.

sudo가 필요합니다. 또한 재부팅도 도움이 됩니다.

기계를 다시 시작하지 않아야 한다는 제약이 있었기 때문에 연결된 조언이 특히 유용했습니다.

관련 정보