Linux에서 파일 삭제 후 공간이 해제되지 않는 문제 해결 방법

머리말

시스템 공간 사용량이 너무 커서 공간을 비우거나 특정 파일을 정리해야 하는 경우 때때로 삭제 명령을 실행한 후 디스크 공간이 해제되지 않는 경우가 있는데 많은 사람들이 이러한 상황을 처음 접했을 때 혼란스러워할 것입니다. .그들은 윈도우 시스템과 같은 것인지 고민하고 있습니다.휴지통과 마찬가지로 휴지통에 삭제가 삭제됩니다. 사실 그렇지는 않습니다.리눅스의 휴지통 기능에 대해 알고 싶으시면 저에게 연락을 주시거나 정보를 확인하시면 됩니다.또한 보다 실용적인 방법이기도 합니다. 파일 삭제 후 해제되지 않습니다.

1. 실험 준비

주로 파일이 사용되는 시나리오를 실현하기 위해 이 시나리오를 시뮬레이트하는 여러 가지 방법이 있습니다. 가장 쉬운 방법은 파일을 복사하는 것이고 또 다른 일반적인 방법은 프로그래밍이나 쉘 기술이 좋은 학생들이 프로그램이나 스크립트를 작성하여 파일에 내용을 지속적으로 쓸 수 있다는 것입니다. 이번에는 주로 파일을 복사하여 빠르게 재생합니다.

1.1 약간 더 큰 파일 만들기

/* 主要针对此文件操作 */
[root@c7_2 local]# ll -h 
total 3.0G
-rw-r--r--. 1 root root 2.5G May 4 17:43 all_backup.tar.gz

/* 此时根目录使用量6.5G */
[root@c7_2 ~]# df -lh 
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 6.5G 39G 15% /
/dev/sda1 1014M 150M 865M 15% /boot
tmpfs 378M 0 378M 0% /run/user/0

1.2 scp 명령을 통한 파일 점유

/* 开始远程拷贝至其他主机 */
[root@c7_2 local]# scp all_backup.tar.gz [email protected]:/home/test/ 

The authenticity of host '192.168.28.226 (192.168.28.226)' can't be established.
ECDSA key fingerprint is SHA256:QfJb1DogFmdZ0hkeVRvn2VHke+tkZ2+sNljhBBudooc.
ECDSA key fingerprint is MD5:2a:8a:63:80:35:17:f7:e9:2a:ea:13:98:eb:26:30:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.28.226' (ECDSA) to the list of known hosts.
[email protected]'s password: 
all_backup.tar.gz                                    0% 2432KB 2.4MB/s 17:53 ETA^Z
[1]+ Stopped     scp all_backup.tar.gz [email protected]:/home/test
 /* 放在后台运行 */
[root@c7_2 local]# bg %1    
[1]+ scp all_backup.tar.gz [email protected]:/home/test &

1.3 파일 삭제

/* 删除文件 */
[root@c7_2 local]# rm -f all_backup.tar.gz 
/* 查看磁盘空间,没有变化 */
[root@c7_2 local]# df -lh 
Filesystem    Size Used Avail Use% Mounted on
devtmpfs     1.9G  0 1.9G 0% /dev
tmpfs     1.9G  0 1.9G 0% /dev/shm
tmpfs     1.9G 12M 1.9G 1% /run
tmpfs     1.9G  0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 6.5G 39G 15% /
/dev/sda1    1014M 150M 865M 15% /boot
tmpfs     378M  0 378M 0% /run/user/0
/* 文件已不在 */
[root@c7_2 local]# ll -h 
total 3.0G
drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x. 2 root root 6 Apr 11 2018 include
drwxr-xr-x. 2 root root 6 Apr 11 2018 lib
drwxr-xr-x. 2 root root 6 Apr 15 05:56 lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 libexec
drwxr-xr-x. 2 root root 6 Apr 11 2018 sbin
drwxr-xr-x. 5 root root 49 Nov 17 16:46 share
drwxr-xr-x. 2 root root 6 Apr 11 2018 src

2. 처리방법

lsof(열린 파일 나열) 명령을 사용하여 열린 파일과 해당 파일이 사용 중인 프로세스를 볼 수 있습니다.

lsof 명령은 최소 설치 시스템에서는 사용할 수 없으며 yum을 통해 먼저 설치할 수 있습니다.

 yum install -y lsof

2.1 lsof 보기 파일

열려 있는 모든 파일을 보고 삭제된 상태(삭제됨)의 파일을 필터링합니다.

[root@c7_2 local]# lsof |grep deleted
firewalld 818     root  6u   REG       253,0    4096  36061750 /tmp/ffi0SEit6 (deleted)
gmain   818 998  root  6u   REG       253,0    4096  36061750 /tmp/ffi0SEit6 (deleted)
tuned   1180     root  8u   REG       253,0    4096  33554962 /tmp/ffio5Nu8r (deleted)
gmain   1180 1602  root  8u   REG       253,0    4096  33554962 /tmp/ffio5Nu8r (deleted)
tuned   1180 1603  root  8u   REG       253,0    4096  33554962 /tmp/ffio5Nu8r (deleted)
tuned   1180 1605  root  8u   REG       253,0    4096  33554962 /tmp/ffio5Nu8r (deleted)
tuned   1180 1606  root  8u   REG       253,0    4096  33554962 /tmp/ffio5Nu8r (deleted)
scp    1798     root  3r   REG       253,0 2665433605 104181296 /usr/local/all_backup.tar.gz (deleted)

방금 삭제한 파일을 찾았고 해당 프로세스에서 열었습니다.

2.2 보기 프로세스

lsof를 통해 all_backup.tar.gz 파일이 1798번 프로세스가 점유하고 있는 것을 확인하고 어떤 프로세스인지 확인할 수 있다.

[root@c7_2 local]# ps -ef|grep 1798
root    1798  1729 0 17:47 pts/0  00:00:00 scp all_backup.tar.gz [email protected]:/home/test
root    1799  1798 2 17:47 pts/0  00:00:03 /usr/bin/ssh -x -oForwardAgent=no -oPermitLocalCommand=no -oClearAllForwardings=yes -l test -- 192.168.28..226 scp -t /home/test
root    1868  1806 0 17:49 pts/1  00:00:00 grep --color=auto 1798

이전에 실행한 복사 명령과 동일합니다.

2.3 여유 공간 확보

이러한 종류의 쿼리 상태에 대해서는 해당 프로그램을 종료해야 합니다.

/* 杀掉对应进程 */
[root@c7_2 local]# kill -9 1799  1798
/* 空间已释放 */
[root@c7_2 local]# df -lh 
Filesystem        Size Used Avail Use% Mounted on
devtmpfs         1.9G   0 1.9G  0% /dev
tmpfs          1.9G   0 1.9G  0% /dev/shm
tmpfs          1.9G  12M 1.9G  1% /run
tmpfs          1.9G   0 1.9G  0% /sys/fs/cgroup
/dev/mapper/centos-root  46G 4.0G  42G  9% /
/dev/sda1        1014M 150M 865M 15% /boot
tmpfs          378M   0 378M  0% /run/user/0

참고: 로그를 지우려면 echo filename 명령을 사용하여 온라인에서 파일을 지울 수 있습니다. 강제로 프로세스를 종료할 필요가 없습니다. 이 방법이 유효하지 않으면 프로세스를 다시 종료하십시오.

3. 결론

이 문서는 주로 다음 시나리오에 적용됩니다.

  • 해제되지 않은 파일 공간 삭제
  • 디스크가 꽉 찼지만 파일을 찾을 수 없습니다.

다시 묻습니다. echo filename 명령을 사용하여 온라인에서 파일을 지울 수 있으면 프로세스를 강제로 종료할 필요가 없습니다. 이 방법이 유효하지 않으면 프로세스를 다시 종료하십시오.

추천

출처blog.csdn.net/Ruishine/article/details/128236056