我最近有一个用尽空间的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
之类的命令,仍然无法找到这个不可见的目录或文件。有谁知道其他方法来找出问题所在?
由于
答案 0 :(得分:4)
我终于找到了答案。
<强>原因强>
我删除了一个大型日志文件,但没有回收文件系统中的空间,它仍然占用了磁盘空间。这就是命令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)中显示的文件描述符。现在这个空间被收回了。
答案 1 :(得分:1)
/data
挂载点或其他挂载点可能隐藏了大文件。例如,如果您将10G文件写入/data/large.bin
,然后在/data
上安装另一个文件系统,则10G文件将实际上不可见。
您可以通过将/
绑定到其他位置来查看是否属于这种情况:
mkdir /tmp/slash
mount --bind / /tmp/slash
如果您测量/tmp/slash
的使用情况,您将只看到根文件系统上的内容。如果/tmp/slash/data
显示为已满,则表示此处存在隐藏数据。