zoukankan      html  css  js  c++  java
  • Linux文件删除空间未释放

    当系统空间使用量过大需要清理空间或者清理某个文件时,有时会出现执行了删除命令之后磁盘空间并没有释放,很多人首次遇到该情况时会比较困惑,在考虑是不是像windows系统的回收站一样,删除只是逻辑删除到回收站一样?其实不然,linux的回收站功能想了解的可以与我沟通或查资料了解一下,也是个比较实用的方法,此处我们主要实践文件删除后空间未释放问题。

    1、 实验准备

    想模拟该场景的方式很多,主要是实现文件被占用的场景。最简单的方式是拷贝文件,另一个常见方式是对于会编程或shell功底较好的同学可以写程序或脚本不停的往一个文件里写入内容。本次主要通过拷贝文件来快速复现。

    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   test@192.168.28.226:/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.
    test@192.168.28.226's password: 
    all_backup.tar.gz                                                                                                                                              0% 2432KB   2.4MB/s   17:53 ETA^Z
    [1]+  Stopped                 scp all_backup.tar.gz test@192.168.28.226:/home/test
     /* 放在后台运行 */
    [root@c7_2 local]# bg %1               
    [1]+ scp all_backup.tar.gz test@192.168.28.226:/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 (list opened files)命令查看已经打开的文件以及文件被哪个进程所占用。

    lsof命令在最小化安装的系统中是没有,可以先通过yum安装

     yum install -y lsof

    2.1  lsof查看文件

    查看所有已打开文件并筛选出其中已删除状态(deleted)的文件

    [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 test@192.168.28.226:/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 命令在线清空文件,则无需暴力的结束进程,如果此方法无效时再考了结束进程。

    如想了解更多精彩文章或进入技术群,可以关注wx公众号 数据库干货铺

  • 相关阅读:
    PAT (Advanced Level) Practice 1100 Mars Numbers (20分)
    PAT (Advanced Level) Practice 1107 Social Clusters (30分) (并查集)
    PAT (Advanced Level) Practice 1105 Spiral Matrix (25分)
    PAT (Advanced Level) Practice 1104 Sum of Number Segments (20分)
    PAT (Advanced Level) Practice 1111 Online Map (30分) (两次迪杰斯特拉混合)
    PAT (Advanced Level) Practice 1110 Complete Binary Tree (25分) (完全二叉树的判断+分享致命婴幼儿错误)
    PAT (Advanced Level) Practice 1109 Group Photo (25分)
    PAT (Advanced Level) Practice 1108 Finding Average (20分)
    P6225 [eJOI2019]异或橙子 树状数组 异或 位运算
    P4124 [CQOI2016]手机号码 数位DP
  • 原文地址:https://www.cnblogs.com/gjc592/p/12825775.html
Copyright © 2011-2022 走看看