【问题标题】:Safely tar compress a file while it is updating在更新文件时安全地 tar 压缩文件
【发布时间】:2020-04-07 11:24:53
【问题描述】:

我需要在 Linux 上使用进程中的线程中的tar 压缩文件。该文件每秒更新一次。

我正在运行以下命令从单独的进程中执行此操作。

tar -cvzf /destination/compressed_files.tar.gz /directory/to/archive

效果很好。未发现任何问题。但是,我有以下问题。

主要问题:
我试图让我的代码更安全、更可靠。 “从 tar 命令的角度来看”,上述方式是否安全。 tar 是否隐含地处理文件正在更新并压缩任何可能的事实? tar 会在内部复制内容吗?

次要问题:
我发现以下也是一种 tar 方法

    tar -cvzf /destination/compressed_files.tar.gz -C /destination /directory/to/archive

看起来-C 选项更改了目录?在这里使用-C 更安全吗?

【问题讨论】:

  • 当你说源文件被“更新”时,你的意思是它正在被追加,还是它的预先存在的内容被修改?
  • 源内容仅附加了一些行。现有内容未修改。经过一些严格的测试,我现在看到 tar 给出了一条附加消息,指出“文件在我们阅读时已更改”。但这似乎只是一个警告,看起来tar 得到了它能够抓住的东西。我对 tar 工作原理的理解是否正确?

标签: linux tar gunzip


【解决方案1】:

您将获得的行为取决于一系列因素,包括文件系统的类型(例如 NFS 与本地磁盘)、文件的写入方式以及每次附加的数据量。

在最好的情况下,写入器有一个以附加模式打开的本地文件,并且写入的文本行不超过某个内部缓冲区大小。在这种情况下,您可能不会看到任何问题。如果线条很长,您可能会看到部分线条。如果文件模式不是追加,或者文件系统是 NFS 或其他异常,您可能会在文件末尾看到零或垃圾值(因为文件长度在内容之前已更改)。

一般来说,最好不要依赖这个。一种典型的方法是每隔一段时间“滚动”文件,关闭旧文件并开始编写新文件。然后,您可以仅归档作者已关闭的“完整”文件(可能重命名以表明它们已完成)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2015-09-22
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多