是否有一些程序可以通过 ssh 复制稀疏文件(/var/log/lastlog),速度与 cp (在本地电脑上)一样快?

是否有一些程序可以通过 ssh 复制稀疏文件(/var/log/lastlog),速度与 cp (在本地电脑上)一样快?

rsync我通过over支持 ip 我的服务器,ssh/var/log/lastlog文件是 1.2G(硬盘上只需要 24K)。在本地计算机上cp可以立即复制它(几毫秒),但rsync需要读取整个文件,这需要几个小时。我还尝试将服务器安装/var/logsshfs我的本地电脑,但我的本地电脑检测到该文件为 1.2T(因此sshfs似乎没有检测到稀疏文件)。是否有一些程序可以通过 ssh 检测稀疏文件,并可以以相同的方式复制它们cp(无需从文件中读取空块)?

编辑:rsync-S/--sparse选项仍然想要读取整个源文件(包含所有空字节),这对于 1.2T 文件来说需要几个小时。读取整个文件后,rsync它会创建小目标文件(适当的稀疏文件),但问题是它读取包含所有空字节的源文件(而不跳过它们)。cp复制文件只需几毫秒,而rsync需要几个小时。您可以尝试(在 Linux 上)通过创建 20G 稀疏文件truncate -s 20G sparse_file1并复制它rsync -S sparse_file1 sparse_file2(需要很长时间),然后尝试复制它cp sparse_file1 sparse_file3(需要几毫秒)。

答案1

别担心,你已经做得很好了rsync -S

原因cp是速度快得多,因为它并没有真正复制它。这可能有很多原因,我能想到的前两个是:

  • 系统决定文件系统不需要立即同步,复制将在稍后在后台进行(或在您运行时立即进行sync)。请参阅man sync获取更多信息。

  • 您有一个具有类似牛/重复数据删除功能的文件系统。其效果将是cp创建我所说的“伪装的硬链接”。在这种情况下,永远不会物理地进行副本,文件中的数据只是获得一个额外的名称(就像真正的硬链接)。但是(与真正的硬链接相反)当源文件和目标文件将来收到不同的更改时,这些更改将物理保存在不同的位置,并且文件系统会将更改绑定到正确的文件。查看有关写时复制和重复数据删除的任何文档(例如维基百科页面)以获取更多信息。

相关内容