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 的日志文件。
无论如何,我已经停止了httpd
和mysqld
服务,清空了错误日志,这是我现在的 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
将来,使用类似北卡罗莱纳大学映射文件系统使用情况。您将很容易找到日志文件问题。