无法在linux中使用“du-h”找到大文件

vqlkdk9b  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(379)

我最近有一个hadoop集群空间不足。我试图清理一些日志以获得一些磁盘空间。我执行命令 df -h ,它显示:

/dev/sda1        22G   20G  1.9G  92% /
/dev/sda3       1.8T  747G  960G  44% /data/1
/dev/sdb1       1.8T  755G  986G  44% /data/2
/dev/sdc1       1.8T  754G  987G  44% /data/3
/dev/sdd1       1.8T  745G  996G  43% /data/4

hdfs在目录下 /data 这很好。但是根目录 / 空间所剩无几。所以我用了这个工具 ncdu 它可以快速计算dir的磁盘使用率,它显示:

2.9TiB [##########] /data
  1.5GiB [          ] /home
800.9MiB [          ] /usr
716.3MiB [          ] /var
349.1MiB [          ] /lib
293.8MiB [          ] /opt

没有大目录。我还尝试了如下命令 du -a | sort -n -r | head ,仍然找不到此不可见的目录或文件。有没有人知道其他方法来找出问题所在?
谢谢

im9ewurl

im9ewurl1#

可能有大文件隐藏在 /data 装入点或其他装入点。例如,如果您向 /data/large.bin 然后在上面挂载另一个文件系统 /data ,10g文件将实际上不可见。
你可以通过装订来看看情况是否如此 / 到另一个位置:

mkdir /tmp/slash
mount --bind / /tmp/slash

如果你测量 /tmp/slash 的用法您将只看到根文件系统上的内容。如果 /tmp/slash/data 显示为已满则意味着那里有隐藏的数据。

btxsgosb

btxsgosb2#

我终于找到了答案。
因为我删除了一个大的日志文件,但没有回收文件系统中的空间,它仍然占用磁盘空间。这就是为什么命令的结果 du -h 以及 df -h 不匹配。
解决方案

root@linux:# lsof / | grep deleted
java    15393    hdfs    114w    REG    8,1    4463704    655506    /var/log/hadoop/hdfs/hadoop-hdfs-datanode-hslave.log (deleted)

命令 lsof 列出打开的文件。文件在我删除时被打开了。第二列显示打开此文件的进程的pid。

root@linux:# cd /proc/15393/fd/
root@linux:# ls -l | grep deleted
l-wx------ 1 hdfs hadoop 64 Jul 25 17:55 114 -> /var/log/hadoop/hdfs/hadoop-hdfs-datanode-hslave.log (deleted)
root@linux:# > 114

键入上一行(114)中显示的文件描述符。现在空间被回收了。

相关问题