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

我希望跨2L的HP-UX服务器传输数据。 我有几个这样的转移,其中一些大部分是二进制(Oracle表空间…),另一些是更多的文本文件(日志…)。 使用的卷的数据大小介于100Gb和1Tb之间。 另外,我将在一些分区上将块大小从1K改为8K …

我在找的东西:

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

现在,我已经想到了ddcp和rsync,但是我不确定最好的使用方法和使用它们的最佳方式。

你不想用dd。 这是为了处理1个文件或stream,而不是整个文件系统。

rsync的devise是为了做你想做的事情,但是正如之前的海报所说的那样,正如我的testing所显示的那样,这不是最快的。 这是因为这样做是这样的:“好的,我正在看文件A.目标上是文件A吗?如果是这样,它是更新,更旧,相同吗? 等rsync有点复杂,因为它意味着不止一次运行…就像名称所说,它是为了同步两个位置。

为了做你想做的事情,我发现了一个快速,简单,可靠的tar拷贝。 焦油知道硬链接。 焦油知道设备。 Tar可以处理你在文件系统中遇到的几乎所有的情况(除了很长的path,如果你不使用Gnu tar,你可能需要小心,把/放在path名的开头)。

无论如何,过去20年来,我的成功率达到了99.98%

cd / my / source; tar cf – 子目录| (cd / destination / path; tar xf – )

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

如果你喜欢看你的进度,你可以在string的后半部分使用“xvf”而不是“xf”。

我的0.02%失败来自真正长的文件path… 🙁

焦油不会保证文件的完整性。 也就是说,只要你没有看到任何错误信息,我发现它是非常可靠的。 它将保持适当的权限和所有权。

看看这个post 。 一些答案build议使用tar 。 其他人build议使用rsync 。 他们正在考虑在两台机器之间复制数据。 你的问题是类似的,但你需要在本地复制文件,而不是通过networking。

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

rsync 可能不是最佳的唯一的一点是速度,尤其是与cp这样的轻量级select相比,但是我怀疑你会注意到很多不同,除非你的处理能力很低。

你基本上有三个select:

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

select三个选项中的一个取决于您必须备份的内容以及您想要的结果。 对于您的具体情况,我认为选项n.1(块设备副本)加上ddrescue是要走的路。 无论如何,让我们看看可用选项的集合。

情况1:分区复制
PRO:复制一个完整的块设备,你可以肯定的是注意到被遗忘了。
CON:打扰块设备比使用文件不方便,select错误的块设备或选项可能会破坏您的数据。
如果你想有一个整个块开发的二进制副本,你必须使用DD或类似的工具。 其他非常有用的工具是dcfldd (一个哈希就绪的dd叉)和ddrescue (一个更高级的dd-like工具)。

情况2:文件系统转储
PRO:复制整个文件系统,你确定里面的所有数据和元数据都被备份了。
CON:如果有多个文件系统要备份,则必须执行多个传递(一个用于文件系统)
处理文件系统的有用工具是FSArchive 。 而且,许多文件系统都集成了一些高效转储内容的工具(例如:XFS有xfsdump,Ext2 / 3/4使用了dumpe2fs等等)。

情况3:复制文件系统内的数据
PRO:从文件系统内复制数据,你可以非常明确地select要备份的内容。 这确保了快速的备份/恢复时间和小的备份映像。
CON:你必须完全知道要备份什么,以及如何备份。 应该对重要的元数据(例如:所有者,许可,ACL,EA等)
Rsync是你最好的朋友。 Rsnapshot和rdiff-backup是build立在rsync / librsync之上的奇妙工具。 Tar是任何Unix系统pipe理员的瑞士刀。