在备份过程中如何限制磁盘I / O?

我有一个基本上在晚上做一个简单的“tar zcf”的cron。

服务器有:

  • 8核 – 英特尔(R)至强(R)CPU E5606 @ 2.13GHz
  • 25GB RAM
  • Ubuntu 12.04.2 LTS
  • 硬件RAID 1(LSI Logic / Symbios Logic MegaRAID SAS SMC2108),带有两个2.728TB硬盘驱动器

正如你所看到的监控screenhost:

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

在几乎所有的焦油时间,光盘I / O都达到> 90%,并使所有其他应用程序(MySQL,Apache)减速很多。

2个问题:

  • 备份期间磁盘I / O太高是否正常?
  • 有没有办法限制光盘I / O,所以其他应用程序可以继续正常工作?

谢谢!

除了ionice一般方法之外,还有一个很好的设备映射器目标(ioband),它允许精确控制(DM)块设备的带宽。 不幸的是,它不是标准内核的一部分。

此外,你可以通过加速焦油

  1. 将文件名读入磁盘caching: find /source/path -printf ""
  2. 将inode读入磁盘caching: find /source/path -perm 777 -printf ""
  3. 通过例如使用具有mbuffer或缓冲区的pipe道(至less有100 MiB的RAM),让tar读取和写入更大的块到磁盘: tar ... | mbuffer -m 256M -P 100 -p 1 ... tar ... | mbuffer -m 256M -P 100 -p 1 ...

预计在备份期间会看到较高的I / O,因为它们通常是通过大型文件树进行的。 您可以使用ionice在Linux中使用类和级别优先处理I / O作业。 IIRC,第2级,第7级是最低的,非饥饿的水平,这将使其他I / O负载和用户几乎不可见。 有关使用方法和详情,请参阅man ionice

我会build议开沟焦油和rsync(由Dogsbody提到)。 我使用BackupPC备份我的Windows和Linux系统上的文件,它支持使用tar以及rsync,并自动照顾硬链接,以及提供一个不错的网页界面。

http://backuppc.sourceforge.net/

正如其他人回答,是的,这是正常的, ionice是一个很好的通用的方式,不要让它影响你的系统。

很多时候,我看到人们在不需要的时候就把事情搞砸了。 如果你正在复制的数据的任何百分比没有改变,那么我build议给rsync一个尝试。

这将通过仅复制自上次复制以来更改的文件来减lessIO。 您将无法将IO减less一半以上,因为仍然需要读取所有数据,但是您将显着减less写入的数据量(这取决于您的硬件也可能是较慢的操作)。

如果每次运行时都需要单独的副本/备份,那么最强大的选项是-link-dest,它允许您将未更改的文件硬链接到先前的备份。 这在备份服务器上节省了大量的空间。 例如,我备份一台机器(Fred),Fred有一个20GB的HD,并且备份/复制整个驱动器(不包括/ proc和/ dev)。 我现在在我的备份服务器上有一个20GB的目录。 第二天我再次备份Fred,并将其连接到昨天的备份。 Rsync将远程文件与本地副本进行比较,如果完全相同,则不会转移它们,但会将新文件硬链接到昨天的文件。 任何已经改变的文件都被复制下来(如果可能,则使用昨天的备份进行部分复制)。 如果从昨天起只有100MB的文件被更改了,我现在有两个目录都是20GB的文件,但是只占用备份服务器的20.1Gb的空间!

我希望这有助于你仍然回答你的问题。