使用 rsnapshot 进行备份时,“[...] 我们首先将之前的备份复制到一个并行的目录结构中,创建所有目录并建立到所有文件的硬链接。”.这一切都很好。
我认为这意味着初始备份将永远保留?“较新”的备份将仅指向(通过硬链接)较旧的备份,因此我假设任何给定硬链接指向的实际文件需要永远保留,以免造成破坏?
这个假设正确吗?
答案1
答案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.1
到hourly.2
,移动hourly.0
到hourly.1
,从 复制(创建硬链接)到hourly.1
创建hourly.0
,然后再次运行 rsync。
如果文件发生变化,rsync 将“删除”该文件(实际上只是链接)hourly.0/myfile.jpg
(数据仍保留在驱动器上,因为仍有两个链接指向它)。然后,Rsync 将使用新的 创建一个新文件(链接+数据)myfile.jpg
。
因此,现在您有一个带有一个链接的数据块(用于新文件),一个带有两个链接的数据块(用于旧版本文件)。
在下一次迭代中,它会删除hourly.2
(旧文件的数据少一个链接),“复制”(硬链接)新文件(新文件的新链接)。有两个指针指向新文件数据,一个指针指向旧版本数据。
在下一次迭代中,它会删除旧版本的最后一个链接(没有指向它的链接的数据,被文件系统视为空闲,并且在需要时会被覆盖),以及指向新文件数据的三个链接。
如果有指向数据的链接(无论来自哪个目录),该数据将保留在驱动器上。只有删除所有链接后,数据才会被覆盖。