我希望 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 的东西。