在 AWS linux 的两个卷之间复制文件 (db) 的最快方法是什么?

What is the fastest way to copy files(db) between two volumes in linux in AWS?

我在 4TB 卷中有 2.5TB 数据需要复制到 3TB 卷。由于它们的大小,这两个卷的 IOPS 都很高。所以从技术上讲,传输速度应该更快。 但由于这些是数据库文件,我们需要维护文件完整性、权限、时间戳和所有内容。

大家都推荐rsync,但也提到它很慢。在检查数据完整性的同时,还有其他更快的复制方法吗?

还有什么方法可以创建此卷的内部映像,例如 .img/iso 等并将其上传到 s3/google 驱动器并下载到另一个卷中 -- 考虑所有可能性更快地完成这项工作。

更新:在此处添加更多信息 - 卷连接到同一台机器 - 4TB 是包含数据的卷。 3 TB 是新的空卷。这本质上是卷大小调整的一部分 activity.

如果磁盘的 "exact" 副本可以接受,那么您可以:

  • 创建 Amazon EBS 卷快照
  • 从快照
  • 创建新的 Amazon EBS 卷
  • 完成!

在内部,新卷 "points to" 快照,因此您不必等待数据复制完成。第一次访问磁盘块时,该块将从快照复制到磁盘卷。这发生在幕后,所以你甚至不会注意到它。这意味着新卷很快可用。

但是,请注意新卷至少需要与源卷一样大。

为了测试复制速度,我做了以下操作:

  • 启动了 t2.large Amazon EC2 实例:
    • 4TB 卷
    • 一个 3TB 的卷

  • 在 4TB 卷上:生成 2.6TB 文件,共 439 个文件:
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  416K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.3G  6.8G  16% /
/dev/xvdb       3.9T  2.6T  1.2T  69% /v4t     <--- Generated files here
/dev/xvdc       2.9T   89M  2.8T   1% /v3t     <--- Target drive
tmpfs           798M     0  798M   0% /run/user/1000

然后我连夜复制了数据,导致:

/dev/xvdc       2.9T  2.6T  231G  92% /v3t

报告的复制速度为:

sent 2,762,338,236,045 bytes  received 8,408 bytes  121,836,508.74 bytes/sec
total size is 2,761,663,971,512  speedup is 1.00

不幸的是,我的计时器因断线而失败,但它似乎在 8 小时内以大约 1TB 的速度复制了。因此,您似乎可以在一夜之间复制您的 2.5 TB,而不是需要 5 天。

添加到 John 的回答中,我们使用了 msrsync https://github.com/jbd/msrsync 可以 运行 最多并行 16 个 rsync 线程。因为这是数据库,所以我们拥有的文件数量很大(无论大小)。复制 2.5TB 数据用了大约 2 天。

我们的数据库表很好,复制工作正常,但我们仍然可以看到卷中数据大小的差异。较新的卷在 2.5TB 中丢失了 160GB。这可能是由于块在不同卷中的处理方式所致,但到目前为止我们还没有发现任何问题。