请问在 Linux 下如何清空一个大文件的内容对磁盘 I/O 的冲击较小?

2020-11-22 16:26:54 +08:00
 zhoudaiyu

目前知道如下几种方式可以清空文件(假定文件名是 foo): 1 、echo>foo(>foo,:>foo) 2 、cp /dev/null(cat /dev/null)>foo 3 、dd if=/dev/null of=a 4 、truncate -s 0 a

请问哪种清理方式对磁盘的 I/O 冲击小一些?

5937 次点击
所在节点    Linux
42 条回复
perfectlife
2020-11-25 16:18:02 +08:00
cat /dev/null > /filename
yanqiyu
2020-11-26 00:49:31 +08:00
In reply to #1
还是假定你想要管理的是日志,其实可以考虑 split 工具,可以一开始就把输出到标准输出(管道)日志按照一定大小分割并且存档。
但是无论如何,剪裁一下文件都是元数据操作,应该不管怎么搞都不会带来冲击,都是暂时写进缓存等到下一波元数据更新的时候一起更新磁盘。
In reply to #4
@XiLingHost 这样不行,老的 fd 不会失效,空间不会被释放。
In reply to #39 #21
@no1xsyzy @vuuv 如果是日志文件的话打开的时候应该有 O_APPEND 属性,那样无论 file pointer 怎么样问题应该不大,不会产生稀疏文件,要是打开日志没用上述属性,建议跟开发者对线。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX