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


26

在没有lvm设置的情况下处理旧的CentOS 5.6盒,我的根文件系统/已满,我清除了许多不需要的旧日志文件和应用程序文件,这些文件和大小超过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
很抱歉提出这个愚蠢的问题,但是您确定自己没/.Trash/空吗?你做完了 sudo rm -Rf ~/.Trash/*吗?
Art Gertner 2014年

这是一台服务器,我没有安装xwindow,因此我的根帐户中没有.trash文件夹。
user1007727 2014年

糟糕的是,我假设/.Trash/存在于所有类似Unix的系统上。
Art Gertner 2014年

您也可以尝试sync(linux.die.net/man/8/sync)命令,也许您的所有操作仍被缓存。
weberik 2014年

Answers:


38

这里可能发生两件事。

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

如果这是您的情况,并且您很拼命,则可以更改为预留的空间量root。要将其减少到1%(默认值为5%),您的命令应为

# tune2fs -m 1 /dev/sda3

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


1
是的,第二个应该是第一个!
穆利亚,2016年

这个问题和答案添加了更多信息superuser.com/questions/444269/…
luka5z


10

另外两种获取磁盘的方法已满

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

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

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

cd /
du -sh ./* 

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

然后,您进入问题子目录并对其中的所有项目重复该过程。为了便于发现大型物品,我们将du稍作更改,然后将其与某种物品配对。

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

对于所有文件和目录,按字节大小产生最小到最大的输出

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

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


很棒的提示!我使用du跟踪了/下的文件夹,并在android SDK下找到了几个非常大的系统映像。删除了它们,一切恢复正常:)
Pupper

4

您可以找出使用lsof打开的文件。它可以产生很多输出,因此在下面的示例中,我只限于以log结尾的行:

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...

1

如果删除了一些文件,但仍被某些进程使用,则不会释放其空间。在这种情况下,请重新启动使用该文件的进程或使该文件无效。将此类文件为空而不是删除它们始终是一个很好的做法。查找已删除的文件但某些进程仍在使用中

#lsof +L1

它将给出进程ID和文件描述符。通过文件描述符使已删除文件为空

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

1

输入命令

#lsof +L1

这将显示带有删除的引用的保存内存的文件列表。

请注意文件的pid(进程ID)

杀死进程

#kill <pid>

内存将由进程释放

通过命令检查

#df -h


0

在野外观察到的实际问题:

确保删除的是实际文件,而不是文件的符号链接。对于日志文件尤其如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.