du -skh * in /返回与centos 5.5的df大小不同的大小

我有一个VPS切片运行centos 5.5我应该有15演出的磁盘空间,但根据DF似乎加倍我的磁盘空间使用情况。

当我运行du -skh *作为根我得到:

 [root@yardvps1 /]# du -skh * 0 aquota.group 0 aquota.user 5.2M bin 4.0K boot 4.0K dev 4.9M etc 2.5G home 12M lib 14M lib64 4.0K media 4.0K mnt 299M opt 0 proc 692K root 23M sbin 4.0K selinux 4.0K srv 0 sys 48K tmp 2.0G usr 121M var 

这与我已经上传到机器的一致,并加起来大约5gig。

但是当我运行df我得到:

 [root@yardvps1 /]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/simfs 15728640 11659048 4069592 75% / none 262144 4 262140 1% /dev 

它已经显示我已经使用了将近12演出。

是什么导致了这种差异,有什么我可以做的,我计划了基于15演出的服务器,但现在基本上只让我有大约7演出的东西就可以了。

谢谢。

这种效果最常见的原因是打开的文件已被删除。

如果内核在删除时没有被使用,内核将只释放被删除文件的磁盘块。 否则,推迟到文件关闭或系统重新启动。

确保不存在临时文件的常见的Unix世界技巧如下:

  • 一个进程创建并打开一个临时文件

  • 在仍然保持打开的文件描述符的同时,进程取消链接(即删除)文件

  • 该进程通常使用文件描述符来读取和写入文件

  • 当进程完成时,进程关闭文件描述符,内核释放空间

  • 如果进程(或系统)意外终止,临时文件已被删除,不需要清理。

  • 作为奖励,删除文件可以减少在创建临时文件时命名冲突的可能性,并且还会为正在运行的进程提供一个额外的层 – 对于除root用户以外的任何人都是如此。

这种行为可以确保进程不必处理突然从脚下拉出的文件,而且进程不必为了删除文件而彼此协商。 对于那些来自Windows系统的用户来说这是意料之外的行为,因为在那里通常不允许删除正在使用的文件。

lsof命令以root用户身份运行时,将显示所有打开的文件,并具体指明被删除的文件被删除:

 # lsof 2>/dev/null | grep deleted bootlogd 2024 root 1w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted) bootlogd 2024 root 2w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted) 

停止和重新启动有罪的进程,或只是重新启动服务器应该解决这个问题。

删除的文件也可以由内核保持打开,例如,如果它是一个安装的文件系统映像。 在这种情况下卸载文件系统或重新启动服务器应该做的伎俩。

在你的情况下,通过“缺失”空间的大小来判断,我会查找你用来设置VPS的文件的任何引用,例如安装后删除的Centos DVD映像。

另一个我遇到的情况,虽然看起来并不是你的问题,但如果你在现有文件的“顶部”挂载一个分区。

如果这样做,可以有效地隐藏挂载到分区(挂载点)上的目录中已有的文件。

解决方法:停止装入分区上的打开文件的任何进程,卸载分区,查找和移动/移除现在出现在装载点目录中的所有文件。

我和FreeBSD服务器有同样的问题。 重启帮助。