CnOps 社区
首页开源项目实践文章视频课程常见问答开发者工具
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具

CnOps 社区

愿景

CnOps 社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页问答为什么不能用 echo 空字符串覆盖日志文件来清理磁盘空间?

为什么不能用 echo 空字符串覆盖日志文件来清理磁盘空间?

#日志轮转#软删除#稀疏文件#运维#磁盘清理

可观测中文社区 | 2025-03-18

使用 echo 空字符串覆盖日志文件来清理磁盘空间是一种危险的"软删除"方式,会导致稀疏文件问题。原因如下:

  1. 业务应用持有日志文件的文件描述符(fd),echo 覆盖后应用并不知道文件已被清空
  2. 应用继续使用之前的写入偏移量(例如已经写到第 100MB 位置),在旧位置继续写入
  3. 文件开头到旧偏移位置之间的区域变成 hole,被文件系统填充为 \0
  4. 文件逻辑大小不断累积增长,且每次清空都会叠加

正确的做法是在业务侧实现日志轮转机制,使用 rename 或 copytruncate 方式。rename 方式将当前文件重命名后让应用创建新文件;copytruncate 方式先复制内容再截断原文件。这两种方式都能安全地管理日志文件大小而不产生稀疏文件。