我知道我有更多的自由空间

我试图追查我的硬盘空间在哪里。 我有1TB的总空间,根据我的系统,使用了433GB。 不过,我知道我有更多,因为我没有任何我知道的大文件或文件夹。 以下显示前10个目录。

du -cks *|sort -rn|head 

它说/ var文件夹占用了480GB,但当我进入该文件夹时,没有什么大的(我从root或'/'w / su权限运行这个)。

我错过了什么? 有没有隐藏的文件,该代码不能拿起? 作为参考,我正在使用opensuse 11.3,如果这样做差异。

如果按照build议执行recursion操作,并计算整个var树的所有空间,并且不加上使用的总数,则可能需要检查未打开的文件句柄。 这可能发生在不正确的logrotate脚本中,这些脚本会删除或移动仍在写入的日志。 你取消链接文件(删除inode,因此ls不再报告),但是这个过程仍然在写入。

lsof通常不是一个标准的安装,所以你必须通过OpenSuse使用的任何方法安装它,然后运行: lsof +L -a /var

你会看到输出

 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME httpd 32287 apache 14w REG 253,7 3020256 1 121 /var/log/httpd/access_log 

将会出现许多文件,但是您要查找的是在大小列中具有较大值,在NLINK列中为0(并且未标记为已删除)的文件。 该文件仍在写入,但不再链接。

您可以通过终止打开未链接文件句柄的进程来更正它。

所有这一切意味着你没有find所有空间正在使用的文件。 发现它应该是微不足道的,因为如果dufind它在最高层,那么它就坐在文件系统上。

如果du -s /directory显示使用的空间,但是du -s /directory/*没有,那么问题就直接隐藏在(“以。”开始)文件或目录中。 如果dfdu之间存在差异(大于可以通过舍入差异来解释),那么您已经删除了但未发布的文件占用空间。

量子,你的答案帮我把它钉住了…原来是/ var / lib / mysql文件夹…现在,我需要弄清楚该怎么做瓦特/ …

你用过MySQL复制吗? 如果是这样 ,也许二进制日志填满你的硬盘。 它可以通过从mysql>提示符中设置expire_logs_days自动删除:

 mysql> set global expire_logs_days = 7; 

(也改变my.cnf使它永久)

你应该设置它不低于你的奴隶可能落后于主人的最大天数。

如果不是 ,继续检查/var/lib/mysql所有数据库。

你有什么东西挂在/ var

可能存在隐藏在“挂载点”下的数据。

例:

 mkdir /var/test dd if=/dev/zero of=/var/test/data.dat bs=1M count=16 

现在在/ var / test上挂载一些东西 – 你不会看到缺less的16MB的地方。