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

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

处理旧的 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)

下一步我应该做什么?很遗憾,目前无法重新启动盒子。

答案1

这里可能发生两件事。

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

如果您的情况如此,而且您非常绝望,那么您可以更改保留的空间量root。要将其减少到 1%(默认值为 5%),您的命令将是

# tune2fs -m 1 /dev/sda3

第二,操作系统不会释放已删除但仍然打开的文件的磁盘空间。如果您删除了(比如说)Apache 的一个日志文件,则需要重新启动 Apache 才能释放空间。

答案2

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

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

答案3

其他 2 种获取方式磁盘已满问题:

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

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

修复起来可能比较麻烦,因为您需要找到文件所在的子目录,但修复起来很容易,因为文件本身很容易删除。我使用命令du并列出根子目录以找出文件空间的使用位置。

cd /
du -sh ./* 

顶级目录的数量通常是有限的,因此我设置了人类可读标记-h来查看哪个子目录占用的空间最大。

然后,您将 cd 放入问题子项中,并对其中的所有项目重复此过程。为了便于识别大项目,我们稍微更改了 du 并将其与排序结合起来。

cd /<suspiciously large dir>
du -s ./* | sort -n

对所有文件和目录按字节大小从小到大生成输出

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

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

答案4

如果某些文件被删除但仍被某些进程使用,则不会释放其空间。在这种情况下,要么重新启动正在使用该文件的进程,要么使该文件无效。最好将这些文件无效,而不是删除它们。要查找已删除但仍被某些进程使用的文件

#lsof +L1

它将提供进程 ID 和文件描述符。要删除文件,请按文件描述符

#echo "" > /proc/$pid/fd/$fd 

相关内容