Linux服务器空间不足


31

连续两次面试中都向我提出了这个问题,但是在进行了一些研究并与各种系统管理员进行了核对之后,我并没有收到很好的答案。我想知道是否有人可以在这里帮助我。

服务器的磁盘空间不足。您会注意到一个非常大的日志文件,并确定可以安全删除它。您删除该文件,但磁盘仍然显示它已满。是什么原因造成的,您将如何补救?以及您如何查找哪个进程正在写入此巨大的日志文件?


3
您需要与更好的系统管理员联系。这是琐碎的东西。
womble

2
琐碎的事,但情况和问题经常出现……
ewwhite

OP可以接受吗?
ewwhite 2012年

5
对于那些不会流利* nix的人(例如主要是Windows管理员)来说,这是不重要的事情,这是个好东西。
约翰·加迪尼尔

Answers:


56

这是一个常见的面试问题,并且在各种生产环境中都会出现这种情况。

该文件的目录条目已删除,但日志记录过程仍在运行。直到所有文件句柄都已关闭(例如,该进程已被杀死)并且所有目录条目都被删除,操作系统才会回收该空间。要查找写入文件的过程,您需要使用lsof命令。

问题的另一部分有时是“如何在不终止进程的情况下清除正在写入的文件?” 理想情况下,您可以使用类似的方法将日志文件“零”或“截断”,: > /var/log/logfile而不是删除文件。


1
...或fuser
史蒂文星期一

1
扩大一点:直到对磁盘上文件的所有引用都消失了,该空间才能被其他东西使用。包括文件句柄。这也使这个技巧发挥了作用:serverfault.com/questions/45237/link-to-a-specific-inode
Jeff Ferland 2012年

1
如果已no-clobber设置,请尝试:>| /var/log/logfile
Belmin Fernandez 2012年

2
我在每次采访中都会问这个问题的一个变种:“您收到磁盘已满的消息。df说您的空间不足,du说您几乎没有使用任何消息。是什么原因造成的,为什么这两个工具不同意?”
voretaq7 2012年

如果> /var/log/file磁盘上的空间仍然为100%,该怎么办?日志文件似乎为空...但是只有在重新启动在该日志文件上写入的程序之后,空间才会恢复。有没有一种方法可以在不重新启动程序的情况下恢复磁盘空间?
alemani 2012年

14

还有另一个文件链接(硬链接或打开文件句柄)。删除文件只会删除目录条目。文件数据和inode会一直徘徊,直到删除了对其的最后一个引用。

服务创建临时文件并在保持打开状态的同时立即删除它是一种常见的做法。这会在磁盘上创建一个文件,但可以保证如果进程异常终止,该文件将被删除,并且还可以防止其他进程意外踩踏该文件。例如,MySQL对其所有磁盘临时表执行此操作。恶意软件通常使用类似的策略来隐藏其文件。

在Linux下,您可以方便地访问这些已删除的文件/proc/<pid>/fd/<filenumber>


8

我不是系统管理员,但是从我在Unix.SE上收集到的信息来看,Linux系统在取消链接后实际上并不会删除文件(将空间标记为自由/可重用),直到指向该文件的所有文件描述符都被删除为止。已关闭。因此,要回答第一部分,该空间尚未释放,因为某个进程仍在读取它。要回答第二个问题,您可以使用来查看哪个进程正在使用该文件lsof


2

除了显而易见的硬链接/打开文件答案外,还有一个备选答案:该文件是一个(非常)稀疏文件,例如/var/log/lastlog在RHEL上,实际上并没有占用太多空间。删除它的影响很小,因此您需要查看下一个最大的文件。


1

如果写入文件的进程是root用户,它将写入超级用户保留的文件空间。文件系统具有此空间,可在用户任务填满磁盘时使系统保持运行状态。许多工具看不到此空间(默认为imho 5%)。

lsof可以告诉您,哪个进程已锁定文件,ergo正在写入该文件。


1
您也可以使用tune2fs调整此储备百分比。这是在释放磁盘空间时允许服务器继续运行的快速方法。
sjbotha 2012年

1

除了通过进程打开文件外,第二种情况是当您拥有支持快照btrfs或的文件系统时ZFS

例如,您使用存在的巨大日志文件拍摄快照。如果立即删除文件,则仅删除增量。并且仅当不使用文件时才删除增量。

也可以看看:

第三种情况是当您拥有一个支持块级重复数据删除的文件系统,并且大多数文件与另一个文件相同。我不希望日志发生这种情况,除非您有一个将日志发送到共享相同FS的syslog容器或VM的容器或VM,以便日志内容相同。

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.