5

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

当我du -skh *以 root 身份运行 / 时,我得到:

[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 个演出的东西。

谢谢。

4

3 回答 3

11

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

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

确保没有遗留临时文件的常见 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 映像。

于 2010-12-12T23:10:50.137 回答
3

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

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

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

于 2013-04-24T10:59:46.187 回答
2

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

于 2010-12-12T22:40:45.543 回答