最喜欢的rsync提示和技巧


57

我使用rsync的越多,我就越意识到这是瑞士军刀进行文件传输。有很多选择。我最近发现,可以--remove-source-files复制文件,它会从源文件中删除文件,这使它更具移动性,而不是复制程序。:)

您最喜欢rsync的小技巧和窍门是什么?

Answers:


19

如果必须同步许多文件,请尝试使用rsync版本3!与版本2相比,V3以增量方式构建其文件列表,并且速度更快且使用的内存更少。

根据您的平台,这可能会有所不同。在OSX版本2.6.3上,尝试建立500万个文件的索引将花费一个多小时或崩溃,而我编译的版本3.0.2立即开始复制。


需要注意的一件事是,如果您使用某些选项(例如--delete-before,例如),则会使用旧的“构建列表优先”行为,因为这些选项才能正常工作-因此,如果您没有看到此行为,请检查是否已知您正在使用的其他选项将使其停止。如果您在一棵大树上交互式地使用rsync并想强制进行初始扫描,以便输出--progress准确,则此功能将非常有用(即“要比较的对象”的数量将永远不会增加,因为在初始扫描之后将找不到新的对象) )。
David Spillett

18

使用--link-dest创建基于节省空间的快照备份,因此你似乎有backedup数据(每个备份运行),但文件不运行之间改变的多个完整拷贝硬链接,而不是创建节省空间新副本。

(实际上,我仍然使用rysnc-followed-by-cp -al方法来实现相同的目的,请参见http://www.mikerubel.org/computers/rsync_snapshots/了解这两种技术的古老但仍然非常好的用法及相关问题)

这种技术的一个主要缺点是,如果文件由于磁盘错误而损坏,则在链接到该文件的所有快照中也是如此,但是我也具有脱机备份,可以在一定程度上防止这种情况的发生。需要注意的另一件事是您的文件系统具有足够的inode,否则您将在实际用尽磁盘空间之前将它们用完(尽管ext2 / 3默认值从来没有问题)。

另外,永远不要忘记--dry-run对于一些健康的偏执狂非常有用,尤其是在使用--delete*选项时。


6
+1 --dry-run
David Z

1
请注意,-n是--dry-run
ctennis

3
我更喜欢使用长名称,尤其是在其他人最终可能会维护的脚本中。无需参考文档即可更清楚地确定目标。
David Spillett

+1我使用--link-dest方法为多台计算机实施了一个多TB的备份解决方案,如上所述,该方法可用于硬链接快照-它工作得很好。
matja 2010年

如果您喜欢--link-dest备份,请查看Dirvish,它在后台使用rsync
hfs

14

如果您需要通过慢速链接更新包含一些大文件的网站,则可以通过以下方式传输小文件:

rsync -a --max-size = 100K / var / www /那里:/ var / www /

然后对大文件执行此操作:

rsync -a --min-size = 100K --bwlimit = 100 / var / www /那里:/ var / www /

rsync有很多方便网站使用的选项。不幸的是,它没有检测同步更新的内置方法,因此您必须向cron脚本中添加逻辑,以避免重叠写入大文件。


10

尝试将一目录中的一小部分文件同步到另一位置时,我使用--existing选项。


谢谢!这只是使我免于编写一些讨厌的过滤器规则。
benzado 2010年

8

--rsh 是我的。

我使用它将ssh上的密码更改为更快的(--rsh="ssh -c arcfour"),还建立了sshs 链(建议将其与一起使用ssh-agent)以在无法直接通话的主机之间同步文件。(rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/)。


7
--time-limit

使用此选项时,rsync将在T分钟后停止并退出。我认为该选项在夜间(非繁忙时间)异步同步大量数据,然后在白天(繁忙时间)使人们开始使用网络时停止同步时非常有用。

--stop-at=y-m-dTh:m

此选项使您可以指定何时停止rsync。

Batch Mode

批处理模式可用于将同一组更新应用于许多相同的系统。


有用!我之前使用过“ at”命令来终止进程
Lionel

源补丁:rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz;Win32二进制文件及其修补程序包括:itefix.no/i2/cwrsync
jftuga 2013年

2
不幸的是,这些选项在Redhat / Centos或Ubuntu发行版的rsync中不可用。
IanB

@Lionel:您如何用来终止at进程?
IMTheNachoMan

6

如果您想了解运行缓慢的rsync的进展情况,并且在传输文件时未使用-v列出文件,则可以找出打开了哪些文件:

 ls -l /proc/$(pidof rsync)/fd/*

在具有/ proc的系统上

例如,即使远程系统似乎还剩下一堆空间,rsync还是刚刚挂在我身上。这个技巧帮助我找到了一个我不记得的,意想不到的巨大文件,该文件在另一端不适合。

它还告诉我更多有趣的信息-另一端显然已放弃,因为套接字链接也断开了:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'

5

--archive 是类似备份的作业的标准选择(尽管不是默认选择),以确保复制源文件中的大多数元数据(权限,所有权等)。

但是,如果您不想使用它,通常您仍然需要包含--times,它将在文件的修改时间之间进行复制。这使下一次运行的rsync(假设您反复执行)速度更快,因为rsync比较修改时间,如果文件未更改,则跳过该文件。令人惊讶的(至少对我而言)不是默认选项。


4

我最常使用的那个绝对--exclude-from是可以让您指定一个包含要排除的内容的文件。

我还发现--chmod它非常有用,因为它可以确保即使源被弄乱了,权限也能以理想的状态结束。


4

--backup-dir = date +%Y.%m.%d--delete我们正在删除但正在复制...以防万一



3

当然,也--delete可以从目标中删除源中找不到的内容。




1

如果在服务器上将rsync设置为守护程序,则可以像浏览其他目录一样浏览共享模块。然后,您可以查看哪些路径可用,哪些不可用。


1

当我使用GlusterFs时,我们会遇到T文件大小为零的瓶颈,对于崩溃的砖块或副本之间的同步,我们必须使用--min-size=1不同步崩溃的服务器中的空文件的方法

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.