linux - 无法使用 "du -h"在 Linux 中找到大文件

标签 linux hadoop

我的 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 | 这样的命令排序-n -r | head,仍然无法找到这个不可见的目录或文件。有谁知道其他方法来找出问题所在?

谢谢

最佳答案

我终于找到了答案。

原因 我删除了一个大日志文件,但没有回收文件系统中的空间,它仍在占用磁盘空间。这就是命令 du -hdf -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) 中显示的文件描述符。现在空间被回收了。

关于linux - 无法使用 "du -h"在 Linux 中找到大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17860257/

相关文章:

c - 如何用C语言打开、读取、写入串口?

python - 在文件夹中的多个文件上运行 Python 脚本

Linux:要记录在文件中的守护进程和守护进程输出

performance - 配置单元变量用法

java - 如何使用子工作流程循环进入oozie?

linux - OpenVPN密码认证

linux - FTDI芯片检测问题

sql - 在配置单元中使用 wm_concat 时,如何用 0 填充不存在的值?

hadoop - 如果我使用 S3 而不是 HDFS,是否仍然需要 Namenode?

hadoop - Oozie 工作流导入失败