删除文件但磁盘空间仍然已满

use*_*727 29 linux

处理旧的 CentOS 5.6 机器,没有 lvm 设置,我的根文件系统 / 已满,我清除了许多我不需要的旧日志文件和应用程序文件,大小超过 2 -5GB,但是我的系统仍然报告磁盘已满。

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
Run Code Online (Sandbox Code Playgroud)

知道我接下来应该尝试做什么吗?不幸的是,此时无法重新启动盒子。

Flu*_*lup 41

这里可能会发生两件事。

首先,您的文件系统保留了一些只能root写入的空间,因此当普通用户用完磁盘空间时,关键系统进程不会崩溃。这就是为什么您会看到使用了 130G 中的 124G,但可用空间为零。也许您删除的文件使利用率下降到这一点,但未低于普通用户的阈值。

如果这是您的情况并且您很绝望,您可以更改为root. 要将其减少到 1%(默认为 5%),您的命令将是

# tune2fs -m 1 /dev/sda3
Run Code Online (Sandbox Code Playgroud)

其次,操作系统不会为仍然打开的已删除文件释放磁盘空间。如果您已删除(例如)Apache 的日志文件之一,则需要重新启动 Apache 以释放空间。

  • 是的,第二个应该是第一个! (5认同)

小智 22

如果删除进程正在使用的文件,则无法再查看该文件ls。该进程仍在写入该文件,直到您停止该进程。

要查看那些已删除的文件,只需运行 lsof|grep delete


小智 10

其他两种获取磁盘的方法已满问题:

1)隐藏在挂载点下: linux 将显示一个完整的磁盘,文件“隐藏”在挂载点下。如果您将数据写入驱动器并在其上挂载另一个文件系统,即使您看不到挂载点下的文件,linux 也会正确记录磁盘使用情况。如果您有 nfs 挂载,请尝试卸载它们并查看在挂载之前是否在这些目录中意外写入了任何内容。

2)损坏的文件:我偶尔会在通过 SMB 将 Windows 文件传输到 linux 文件时看到这种情况。一个文件未能关闭文件描述符,您最终会得到一个 4GB 的垃圾文件。

这修复起来会比较繁琐,因为您需要找到文件所在的子目录,但修复起来很容易,因为文件本身很容易移除。我使用该du命令并列出根子目录以找出正在使用文件空间的位置。

cd /
du -sh ./* 
Run Code Online (Sandbox Code Playgroud)

顶级目录的数量通常是有限的,所以我设置了人类可读的标志-h来查看哪个子目录是太空猪。

然后你 cd 进入问题孩子并为其中的所有项目重复这个过程。为了便于发现大件物品,我们稍微更改了 du 并将其与排序结合起来。

cd /<suspiciously large dir>
du -s ./* | sort -n
Run Code Online (Sandbox Code Playgroud)

它为所有文件和目录按字节大小生成最小到最大的输出

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List
Run Code Online (Sandbox Code Playgroud)

一旦发现过大的文件,您通常可以将其删除。