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

时间:2010-12-12 22:28:31

标签: linux centos vps diskspace du

我有一个vps slice运行centos 5.5我应该有15 GB的磁盘空间,但根据df它似乎是我的磁盘空间使用量加倍。

当我在/以root身份运行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演出的东西。

感谢。

3 个答案:

答案 0 :(得分:11)

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

如果删除的文件在删除时未被使用,则内核将仅释放已删除文件的磁盘块。否则,这将延迟到文件关闭或系统重新启动。

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

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

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

  • 该进程通常使用文件描述符

  • 读取和写入文件
  • 进程完成后关闭文件描述符,内核释放空间

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

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

此行为可确保进程不必处理突然从脚下拉出的文件,并且进程不必相互协商以删除文件。但是,对于来自Windows系统的人来说,这是一种意外的行为,因为通常不允许删除正在使用的文件。

以root身份运行时,lsof命令将显示所有打开的文件,它将明确指出已删除的已删除文件:

# 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映像。

答案 1 :(得分:3)

我遇到的另一个案例虽然看起来不是你的问题但是如果你在现有文件的“顶部”安装一个分区。

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

修复:停止挂载分区上打开文件的任何进程,卸载分区,查找并移动/删除现在出现在挂载点目录中的所有文件。

答案 2 :(得分:2)

我遇到了与FreeBSD服务器相同的问题。重启有帮助。