2013-07-25 13 views
2

最近我有一個hadoop羣集空間不足。我嘗試清理一些日誌以獲得一些磁盤空間。我運行命令df -h,它表明:無法在Linux中使用「du -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是DIR /data這是很好的下。但根目錄/剩下的空間很小。所以我用的工具ncdu它可以快速地計算目錄的磁盤使用情況,它表明:

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

沒有大的目錄。我也試過了諸如du -a | sort -n -r | head之類的命令,仍然無法找到這個看不見的目錄或文件。有沒有人知道一些其他方式來找出問題所在?

感謝

回答

4

我終於找到答案。

原因 我刪除了一個大的日誌文件,但沒有回收文件系統中的空間,它仍然佔用磁盤空間。這就是爲什麼du -hdf -h命令的結果不匹配的原因。

解決方案

[email protected]:# lsof/| grep deleted 
java 15393 hdfs 114w REG 8,1 4463704 655506 /var/log/hadoop/hdfs/hadoop-hdfs-datanode-hslave.log (deleted) 

命令lsof列表中的打開的文件。該文件在我刪除時打開。第二列顯示打開此文件的進程的PID。

[email protected]:# cd /proc/15393/fd/ 
[email protected]:# 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) 
[email protected]:# > 114 

輸入文件描述符顯示在上一行(114)。現在空間被回收了。

+0

我很容易重新啓動服務器並重新開始;)。但你救了我的一天! – Kasas

1

有可能是由/data掛載點,或掛載點等隱患大文件。例如,如果您將10G文件寫入/data/large.bin,然後在/data的頂部掛載另一個文件系統,則10G文件將無法看到。

你可以看到,如果這是通過結合/到另一個位置的情況下:

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

如果再衡量/tmp/slash的使用情況,您會看到什麼就只有根文件系統。如果/tmp/slash/data顯示爲已滿,那意味着存在隱藏數據。

+0

我照你說的做了,但是仍然沒有找到大文件,也沒有'/ data' –

+0

基本上,'df -h'和'du -h'的結果不匹配。除'/ data'之外,'du'的總數遠遠小於'df'。有效地存在一些不可見的文件無法找到。 –