复制大文件时如何减少资源使用?

Jon*_*n M 8 linux filesystems rsync copy

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

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

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

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

不幸的是,复制命令“cp filename newfilename”占用了太多资源,导致服务器陷入停顿。

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

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

谁能建议一个更好的方法来做到这一点?我的磁盘空间很快就用完了,所以需要尽快修复和归档这个表。

zer*_*ime 10

除了 rsync 带宽限制之外还有两个选择:

  • 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 微秒,根据手册,这可能足以给磁盘空间呼吸。

双方ionicebuffer在现有Ubuntu构建可用。iotop如果您碰巧在内核中配置了 CONFIG_TASK_DELAY_ACCT,这很方便,但我的 Ubuntu 机器没有,这严重限制了命令的可用性。我已经知道哪个命令淹没了我的硬盘,我只想给它一些喘息的空间。

此外,在复制过程中,查看输出iostat -x 1(通常在 sysstat 包中)并查看复制期间设备的 %busy 字段为 90% 或更少。如果它处于 99-100%,那么您正在使其他进程无法进行 I/O。


sha*_*ndy 6

将 rsync 与 --bwlimit=KBPS 开关一起使用(限制 I/O 带宽;每秒千字节)。尝试使用较小的文件并尝试在传输速度和系统使用之间找到最佳组合。使用“vmstat 1”在第二个 shell 中监视


Jon*_*oss 5

您是否尝试过nice -n10以命令为前缀?

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

  • 我运行的最后一个命令是 `nice -n 20 ionice -c 3 cp /var/lib/mysql/{database}/{table}.MYI /home/{USER}/` 这确实增加了我服务器的负载,使其速度变慢一点点,但该网站在转移期间可用 (3认同)