如何在复制大文件时减less资源使用量?

我需要将一个大文件(损坏的MySQL表〜40GB)移动到一个单独的服务器上以修复它。 (当试图在我的生产服务器上修复时,它很快就杀死了服务器)。

为了做到这一点,我想将我的生产服务器中的.frm,.MYI和.MYD文件同步到云服务器。

我将/ var / lib / mysql / {database} /中的文件复制到/ home / {myuser},这样我就不需要为rsync命令启用root访问权限,并且100%确定数据库文件不是在使用(它不应该被写入或读取,但显然我不想closures我的生产数据库来确保)。

我试图复制的第一个文件大约是10GB。 我正在从我的生产服务器的一部分转移到另一部分,即到相同的磁盘arrays。

不幸的是,复制命令“cp filename newfilename”花费了太多的资源,导致服务器停滞不前。

如何将文件复制到不同的目录时使用更less的资源? (这需要多长时间并不重要)。

假设我设法做到这一点,那么在将文件rsyncing到云时,我可以期待什么样的资源使用情况?

任何人都可以build议一个更好的方式来做到这一点 我正在快速耗尽磁盘空间,因此需要尽快修复和归档此表。

你有没有尝试nice -n10前缀的命令?

10是默认值。 范围从-20 (最高优先级)到19 (最低)。

除rsync带宽限制外还有两个select:

  • ionice -c 3 cp foo bar
  • buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar

ionice将与I / O调度程序进行交互。 buffer是一个循环缓冲区,旨在帮助字符设备提高效率,但-u 150会在写入之间暂停150微秒,根据手册的说法,这可能足以使磁盘空间能够呼吸。

Ubuntu版本中都提供ionicebuffer 。 如果你碰巧在你的内核中configuration了CONFIG_TASK_DELAY_ACCT,那么iotop是非常方便的,但是我的Ubuntu盒却没有严格限制这个命令的可用性。 我已经知道哪个命令是淹没我的硬盘,我只是想给它一些喘息的空间。

此外,在复制过程中,查看iostat -x 1的输出(通常在sysstat包中),并查看复制过程中设备的%busy字段为90%或更less。 如果它在99-100%,那么你正在挨饿I / O的其他进程。

使用带有–bwlimit = KBPS开关的rsync(限制I / O带宽;千字节每秒)。 使用较小的文件,并尝试find传输速度和系统使用率之间的最佳组合。 使用“vmstat 1”监视第二个shell

一个替代scheme是:

 scp -l ${KBPS} ${src} ${dest} 

但我不认为这将工作,如果$ {src}是一个越来越大的文件…你能build议一种方法来复制和等待源被closures…