更新源目录时使用 tar 安全吗?

更新源目录时使用 tar 安全吗?

我必须问类似的问题

tar在使用和备份目录的情况下

  1. 新文件/目录正在添加

  2. 当前文件/目录正在已编辑已删除

你能期待安全的结果吗?

经过安全结果我的意思是:

  1. tar不会搞砸源目录/子目录上的某些内容
  2. tar将添加到存档中,因为它是在构建存档时找到的
  3. 即使发生了所描述的更改,也会发出成功信号

答案1

1. tar 不会搞砸源目录/子目录上的某些内容

确实如此,除非你把更新访问时间算作搞砸了。除此之外,tar 不会更改源代码树中的任何内容。

2. tar 将添加到存档中,因为它是在构建存档时找到的

确实,对于“当下”的某些价值而言。如果在 tar 读取源代码树时发生更改,则归档中包含的内容在某种程度上是不可预测的。特别是,如果在 tar 读取文件时文件发生更改,则不能保证 tar 会像在某个时刻那样写入该文件的副本。例如,可以有:

  • tar 读取foo.的字节 0–4095
  • 某些程序写入foo,在单个写入操作中更改字节 4095–4096。
  • tar 读取foo.tar文件的字节 4096–8191

foo那么存档中的内容既不是旧内容也不是新内容,而是两者的混合。另一个例子是,如果在 tar 读取源树时重命名文件,tar 可能会完全跳过它。

3.即使发生了所描述的更改,也会发出成功信号

不,不一定。如果 tar 在读取源时检测到源已更改,它可能会抱怨并返回失败状态。特别是,tar 在写入内容之前需要将文件的大小写入存档,因此它首先读取每个源文件的大小。如果它在达到记录大小之前到达文件末尾,则没有明显的方法可以恢复,因此任何 tar 实现至少在这种情况下都会抱怨。

为了安全地进行备份,请使用文件系统或卷级别的工具来制作快照并备份快照。

答案2

不。

  • 如果在 tar 扫描目录后添加文件,则不会添加该文件。
  • 如果文件已添加到存档中,但您在磁盘上将其删除,则该文件不会从存档中删除。
  • 如果您更改内容,这也适用。

Unix(不是 tar)会做一件事:

  • 如果在 tar 收集文件时打开(进行编辑)文件,您将不知道 tar 将使用哪个版本的文件(内存中的版本、磁盘上的版本或两者的混合版本)。

请记住,您可以使用 tar 来读取或写入管道(实际上t意思是tar磁带,当世界还年轻的时候),所以 tar

  • 将一次性写入
  • 不会倒带输出

以上对于基本的tar -c.

  • tar -u将添加新文件。
  • 如果对文件进行去皮,则可以使用shelltar --diff和 的组合来同步 tar 文件和目录。tar --delete

相关内容