![通过 SSHFS 进行的 Rsync 挂起](https://linux22.com/image/572264/%E9%80%9A%E8%BF%87%20SSHFS%20%E8%BF%9B%E8%A1%8C%E7%9A%84%20Rsync%20%E6%8C%82%E8%B5%B7.png)
我已经sshfs
设置好连接到另一个系统(Rackspace Cloud Sites),但我无权ssh
访问(但出于某种原因,我可以使用 sshfs?想想看)。我正尝试将rsync
文件从sshfs
挂载点移到本地磁盘。有几千个小文件(1k-200k)。有时,rsync 会在非常小的文件上暂停并挂起一段时间。它会在一个 10k 文本文件上暂停大约 5 分钟,然后继续。
在我的机器上有什么地方可以查看以确定为什么 rsync 会这样挂起?或者这很可能只是另一端的问题,而我对此无能为力?
我的 rsync 选项很简单-avrP
。
答案1
好吧,我要尝试一下,因为我认为我的想法很有道理。
在这种情况下,您正在处理多个缓存,我认为这就是让您陷入困境的原因。
rsync 所做的第一件事是确定需要传输哪些文件。它通常通过在远程端生成 rsync 实例、读取源目录中每个文件的元数据,同时读取本地文件的元数据,然后比较这两个元数据集来实现此目的。任何较新的(或不同的,取决于 rsync 选项)都会被传输。
根据 rsync 的说法,您没有“远程端”。您正在“本地”工作,因此它将迭代两个目录,即源目录和目标目录。
这会占用大量磁盘空间,尤其是当有大量小文件时 - 文件越多,磁盘操作就越分散。这会导致大量磁盘抖动,而且这些文件的元数据会填满缓存。
请注意,这种情况会一直发生在整个堆栈中。您的本地计算机会缓存通过 ssh 安装的 FUSE 文件系统和本地目录中的元数据。远程计算机会缓存本地磁盘安装中的元数据。并且您的远程计算机所运行的 VM 主机几乎肯定会超额使用,并导致内存膨胀。
我怀疑当它冻结时你很可能正在跨越阈值,并且一切都必须赶上并进行解缓存或交换。
我很感兴趣看看当你在没有磁盘挂载的情况下通过 ssh 执行 rsync 时是否会发生这种情况。