备份期间如何限制光盘的I / O?


14

我有一个cron,基本上可以在夜间执行简单的“ tar zcf”操作。

服务器具有:

  • 8核-Intel(R)Xeon(R)CPU E5606 @ 2.13GHz
  • 25GB RAM
  • Ubuntu 12.04.2 LTS
  • 带有两个2.728TB硬盘驱动器的硬件RAID 1(LSI Logic / Symbios Logic MegaRAID SAS SMC2108)

如您在监视屏幕主机上看到的:

http://clip2net.com/s/57YRKP

在tar的几乎所有时间内,磁盘I / O都会超过90%,并使所有其他应用程序(mysql,apache)的运行速度大大降低。

2个问题:

  • 在备份期间拥有如此高的磁盘I / O是否正常?
  • 有没有一种方法可以限制光盘的I / O,以便其他应用程序可以继续正常工作?

谢谢!

Answers:


11

除了通用的方法外,ionice还有一个不错的设备映射器目标(ioband),它可以精确控制(DM)块设备的带宽。不幸的是,它不是标准内核的一部分。

此外,您可能可以加快tar的速度

  1. 将文件名读取到磁盘缓存中: find /source/path -printf ""
  2. 将索引节点读取到磁盘缓存中: find /source/path -perm 777 -printf ""
  3. 例如,使用带有mbuffer或buffer(至少100 MiB RAM)的管道,使tar在磁盘上读写更大的块: tar ... | mbuffer -m 256M -P 100 -p 1 ...

为什么在taring时将文件名/索引读取到缓存中会减少磁盘IO?我希望它会增加平均IO,同时仅稍微减少总时间。
scai

3
@scai这对SSD没有帮助;我的建议仅涉及旋转硬盘。那些阻碍性能的是头部运动。文件名存储在连续的块中,索引节点存储在连续的块中,文件内容存储在连续的块中。如果以tar的方式进行操作,则将读取一个目录的文件(和子目录)名称,访问一个文件的inode,然后访问文件本身,然后访问下一个文件的inode,然后访问下一个文件本身...引起的头部移动比相互读取所有名称和索引节点更多。
Hauke Laging,

@scai对性能的影响取决于您的工作。对于完全备份来说,它很小(可能取决于文件大小),但是我注意到差异备份有很大的区别(不过,对于tar而言,不是,因为我不使用它,但这应该是一般效果)。
Hauke Laging,

只是为了确保我理解正确。对于1.和2.,我们只需要调用find命令,Linux会自动缓存它?
acemtp

@acemtp是正确的。find不带(例如)-perm将不会访问文件索引节点。但这允许优化使用两个find调用。如果您find两次拨打相同的电话(两次通话之间没有时间),则第二次通话通常会在几秒钟(或更少)内完成。根据可用内存量和在特定点缓存的数据量,数据会从缓存中抛出。读取过多可能会减慢操作速度。如果可以通过stdin为备份程序提供文件名,则可以通过读取100个文件的块来防止这种情况。
Hauke Laging

13

由于备份通常是在具有大文件的大文件树上进行的,因此在备份期间可能会看到较高的I / O。您可以使用ioniceLinux中具有类和级别的I / O作业优先级。IIRC,第2级,级别7是最低的,没有饥饿的级别,这将使其实际上对其他I / O负载和用户不可见。有关man ionice用法和详细信息,请参见。


1

我建议抛弃tar,并使用rsync(如Dogsbody所述)。我使用BackupPC在Windows和Linux系统上备份文件,它支持使用tar和rsync,并自动为您处理硬链接并提供一个不错的Web界面。

http://backuppc.sourceforge.net/


0

正如其他人回答的那样,是的,这是正常现象,ionice是不让其影响系统的一种很好的通用方法。

很多时候我见过人们tar不需要的东西。如果自上次复制以来您要复制的数据百分比没有变化,那么建议您rsync尝试一下。

通过仅复制自上次复制以来已更改的文件,将减少IO。您将无法将IO减少一半以上,因为仍然需要读取所有数据,但是您将大大减少写入的数据量(根据硬件的不同,操作速度可能也会变慢)。

如果每次运行都需要单独的副本/备份,则最强大的选项是–link-dest,它使您可以将未更改的文件硬链接到先前的备份。这样可以节省备份服务器上的大量空间。例如,我备份了一台计算机(Fred),Fred有20GB的HD,我备份/复制了整个驱动器(不包括/ proc和/ dev)。现在,我的备份服务器上有一个20GB的目录。第二天,我再次备份了Fred,并–link-dest备份到了昨天的备份。Rsync将远程文件与本地副本进行比较,如果完全相同,则不会麻烦传输它们,但会将新文件硬链接到昨天的文件。所有更改过的文件都将重新复制下来(或尽可能使用昨天的备份进行部分复制)。如果从昨天开始仅更改了100MB的文件,我现在有两个目录都包含20GB的文件,但仅占用20个。

希望对您有所帮助,并且仍然可以回答您的问题。

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.