ini*_*all 149 linux ext3 disk-space-utilization scsi
我在服务器(硬件 Raid 1)中有一个 SCSI 磁盘,32G,ext3 文件系统。df告诉我磁盘已 100% 已满。如果我删除 1G,这将正确显示。
但是,如果我运行 adu -h -x /然后du告诉我只使用了 12G(我使用-x是因为一些 Samba 安装)。
所以我的问题不是关于 du 和 df 命令之间的细微差别,而是关于我如何找出造成这种巨大差异的原因?
我为 fsck 重新启动了机器,但没有错误。我应该跑badblocks吗?lsof向我显示没有打开的已删除文件,lost+found是空的,并且消息文件中没有明显的警告/错误/失败语句。
请随时询问有关设置的更多详细信息。
小智 138
在尝试追踪本地服务器上的问题时偶然发现了此页面。
在我的情况下,df -h和du -sh大约 50% 的硬盘大小不匹配。
这是由 apache (httpd) 在内存中保存已从磁盘中删除的大型日志文件引起的。
这是通过运行追查lsof | grep "/var" | grep deleted那里/var是我需要清理分区。
输出显示如下几行:
httpd 32617 nobody 106w REG 9,4 1835222944 688166 /var/log/apache/awstats_log (deleted)
然后通过重新启动 apache ( service httpd restart)解决了这种情况,并清除了 2GB 的磁盘空间,允许清除对已删除文件的锁定。
Old*_*oll 113
检查位于挂载点下的文件。通常,如果您将一个目录(比如 sambafs)挂载到一个已经有一个或多个目录的文件系统上,您将无法看到这些文件,但它们仍然在消耗底层磁盘上的空间。在单用户模式下,我有文件副本,将文件转储到除了单用户模式之外我看不到的目录中(由于其他目录系统安装在它们之上)。
Mar*_*l G 73
我同意 OldTroll 的回答,认为这是您“丢失”空间的最可能原因。
在 Linux 上,您可以轻松地将整个根分区(或任何其他分区)重新挂载到文件系统中的另一个位置,例如 /mnt,只需发出
mount -o bind / /mnt
Run Code Online (Sandbox Code Playgroud)
那么你可以做一个
du -h /mnt
Run Code Online (Sandbox Code Playgroud)
看看是什么占用了你的空间。
Ps:抱歉添加了新答案而不是评论,但我需要一些格式才能使这篇文章可读。
eir*_*cot 28
看看怎么df -i说。可能是因为您没有 inode,如果该文件系统中有大量小文件,这可能会发生这种情况,这会耗尽所有可用的 inode 而不会消耗所有可用空间。
小智 26
就我而言,这与已删除的大文件有关。在我找到这个页面之前解决起来相当痛苦,这让我走上了正确的道路。
我终于通过使用解决了这个问题lsof | grep deleted,它向我展示了哪个程序保存了两个非常大的日志文件(总共 5GB 的可用 8GB 根分区)。
由程序打开的文件实际上并不会在您删除它们时消失(停止消耗磁盘空间),而是在程序关闭它们时消失。一个程序可能有一个你(和 du)看不到的巨大临时文件。如果它是僵尸程序,您可能需要重新启动才能清除这些文件。
这是迄今为止我发现的最简单的查找大文件的方法!
这是一个示例,如果您的根挂载已满 / (mount /root) 示例:
cd /(所以你在 root 中)
ls | xargs du -hs
示例输出:
9.4M 仓 63M开机 4.0K cgroup 680K 开发 31M等 6.3G家庭 313M库 32M lib64 16K 丢失+找到 61G媒体 4.0 千吨 113M 选择 du:无法访问`proc/6102/task/6102/fd/4':没有那个文件或目录 0 进程 19M根 840K 运行 19M sbin 4.0K selinux 4.0K 伺服器 25G商店 26M tmp
然后你会注意到商店很大做一个 cd /store
并再次运行
ls | xargs du -hs
示例输出: 109M备份 358M上网 4.0G ISO 8.0K 秒 16K 丢失+找到 47M根 11M 脚本 79M tmp 21G 虚拟机
在这种情况下,vms 目录是空间猪。
| 归档时间: |
|
| 查看次数: |
230674 次 |
| 最近记录: |