【问题标题】:du -skh * in / returns vastly different size from df on centos 5.5du -skh * in / 返回与 centos 5.5 上的 df 大不相同的大小
【发布时间】:2011-05-24 09:25:59
【问题描述】:

我有一个运行 centos 5.5 的 vps 切片,我应该有 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

这和我上传到机器上的一致,加起来大概5gigs左右。

但是当我运行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 个演出的东西。

谢谢。

【问题讨论】:

    标签: linux centos vps diskspace du


    【解决方案1】:

    我在使用 FreeBSD 服务器时遇到了同样的问题。重启有帮助。

    【讨论】:

      【解决方案2】:

      造成这种影响的最常见原因是打开的文件已被删除。

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

      确保不留下任何临时文件的常见 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 映像。

      【讨论】:

      • 感谢您提到内核可能正在保存该文件(因此 lsof 不显示它)。我有一个与循环设备关联的大文件(一个稀疏的 lvm 卷组),它占用了我的可用空间,但 lsof 当然没有显示任何内容。
      【解决方案3】:

      我遇到的另一种情况是,如果您在现有文件的“顶部”挂载分区,但它似乎不是您的问题。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-16
        • 1970-01-01
        • 2023-01-26
        • 2013-05-30
        • 1970-01-01
        • 2014-07-01
        • 2019-06-17
        相关资源
        最近更新 更多