Rsync -avzHP 遵循硬链接,而不是将其复制为硬链接

Rsync -avzHP 遵循硬链接,而不是将其复制为硬链接

我使用 rsnapshot 创建我的“工作”共享的每小时/每日/每周/每月备份。现在我尝试使用 rsync 将整个备份目录复制到外部驱动器上。

我在屏幕会话中使用了这个命令/参数(是的,rsync-exclude.txt 位于我运行命令的目录中)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

整个系统在 QNAP TS-439 上运行,内部驱动器是单个磁盘(无 RAID),格式为 EXT4,外部驱动器格式为 EXT3。

实际情况是:Rsync 跟踪每个硬链接,复制实际文件,而不是重新创建更新的硬链接在外部驱动器上。我没有立即意识到这一点,因此外部驱动器最终被相同文件的 xxx 份副本破坏。

我想要实现的是:将 rsnapshot 生成的整个文件结构复制到外部驱动器,保留硬链接以节省空间。注意:这不一定非要使用 rsync 来完成。

感谢您的想法和时间。我非常感谢您的帮助。

更新:我了解到,rsnapshot 没有使用符号链接,而是使用硬链接,所以我现在使用 -H 选项,它应该根据保留硬链接结构Rsnapshot 到多个目的地(或维护硬链接结构)但它仍然不起作用...我在这里遗漏了什么?

更新 2:我在这里发现了关于这个话题的另一种观点/说法:rsync 与 --hard-links 选项一起冻结Steven Monday 建议不要尝试 rsync 包含硬链接的大型文件结构,因为它会占用大量内存,而且对于 rsync 来说是一项艰巨的任务。因此,更好的解决方案可能是制作我尝试备份的数据结构的 .img。你怎么认为?

答案1

rsync命令的-H(或--hard-links)选项理论上会完成您想要完成的任务,简而言之:创建文件系统的副本,并保留原始文件系统的硬链接结构。正如我在我对另一个类似问题的回答,一旦源文件系统的硬链接复杂性超出某个阈值,此选项注定会失败。

该阈值的精确位置可能取决于您的 RAM 和硬链接总数(可能还有其他一些因素),但我发现尝试精确定义它是没有意义的。真的问题是,在现实生活中,这个门槛太容易跨过了,而你却不知道跨越它,直到有一天你试图跑一场rsync -aH或一场cp -a挣扎并最终失败。

我的建议是:将大量硬链接的文件系统作为一个单元进行复制,而不是作为文件进行复制。也就是说,将整个文件系统分区作为一个大块进行复制。有许多工具可以做到这一点,但最常见的是dd

使用原厂固件,您的 QNAP NAS 应该dd内置有 以及fdisk。使用fdisk,在目标驱动器上创建一个至少与源分区一样大的分区。然后,使用dd在新创建的目标分区上创建源分区的精确副本。

dd复制过程中,您必须确保源文件系统中没有任何变化,否则最终会导致目标上的副本损坏。一种方法是umount在开始复制过程之前访问源;另一种方法是将源挂载为只读模式。

答案2

-l用于符号链接,为什么它会对硬链接做任何事情?

(抱歉,这是一个答案,而不是评论,我还没有评论权,而且这个答案需要回复)

另一个需要注意的是:这都是本机硬件吗,还是您在虚拟机、网络安装上?

编辑

忽略我之前关于你为什么使用硬链接的评论,我错过了该rsnapshot评论。

进行一个测试会很有帮助,首先测试两个本地目录(本地磁盘)之间的 rsync,然后测试远程磁盘。这个小测试显示选项-H按预期工作。-i选项ls显示 inode,从而显示链接已保留,没有额外的副本。

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

rsync -avzHP src/ host:/tmp对远程主机的后续测试仍然保持硬链接

答案3

这是一个不太可能的尝试,但如果你找不到其他解决方案,我建议尝试将 USB 驱动器格式化为 EXT4。也许这可能是问题所在:https://bugzilla.samba.org/show_bug.cgi?id=7670

如果源文件夹中有足够多的硬链接,而目标卷又足够小,则使用 rsync --hard-links 进行复制可能会失败。Rsync 会因耗尽目标上的最大硬链接数量而失败 <...> 真正的问题不是 rsync,而是底层文件系统。

答案4

您是否尝试过添加该-l选项?

我知道手册页它包含在内,-a但手册页并不总是 100% 准确。

相关内容