连续两次面试中都向我提出了这个问题,但是在进行了一些研究并与各种系统管理员进行了核对之后,我并没有收到很好的答案。我想知道是否有人可以在这里帮助我。
服务器的磁盘空间不足。您会注意到一个非常大的日志文件,并确定可以安全删除它。您删除该文件,但磁盘仍然显示它已满。是什么原因造成的,您将如何补救?以及您如何查找哪个进程正在写入此巨大的日志文件?
连续两次面试中都向我提出了这个问题,但是在进行了一些研究并与各种系统管理员进行了核对之后,我并没有收到很好的答案。我想知道是否有人可以在这里帮助我。
服务器的磁盘空间不足。您会注意到一个非常大的日志文件,并确定可以安全删除它。您删除该文件,但磁盘仍然显示它已满。是什么原因造成的,您将如何补救?以及您如何查找哪个进程正在写入此巨大的日志文件?
Answers:
这是一个常见的面试问题,并且在各种生产环境中都会出现这种情况。
该文件的目录条目已删除,但日志记录过程仍在运行。直到所有文件句柄都已关闭(例如,该进程已被杀死)并且所有目录条目都被删除,操作系统才会回收该空间。要查找写入文件的过程,您需要使用lsof
命令。
问题的另一部分有时是“如何在不终止进程的情况下清除正在写入的文件?” 理想情况下,您可以使用类似的方法将日志文件“零”或“截断”,: > /var/log/logfile
而不是删除文件。
fuser
。
no-clobber
设置,请尝试:>| /var/log/logfile
df
说您的空间不足,du
说您几乎没有使用任何消息。是什么原因造成的,为什么这两个工具不同意?”
> /var/log/file
磁盘上的空间仍然为100%,该怎么办?日志文件似乎为空...但是只有在重新启动在该日志文件上写入的程序之后,空间才会恢复。有没有一种方法可以在不重新启动程序的情况下恢复磁盘空间?
如果写入文件的进程是root用户,它将写入超级用户保留的文件空间。文件系统具有此空间,可在用户任务填满磁盘时使系统保持运行状态。许多工具看不到此空间(默认为imho 5%)。
lsof可以告诉您,哪个进程已锁定文件,ergo正在写入该文件。
除了通过进程打开文件外,第二种情况是当您拥有支持快照btrfs
或的文件系统时ZFS
。
例如,您使用存在的巨大日志文件拍摄快照。如果立即删除文件,则仅删除增量。并且仅当不使用文件时才删除增量。
也可以看看:
第三种情况是当您拥有一个支持块级重复数据删除的文件系统,并且大多数文件与另一个文件相同。我不希望日志发生这种情况,除非您有一个将日志发送到共享相同FS的syslog容器或VM的容器或VM,以便日志内容相同。