我必须问类似的问题这。
tar
在使用和备份目录的情况下
新文件/目录正在添加
当前文件/目录正在已编辑和已删除
你能期待安全的结果吗?
经过安全结果我的意思是:
tar
不会搞砸源目录/子目录上的某些内容tar
将添加到存档中,因为它是在构建存档时找到的- 即使发生了所描述的更改,也会发出成功信号
答案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
将添加新文件。- 如果对文件进行去皮,则可以使用shell
tar --diff
和 的组合来同步 tar 文件和目录。tar --delete