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


13

我使用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。将尝试dd方法
mmalmeida

Answers:


10

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

该阈值的确切位置可能取决于您的RAM和硬链接的总数(可能还有许多其他事情),但是我发现尝试精确定义它没有任何意义。什么真正重要的是,该阈值是所有太容易在现实世界的情况下穿过,你不会知道你已经越过它,直到有一天,你尝试运行rsync -aH或者cp -a说斗争,并最终失败。

我的建议是:将高度链接的文件系统复制为一个单元,而不是文件。也就是说,将整个文件系统分区复制为一个大Blob。有许多工具可以做到这一点,但是最普遍的是dd

使用常规固件,您的QNAP NAS应该已经dd内置了fdisk。使用fdisk,在目标驱动器上创建一个至少与源分区一样大的分区。然后,用于dd在新创建的目标分区上创建源分区的精确副本。

在进行dd复制的过程中,必须确保源文件系统中没有任何变化,以免最终导致目标上的副本损坏。一种方法是umount在开始复制过程之前先处理源代码。另一种方法是将源挂载为只读模式。


假设我从未使用过rsnapshot backups目录之外的硬链接,那我还会遇到麻烦吗?我的硬盘空间确实不足,但想进行rsnapshot备份。目前,我的磁盘已满。
Sridhar Sarnobat

我想我遇到了你指出的情况。我有一个备份目录,其中包含许多用rsync创建的快照。它具有许多带有许多硬链接的文件。总磁盘使用量约为200G。我正在使用“ rsync -avH”将其复制到另一个分区。但是在4(或5?)个日夜之后,复制过程仍在运行。我想rsync被源目录中硬链接的总数完全弄糊涂了。
广良

在Ubuntu 18.04中,它是--hard-links(带有“ s”)。
nobar

1

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

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

另一个需要说明的注意事项:这是全部本机硬件还是您在VM上,通过网络安装?

编辑

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

进行一个测试,首先测试两个本地目录本地磁盘之间的rsync,然后再对远程磁盘进行测试,这将很有帮助。这个小测试显示了-H预期的选项wokrs。该-i选项用于ls显示的索引节点,从而显示该链接已经被保存下来,没有一点多余的副本。

$ 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对远程主机的后续测试仍然保留了硬链接


您完全正确,经过进一步研究,我发现rsnapshot不是使用符号链接而是使用硬链接。我相应地更新了我的问题。因此,解决方案应该使用-H并复制整个目录(如我所做的那样),以保留rsnapshot构建的硬链接结构,但仍然无法正常工作。当我开始每天复制所有内容时,将复制0,而不仅仅是已更改的文件。//是的,我正在使用Qnap TS-439和外部Lacie Drive进行此操作。
woerndl '02

您是否可以通过仅在源中包含两个文件的测试源目录和测试目标目录来进行硬链接,从而减少此问题?此外,您如何确定链接处理不正确,最后,为什么要使用硬链接,如果您阅读-H联机帮助页中的长文本,您会发现有一些警告,对我来说,请尝试远离硬链接...
nhed 2012年

我将设置一个测试用例,并及时通知您。到目前为止非常感谢您的想法。
woerndl '02

1

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

给定源文件夹中足够的硬链接和足够小的目标卷,使用rsync --hard-links复制可能会失败。Rsync通过耗尽目标<...>上的最大硬链接数而失败,真正的问题不是rsync,而是底层文件系统。


感谢您参与我的问题!看起来这与桑巴舞有关。我的驱动器直接连接到NAS。
woerndl '02

1
您好,没有这个问题与Samba不相关。这是rsync网站的所在地:rsync.samba.org
Motsel,2012年

0

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

我知道手册页中提到了它,-a但手册页并不总是100%准确。


感谢您的反馈意见。我不得不更新我的问题:Rsnapshot不是使用符号链接而是使用硬链接来构建其增量备份结构。所以-l无论如何都无济于事,但-H应该,但不幸的是,它也行不通。
woerndl '02
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.