2011-02-23 30 views
1

假设我们有一个自定义备份服务,它遵循rsync approach suggested by Mike Rubel。为了使备份轮换,这cp命令必须使用:cp命令中的标志开销

cp -al source target 

到这一点,我试图转动里面有很多小文件(〜5KB-200KB),一个35GB的目录,即非常大树目录。问题是它至少持续五个小时。这对我来说似乎很重要,特别是通过使用-l选项。

用SATA磁盘行为正常吗?可能-al组合标志在cp命令中引起额外开销,导致延迟?

谢谢!

回答

1

如果这些文件大小都在2GB左右,我会认为这是非常慢的。如果文件大小都在200字节左右,我会认为这很快。那么,在我认为这个速度很快之前,我实际上并不知道这些文件有多小,但是如果它们都很小,那么你的驱动器将花费大部分时间来搜索,读取元数据,编写元数据,犯下期刊,等等。

但这听起来令人沮丧,无论哪种方式。

一些想法瞬间映入脑海:

  • 你可以关闭a_time的运行时间有问题的具体文件系统,如果你没有任何东西使用a_time。 (将noatimemount(8)选项添加到您的fstab(5)文件中。)这样可以防止在复制操作的“读取”一侧出现大量非常小的分散写入。这可能会让一小部分时间消失。 5%? 10%?也许更多?好的一面是需要几秒钟才能使用mount(8)-oremount,noatime然后找出答案。 :)

  • 您可以使用硬链接代替副本 。 (cp(1)提到一个-l命令行选项使用链接 - 我必须怯懦地承认我从来没有尝试过,我一直与ln(1)建立链接,但是对于数十万个文件这样做听起来并不理想,所以请尝试-lcp(1)并返回报告:)使用硬链接的好处是(a)节省的磁盘空间(b)节省的磁盘带宽 - 只读取/写入元数据,速度可能快数千倍。它可能不是你想要的工具,但这取决于应用程序在备份操作运行时如何修改数据。

  • 你可以想象一些更聪明的替代整个事情。 rsync是一个很好的工具,但不是非凡的辉煌。 git(1)可能是您的任务更聪明的工具。如果不先制作副本,这可能会快得多。

  • 您可以使用一些巧妙的块设备技巧:例如,LVM快照,允许备份操作与使用并行进行,并在备份完成后删除快照。如果您的数据没有太多流失,这应该会更快。如果有很多流失,它可能只会稍微好一点。但它会让你的rsync立即开始,而不是在五小时窗口的另一边。

+0

我忘了包括它。我实际上也使用'-l'选项。这就是为什么这种行为让我感到惊讶。我正在编辑这个问题来改进它 – elitalon 2011-02-23 08:52:01