CentOS服务器 – 可用磁盘空间不断下降

df命令的结果:

Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 864000688 809338092 10773908 99% / tmpfs 32965940 0 32965940 0% /dev/shm /dev/sda1 198337 87394 100703 47% /boot 

df命令的结果几秒钟后:

 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 864000688 809400076 10711924 99% / tmpfs 32965940 0 32965940 0% /dev/shm /dev/sda1 198337 87394 100703 47% /boot 

我以我难以置信的速度在服务器上占用磁盘空间。 每当可用空间达到0字节时,Mysql服务崩溃。

我已经reboot服务器来清除dmesg日志,我已经删除了每个大日志文件(错误日志,消息日志和named.run日志)并运行此请求: sudo /usr/sbin/lsof | grep deleted sudo /usr/sbin/lsof | grep deleted

然而我释放的空间在一天之内就被吃掉了。

所以我已经运行的请求,如:

 du -hsx * | sort -rh | head -15 

和这个 :

 find . -type d -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh { 

在我的根目录的每个目录中。

但我能find的最大的文件是从我的数据库转储,它只是一个1Gb文件:

 -rw-r--r-- 1 root root 1032237681 6 déc. 2013 dump_experta2.sql -rw-r--r-- 1 root root 389789251 6 déc. 2013 dump_experta.sql 

你能解释一下为什么可用空间似乎被一些看不见的文件所使用? 我怎样才能本地化和停止这个空间磁盘泄漏?

编辑:感谢HBruijn的提示,我解决了我的问题,这是我一步一步做,如果你遇到同样的问题:

我跑了find / -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s

并得到了这个结果:

 1216308 /usr 23356 /lib64 73176 /root 440 /tmp 4 /selinux 4 /command 5574820 /var 4 /media 16 /lost+found 352388 /lib 8 /opt 0 /.autorelabel 4 /service 0 /sys 36500 /www 0 /proc 81785 /boot 7760 /bin 160 /dev 742949400 /home 14572 /sbin 0 /currentsize 0 /.autofsck 2092 /package 4 /srv 4 /mnt 27676 /etc 72944 /test 

所以看起来主目录是最大的一个,所以我重复了这个过程,find家里最大的目录:

 # find /home -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s 133952 /home/advisio 16 /home/dovecot 2210824 /home/vpopmail 186500 /home/admin 37152 /home/ginger 511121816 /home/user1 229278612 /home/user2 

我重复了这个过程,看到user1的数据已经增长了,所以我继续在user1目录下search,发现了这两个很重的目录:

 281766156 /home/user1/www/log 207269420 /home/user1/www/fichiers 

“fichiers”目录的大小并不罕见,因为它被用来存储无数的pdf和图片文件。 所以我看看日志文件夹,发现这个:

 # ls -l -rwxrwxrwx 1 vroom users 288586156425 2 juil. 15:34 log-sql-error.txt 

我意识到你对我的search方法所说的话是非常正确的。 我设法通过在错误的目录中search日志来错过288 Gb的日志文件。

无论如何,我已经停止了httpdmysqld服务,清空错误日志,这里是我的DF现在:

 Filesystem 1G-blocks Used Available Use% Mounted on /dev/sda2 824G 505G 278G 65% / tmpfs 32G 0G 32G 0% /dev/shm /dev/sda1 1G 1G 1G 47% /boot 

现在,当我search大量文件和文件夹时,我会使用您的build议,谢谢!

首先:序列find . -type d -print0 | xargs -0 du | sort -n find . -type d -print0 | xargs -0 du | sort -n find . -type d -print0 | xargs -0 du | sort -n是令人难以置信的recursion和低效率。
find / -type f -print0 | xargs -0 du | sort -n查找最大的文件 find / -type f -print0 | xargs -0 du | sort -n find / -type f -print0 | xargs -0 du | sort -nfind / -type f -printf "%s %p\n" |sort -n更好,效率更高。

通常更多的信息是你丢失磁盘空间的地方,并快速find最大的目录du -s ),因为许多小文件也会加起来(比如邮件队列,打印假脱机程序等等)

第二:当你在根目录下 find 每一个目录时,你可能忽略了根目录下的“hidden”文件/目录,也就是简单的文件/目录,以dot /.<name>开头,不太明显的文件/目录包括只有空格/ /或制表符。

从…开始:

 find / -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s 

并从中解脱出来。

您已经查看了可能仍然使用lsof打开的已删除文件,但是您可能有写入大型(临时)文件的进程,查看sudo lsof -s | awk '$5 == "REG"' | sort -n -r -k 7,7 | head -n 50 sudo lsof -s | awk '$5 == "REG"' | sort -n -r -k 7,7 | head -n 50

将来,使用像ncdu这样的工具来映射文件系统的使用情况。 你会很容易地发现日志文件的问题。