df与du统计方式不同,当文件被删除,但仍被占用时,du不会进行统计。
使用 lsof |grep delete 查找文件,并清除占用进程即可恢复。
实验如下:
1.查看当前使用情况
[root@ms10 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 16G 8.8G 7.1G 56% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.9M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda1 197M 154M 44M 79% /boot
tmpfs 184M 0 184M 0% /run/user/0
2.创建一个2G文件
[root@ms10 ~]# dd if=/dev/zero of=/tmp/test.dmp bs=1M count=2000
2000+0 records in
2000+0 records out
2097152000 bytes (2.1 GB) copied, 1.9132 s, 1.1 GB/s
3.检查文件系统使用率
[root@ms10 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 16G 11G 5.1G 68% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.9M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda1 197M 154M 44M 79% /boot
tmpfs 184M 0 184M 0% /run/user/0
[root@ms10 ~]# ll -h /tmp/
total 2.0G
-rw-r--r-- 1 root root 2.0G Mar 6 14:42 test.dmp
[root@ms10 /]# du -sh tmp
2.0G tmp
4.新开一个窗口打开该文件
[root@ms10 tmp]# tail -f test.dmp
5.删除文件并检查使用率
[root@ms10 /]# rm -f /tmp/test.dmp
[root@ms10 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 16G 11G 5.1G 68% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.9M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda1 197M 154M 44M 79% /boot
tmpfs 184M 0 184M 0% /run/user/0
[root@ms10 /]# du -sh tmp
0 tmp
[root@ms10 /]# ll -h /tmp/
total 0
根据方式显示,发现du显示文件被清除,但df显示使用率没有变化。
5.查找被删除但仍被占用的文件
[root@ms10 /]# lsof | grep delete
tail 6137 root 3r REG 8,3 2097152000 8388686 /tmp/test.dmp (deleted)
清理占用进程
[root@ms10 /]# ps -ef | grep 6137
root 6137 6106 7 14:49 pts/1 00:00:11 tail -f test.dmp
root 6166 6080 0 14:52 pts/0 00:00:00 grep --color=auto 6137
[root@ms10 /]# kill -9 6137
6.再次检查使用率
[root@ms10 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 16G 8.8G 7.0G 56% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.9M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/sda1 197M 154M 44M 79% /boot
tmpfs 184M 0 184M 0% /run/user/0
[root@ms10 /]# du -sh /tmp
0 /tmp
空间已被释放。