如何让 rsnapshot 链接到原始文件?

如何让 rsnapshot 链接到原始文件?

我希望 rsnapshot 不创建我的所有文件的第二个副本,而是只保留原始文件的硬链接并仅保存更改的副本。

我有一台 Windows 和 Linux 服务器。我想将 Linux 系统的备份存储到 Windows 系统上。但是,我还想为用户提供快照。

我在 Linux 上运行 rsnapshot 以便获得快照。我无法将快照根目录放在 Windows 上,因为我无法保留不同文件系统上的文件属性,因此快照驻留在 Linux 上。这意味着现在我的文件使用的空间是原来的两倍(原始文件和快照)

由于快照不是备份,我通过压缩文件并将 zip 文件发送到 Windows 来创建备份。

问题是,由于我正在创建单独的备份,因此我不需要保留同一文件在 Linux 上的两个副本。因此,我希望 rsnapshot 不创建所有文件的第二个副本,而是只保留指向原始文件的硬链接。

我可以简单地手动创建包含所有硬链接的第一个保留/间隔文件夹吗?(cp -al)

答案1

rsnapshot 的工作方式是,在第一次运行时,它会创建一个完整的副本。

接下来,它只存储已更改的文件。如果文件未更改,它会为其创建硬链接。

这意味着现在我的文件使用了双倍的空间(原始文件和快照)

是的。您有工作文件和快照。

问题是,由于我正在创建单独的备份,因此我不需要保留同一文件在 Linux 上的两个副本。因此,我希望 rsnapshot 不创建所有文件的第二个副本,而是只保留指向原始文件的硬链接。

如果您希望 rsnapshot 在第一次运行时不要复制整个树,那么问题是由于它是同一个文件,它无法检测到更改。

FILE_A   -> DATA1
RFILE_A1 -> DATA2

IF FILE_A == RFILE_A1:
  HARDLINK RFILE_A1 RFILE_A2
ElSE
  COPY FILE_A RFILE_A2

这是基本的逻辑。

如果 RFILE_A1 是 FILE_A 的硬链接,则问题是由于底层数据相同,因此无法检测到 FILE_A 上的任何更改。

简单的解释是,硬链接是一个名称。它指向磁盘上的数据。因此,当您创建额外的硬链接时,您正在重复使用磁盘数据。因此无法检测到更改。

 

简短回答(TL;DR),你不能。你需要第一份完整的副本。

另一个选择可能是使用类似 Git 的东西。

相关内容