在分区之间复制大量数据的最佳方法

在分区之间复制大量数据的最佳方法

我想在 HP-UX 服务器的 2 个 LV 之间传输数据。我有几个这样的传输要做,其中一些主要是二进制文件(Oracle 表空间...),另一些则是文本文件(日志...)。卷的使用数据大小在 100Gb 到 1Tb 之间。此外,我将在其中一些分区上将块大小从 1K 更改为 8K...

我正在寻找的东西:

  • 保证数据完整性
  • 最快的数据传输速度
  • 保留文件所有权和权限

现在,我已经考虑过 dd、cp 和 rsync,但我不确定哪一个最好用以及使用它们的最佳方式......

答案1

您不想使用 dd。这适用于处理 1 个文件或流,而不是整个文件系统。

rsync 旨在执行您想要的操作,但正如前一位发帖人所说,并且我的测试也表明,它并不是最快的。这是因为它用于执行这样的操作:“好的,我正在查看文件 A。文件 A 在目标上吗?如果是,它是较新、较旧还是相同?”等等。rsync 有点复杂,因为它需要运行多次……正如其名称所示,它用于同步两个位置。

对于您想要做的事情,我发现 tar 复制既快速又简单,而且可靠。Tar 了解硬链接。Tar 了解设备。Tar 可以处理您在文件系统中遇到的几乎所有情况(除了非常长的路径,如果您不使用 Gnu tar,您可能需要注意不要在路径名开头放置 /)。

不管怎样,过去 20 年来,我通过这样做取得了 99.98% 的成功率:

cd /my/source; tar cf - subdirectory | (cd /destination/path; tar xf -)

...您要复制的子目录将显示在 /destination/path 中。

如果您想观察自己的进度,您可以在该字符串的后半部分使用“xvf”代替“xf”。

...我的 0.02% 的失败来自于非常长的文件路径... :-(

Tar 无法保证文件的完整性。不过,只要您没有看到任何错误消息,我发现它非常可靠。它将正确保留权限和所有权。

但是!您的帖子特别提到了文件完整性,我很抱歉这么多年没有在我的回答中包含解决方案......

在 tar 之后,我只需这样做。假装我已经做了

cd /path/to/source/dir; tar cf - * | (cd /path/to/dest/dir; tar xf -)

现在,您的文件担保可以像这样完成:

find * -exec md5sum {} /path/to/dest/dir/{} \; > /path/to/dest/dir/md5-manifest.txt

完成后,您可以查看清单文件,也可以编写 awk 脚本(留给用户练习)来比较 find/md5sum 命令的两行输出。

答案2

看一下这个帖子。一些答案建议使用tar。其他答案建议使用rsync。他们正在讨论在两台机器之间复制数据。您的问题类似,但您需要在本地复制文件,而不是通过网络进行复制。

答案3

我建议使用rsync,因为它具有专门解决您大部分问题的功能。如果您使用适当的选项(例如 选项-a),则所有文件所有权、权限和时间都将保留。此外,rsync自动使用校验和来确保所有传输的文件完好无损地到达目的地,因此数据完整性得到保证(假设运行成功)。

唯一一点rsync 可能速度并不是最佳的,尤其是与更轻量级的替代方案相比时cp,但我怀疑你会注意到有什么区别,除非你的处理能力非常低。

答案4

你基本上有三个选择:

  1. 复制整个分区/块设备
  2. 转储整个文件系统
  3. 复制数据里面文件系统

根据您要备份的内容以及想要的结果,选择三个选项之一。对于您的具体情况,我认为选项 n.1(块设备复制)加上救援是可行的方法。无论如何,让我们看看可用的选项集合。

案例一:分区复制
优点:复制整个块设备,你肯定不会遗漏任何内容。
缺点:使用块设备不如使用文件方便,选择错误的块设备或选项可能会破坏数据。

如果您想要获得整个块设备的二进制副本,则必须使用 dd 或类似工具。其他非常有用的工具包括德克弗莱德(一个哈希就绪的 dd 分叉)和救援(更先进的类似 dd 的工具)。

案例 2:文件系统转储
优点:复制整个文件系统,您可以确保其中的所有数据和元数据都已备份。
缺点:如果有多个文件系统需要备份,则必须进行多次备份(一次备份一个文件系统)
处理文件系统的一个有用工具是FS档案。此外,许多文件系统都集成了实用程序,用于以有效的方式转储其内容(例如:XFS 有 xfsdump,Ext2/3/4 使用 dumpe2fs,等等)。

情况 3:复制文件系统内的数据
优点:从文件系统内部复制数据,您可以非常具体地选择要备份的内容。这可确保快速备份/恢复时间和较小的备份映像。
缺点:您必须完全知道要备份的内容以及如何备份。应特别注意重要的元数据(例如:所有者、权限、ACL、EA...)
Rsync是你在这里最好的朋友。快照rdiff-备份是基于 rsync/librsync 构建的出色工具。柏油是任何 Unix 系统管理员的瑞士军刀。

相关内容