如果我使用远程主机 (ssh://) 作为源/目标运行 rsync 或使用本地路径通过 sshfs 共享挂载目录,有什么区别吗?
在不使用任何开关的情况下,安全性或复制速度方面可能存在差异,只需使用 rsync 存档模式和远程主机路径 (ssh)。与 sshfs 挂载相同,仅包含源和目标(没有密码更改,只是默认)。
答案1
SSHFS 很方便,但它与 rsync 或更一般的同步工具不能很好地配合。
最大的问题是SSHFS很大程度上扼杀了rsync的性能优化。特别是,对于中型到大型文件,当 rsync 发现文件已被修改时,它会计算文件每一侧部分的校验和,以便仅传输已修改的部分。仅当网络带宽明显小于磁盘带宽(通常是这种情况)时,这才是一种优化。但对于 SSHFS,“磁盘”带宽实际上是网络带宽,因此 rsync 必须读取整个文件才能确定要复制的内容。事实上,对于本地副本(就 rsync 而言,即使其中一侧位于 SSHFS 上),rsync 只是复制整个文件。
如果存在许多小文件,SSHFS 也会损害性能。 Rsync 至少需要检查每个文件的元数据以确定它是否被修改。对于 SSHFS,这需要每个文件进行一次网络往返。通过rsync over SSH,两端可以并行工作并批量传输信息,速度要快很多。
在访问限制方面,SSHFS 需要 SFTP 访问,而 rsync 需要能够通过 shell 运行代码(具体来说,rsync 程序)。如果用户没有 shell 帐户,则可以提供具有特殊 shell 的帐户,该帐户仅允许运行包括sftp-server
和在内的少数程序rsync
。看SCP 需要外壳吗?
如果您只是复制新文件并且文件数量不是很多,则不会有任何有意义的性能差异。
SSHFS 在安装文件系统时建立 SSH 连接,并保留该连接直到卸载。 Rsync 每次运行时都会建立一个新连接,但您可以使用多路复用功能并搭载在单个主连接上以避免每次都进行身份验证。
SSHFS 是一个 FUSE 文件系统,因此仅支持传统的 Unix 元数据和 ACL。 rsync 可以传输扩展属性(需要使用rsync -aAX
,注意 plain-a
只保留传统的 Unix 元数据)。
答案2
回答你的主要问题:是的,存在差异。如果sshfs
存在允许通过安全通道访问远程文件的现有连接,并且通过 ssh 进行 rsync,则安全通道已设置完毕与远程 rsync 实例对话。
回答你的第二个问题:对于大多数实例(如果不是所有实例)来说,通过 ssh 进行的 rsync 会更快,因为远程系统上的 rsync 在查找不需要同步的文件方面提供了更多智能,但主要是因为它与您的文件并行运行。本地 rsync 来收集该信息。
假设 ssh 参数(密钥长度、算法)的配置相似,这两种方式的安全性都是相同的。源系统和目标系统的默认值取决于这些系统上的发行版组合。