Linux에서 "삭제"되었지만 여전히 사용되는 파일의 저장소를 회수하는 방법은 무엇입니까?

Linux에서 "삭제"되었지만 여전히 사용되는 파일의 저장소를 회수하는 방법은 무엇입니까?
SERVER:~ # df -mP /home/
Filesystem         1048576-blocks      Used Available Capacity Mounted on
/dev/mapper/rootvg-home_lv       496       491         0     100% /home
SERVER:~ # 
SERVER:/home # lsof | grep -i deleted | grep -i "home" | grep home
badprocess   4315     root  135u   REG      253,2   133525523      61982 /home/username/tr5J6fRJ (deleted)
badprocess2  44654     root  133u   REG      253,2   144352676      61983 /home/username/rr2sxv4L (deleted)
...
SERVER:/home # 

파일은 사용 중에 삭제됩니다. 그래서 그들은 여전히 ​​​​공간을 소비합니다. 하지만 우리는 "badprocess*"를 다시 시작하고 싶지 않습니다. 운영체제는 SLES9인데, "일반 조건"에 대해 질문드립니다.

질문:공간을 확보하기 위해 삭제된 파일을 저장한 프로세스를 다시 시작하지 않고 삭제하는 방법은 무엇입니까?

답변1

의 항목을 사용하여 /proc이러한 파일을 자를 수 있습니다.

# ls -l /proc/4315/fd

그러면 프로세스 4315에서 열린 모든 파일이 표시됩니다. 이미 사용했으며 lsof삭제된 파일이 파일 설명자 135로 표시되므로 다음과 같이 삭제된 파일이 사용하는 공간을 확보할 수 있습니다.

# > /proc/4315/fd/135

파일 설명자 133이 있는 프로세스 44654에 의해 열린 다른 삭제된 파일에도 동일하게 적용됩니다.

# > /proc/44654/fd/133

이제 공간이 해제된 것을 볼 수 있습니다.

또한 삭제되었지만 프로세스에 의해 여전히 열려 있는 파일의 내용을 복사하는 데 사용할 수도 있습니다 cp /proc/XXX/fd/YY /some/other/place/filename.

답변2

badprocess디버거나 해당 ptrace()도구를 사용하여 프로세스를 조작하고 특정 파일을 닫게 하는 다른 도구를 사용 하지 않고는 이 작업을 수행할 수 있는 방법이 없다고 생각합니다.

귀하의 제목은 자물쇠에 대해 이야기하고 있지만 질문 본문에는 자물쇠를 언급하지 않았습니다. 어떤 경우에도 프로세스가 파일에 대한 잠금을 포기하도록 강제할 수 있는 방법은 없습니다. 이는 파일이 파일 시스템에 여전히 링크되어 있는지 여부에 관계없이 적용됩니다.

관련 정보