CentOS 服务器 - 可用磁盘空间不断减少

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

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

因此我运行了如下请求:

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

和这个 :

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

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

但我能找到的最大文件是从我的数据库中转储出来的,它只有一个 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 /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 目录中搜索,找到了这两个很大的目录:

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

我意识到你对我的搜索方法的评价非常正确。我因为在错误的目录中搜索日志而错过了一个 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

现在,当我搜索大文件和文件夹时,我会采用您的建议,谢谢!

答案1

首先:该序列find . -type d -print0 | xargs -0 du | sort -n极其递归且效率低下。
寻找最大的文件find / -type f -print0 | xargs -0 du | sort -n已经好多了,find / -type f -printf "%s %p\n" |sort -n甚至更有效率。

更能说明问题的是在哪里你失去了磁盘空间,并发现最大的目录迅速地 (du-s),因为许多小文件也会加起来(想想邮件队列、打印假脱机等)

第二:当你跑步的时候find “在我的根目录下的每个目录中”您可能忽略了根目录下的“隐藏”文件/目录/,即以点开头的简单文件/目录/.<name> 和不太明显的文件/目录,例如仅由空格/ /或 TAB 字符组成的文件/目录。

从...开始:

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

答案2

将来,使用类似北卡罗莱纳大学映射文件系统使用情况。您将很容易找到日志文件问题。

相关内容