rsnapshot:初始备份会永远保留吗?

rsnapshot:初始备份会永远保留吗?

使用 rsnapshot 进行备份时,“[...] 我们首先将之前的备份复制到一个并行的目录结构中,创建所有目录并建立到所有文件的硬链接。”.这一切都很好。

我认为这意味着初始备份将永远保留?“较新”的备份将仅指向(通过硬链接)较旧的备份,因此我假设任何给定硬链接指向的实际文件需要永远保留,以免造成破坏?

这个假设正确吗?

答案1

不,这是不正确的。如果你有多个指向某个文件的硬链接,那么无论哪个文件最初创建了该文件,只有删除指向该文件的最后一个链接,该文件才会被删除(请参阅硬链接就像 rsnapshot 和符号链接) 对于 rsnapshot 来说,这意味着每个备份目录都是独立的,您可以删除所有其他备份目录(包括初始目录)并且仍然拥有完整的数据。

根据您配置 rsnapshot 的方式,它最终将删除原始备份集。

答案2

TL;DR:没有。

这取决于您对“初始备份”的定义。

首先创建一个备份 ( hourly.0),其中包含今天的所有文件。

在下一次迭代中,它会“复制”文件(cp -L仅复制数据的链接)到hourly.1文件夹。

如果所有文件都与之前相同,则 rsync 将不会写入任何内容,因此您将拥有一个文件的一个数据块(让我们使用),以及指向驱动器上同一个文件的myfile.jpg两个链接(hourly.0/myfile.jpg和)。hourly.1/myfile.jpg

在下一次迭代中,没有任何变化,您仍然拥有相同的数据,只是hourly.2/myfile.jpg指向该数据的另一个指针()。如果您已将其设置为保留 3 个备份,它将删除hourly.2,移动hourly.1hourly.2,移动hourly.0hourly.1,从 复制(创建硬链接)到hourly.1创建hourly.0,然后再次运行 rsync。

如果文件发生变化,rsync 将“删除”该文件(实际上只是链接)hourly.0/myfile.jpg(数据仍保留在驱动器上,因为仍有两个链接指向它)。然后,Rsync 将使用新的 创建一个新文件(链接+数据)myfile.jpg

因此,现在您有一个带有一个链接的数据块(用于新文件),一个带有两个链接的数据块(用于旧版本文件)。

在下一次迭代中,它会删除hourly.2(旧文件的数据少一个链接),“复制”(硬链接)新文件(新文件的新链接)。有两个指针指向新文件数据,一个指针指向旧版本数据。

在下一次迭代中,它会删除旧版本的最后一个链接(没有指向它的链接的数据,被文件系统视为空闲,并且在需要时会被覆盖),以及指向新文件数据的三个链接。

如果有指向数据的链接(无论来自哪个目录),该数据将保留在驱动器上。只有删除所有链接后,数据才会被覆盖。

相关内容