오래된 로그인(삭제) 상태인데 신청 후
> /proc/'pid'/fd/4
공간은 회수되지 않습니다.
사실 파일 크기는 0으로 되어 있는데 공간은 계속 쓰이고 있다고요? 내가 뭔가를 잊었나요? 일종의 연결 해제 작업을 수행해야 합니까?
lr-x------ 1 root root 64 Mar 10 16:11 4 -> /var/app/logs/app.log (deleted)
appl 'pid' appl 4r REG 253,2 **0** 6193157 /var/app/logs/app.log (deleted)
답변1
실제로 공간은 파일 시스템에 의해 회수되지만 파일 크기는 여전히 파일이 열려 있는 프로세스에 의해 다음 쓰기가 이루어질 때까지 일시적으로만 0으로 줄어듭니다. 이 시점에서 크기는 이전 크기와 새로 작성된 데이터로 증가하지만 이제부족한파일의 시작 부분이 공칭 0으로 채워지고 디스크 공간을 차지하지 않는 파일입니다.
간단한 테스트를 통해 이 효과를 확인할 수 있습니다. 10초마다 천천히 업데이트되는 대용량 파일을 만듭니다.
$ { dd count=1k if=/dev/zero; while sleep 10;do echo hi; done; } >/tmp/big &
[2] 1050
$ pid=$!
사용된 크기와 디스크 공간을 확인하세요.
$ ls -ls /tmp/big
516 -rw-r--r-- 1 meuh users 524516 Aug 15 15:58 /tmp/big
$ du -a /tmp/big
516 /tmp/big
$ df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 1966228 2924 1963304 1% /tmp
파일 크기는 524516바이트, 516블록이며 파일 시스템은 2924블록을 사용했습니다. 이제 >
다음 명령을 사용하여 파일을 자르고 크기를 즉시 확인하십시오.
$ > /proc/$pid/fd/1; ls -ls /tmp/big
0 -rw-r--r-- 1 meuh users 0 Aug 15 15:59 /tmp/big
0입니다. 10초 후에 다시 확인하세요.
$ ls -ls /tmp/big
4 -rw-r--r-- 1 meuh users 524534 Aug 15 15:59 /tmp/big
$ df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 1966228 2416 1963812 1% /tmp
디스크에서 공간을 회수한 것을 볼 수 있지만(2924에서 2416 사용) 파일 크기는 여전히 동일하고 약간 더해졌으나 차지하는 블록 수(4, 첫 번째 숫자)가 ls -ls
매우 작습니다. , 그래서 스파스. lsof -p $pid
또한 크기 대신 오프셋을 표시합니다.
답변2
아직 열려 있는 파일이 있기 때문에 공간이 회수되지 않습니다(활성 프로세스에 의해 끝에 추가될 수도 있음).