在源目录更新时使用 tar 是否安全?

Mil*_*vić 4 tar backup concurrency

我要问类似的问题

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

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

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

你能期待安全的结果吗?

通过安全结果,我的意思是:

  1. tar 不会在源目录/子目录上搞砸
  2. tar 将添加到档案中,因为它在构建档案的那一刻发现
  3. 即使发生了描述的更改,也会发出成功信号

Arc*_*mar 5

不。

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

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

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

记住,你可以(其实用tar来读取或写入到一个管道牛逼tar手段磁带,当世界年轻时即是),所以焦油

  • 一口气写完
  • 不会倒带输出

以上对于基本的tar -c.

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


Gil*_*il' 5

\n

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

\n
\n\n

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

\n\n
\n

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

\n
\n\n

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

\n\n
    \n
  • tar 读取 . 的字节 0\xe2\x80\ foox934095
  • \n
  • 某些程序写入foo,在单个写入操作中更改字节 4095\xe2\x80\x934096。
  • \n
  • tar 读取 . 的字节 4096\xe2\x80\ foox938191
  • \n
\n\n

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

\n\n
\n

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

\n
\n\n

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

\n\n

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

\n