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

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

我正在尝试追踪我所有的硬盘空间都去哪儿了。我的总空间为 1TB,根据我的系统,已使用 433GB。但是,我知道我的空间更大,因为我不知道有任何大文件或文件夹。以下显示前 10 个目录。

du -cks *|sort -rn|head

它说 /var 文件夹占用了 480GB,但是当我进入该文件夹时,没有任何可调整大小的内容(我从 root 或具有 su 权限的 '/' 运行它)。

我遗漏了什么?代码中是否有任何隐藏文件没有找到?作为参考,我使用的是 opensuse 11.3,如果这会产生差异的话。

答案1

如果您按照建议执行递归 du,并计算整个 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

会显示很多文件,但您要查找的是 size 列中的值较大且 NLINK 列中的值为 0(并且未标记为已删除)的文件。该文件仍在写入,但不再链接。

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

答案2

这只是意味着您没有找到占用了所有空间的文件。找到它应该很容易,因为如果du在顶层找到它,那么它就位于文件系统中。

如果du -s /directory显示已使用空间,但 没有du -s /directory/*,则问题出在 中的隐藏(“以 . 开头”)文件或目录中。如果和/directory之间存在差异(大于可以通过舍入差异解释的差异),则说明您已删除但未发布的文件占用了空间。dfdu

答案3

quanta,你的回答帮我确定了问题...结果发现它是 /var/lib/mysql 文件夹...现在,我需要弄清楚该如何处理它...

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

mysql> set global expire_logs_days = 7;

(也改变my.cnf以使其永久生效)

您应该将其设置为不低于从属服务器可能落后于主服务器的最大天数。

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

答案4

你下面装了什么东西吗/var

挂载点“下方”可能隐藏有数据。

例子:

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

现在在 /var/test 安装某些内容 - 您将看不到丢失的 16MB 在哪里。

相关内容