![两个存储卷之间是否进行完全直接的双向数据交换?](https://linux22.com/image/583649/%E4%B8%A4%E4%B8%AA%E5%AD%98%E5%82%A8%E5%8D%B7%E4%B9%8B%E9%97%B4%E6%98%AF%E5%90%A6%E8%BF%9B%E8%A1%8C%E5%AE%8C%E5%85%A8%E7%9B%B4%E6%8E%A5%E7%9A%84%E5%8F%8C%E5%90%91%E6%95%B0%E6%8D%AE%E4%BA%A4%E6%8D%A2%EF%BC%9F.png)
我该如何在两个大小相同的存储设备之间进行 100% 的数据交换并保留两个数据分区而不使用第三个设备作为临时缓冲区?
换句话说,我有两个非常大的存储阵列,每个存储阵列都有两个大小相同的非常大的卷,如下所示:
驱动器 1:卷 A
驱动器 2:卷 B
我希望卷 a 中的数据移至卷 b,卷 b 中的数据移至卷 a。所有数据都必须保留。我没有办法获得第三个设备进行临时存储。
我认为理论上可以在位级别进行编程。只要两个卷上都有一些可用空间(确实有),这些可用空间就可以用作交换数据的临时存储。最坏的情况是,我可以通过批量复制目录来手动完成此操作。但是,肯定有软件可以在位级别执行此操作吧?
不幸的是,我搜索了整个网络,却一无所获。我看到的所有软件都可以将旧驱动器克隆到新驱动器,但不能直接进行双向卷数据交换。
有任何想法吗?
**更新**
需要说明的是 - 我意识到可以手动将数据移动到多个临时位置并使用备份/恢复过程。我试图避免这样做,因为从多个位置和通过多个过程恢复数据需要花费时间和精力。没有其他足够大的数组可以作为整个数据/文件集的临时位置。
**解决方案**
由于数据集是模块化的,我最终手动来回交换数据。Altap Salamander 文件管理器具有对文件传输进行排队的功能,因此我基本上创建了一个文件传输队列,其大小是根据复制一组文件后每个驱动器上可用的可用空间量计算的。效果很好,但与仅使用备用存储阵列临时存放整个副本相比,耗时太多。如果有软件可以自动执行此操作,那就太好了,但显然这是额外硬件胜过软件解决方案的问题之一。
答案1
唯一安全的解决方案是使用额外的硬件。请咨询您的存储供应商,了解如何雇用人员来帮助您完成工作。尝试以任何其他方式执行此操作都将导致灾难,您将再次回到这里询问如何恢复...
答案2
我只需编写一个程序以原始模式打开两个卷并在内存中分配两个大缓冲区。从卷 A 填充一个缓冲区,从卷 B 填充一个缓冲区。然后将从卷 A 读取的缓冲区写入卷 B,反之亦然。重复操作,直到完成交换。
请注意,如果您在此过程中的任何地方受到打断,情况都会变得很糟糕。
如果您提到您的平台,我可以为您提供更具体的建议。
答案3
将开发数据复制到生产硬件,然后从备份中将生产数据恢复到开发硬件。我遗漏了什么吗?
答案4
这确实需要硬件解决方案。我有一个设备,它使用一对 SATA 驱动器,只需按一下按钮即可将其中一个驱动器复制到另一个驱动器。无需计算机。
如果没有这样的硬件设备,就必须有某种形式的中间缓冲,因为执行复制的系统必须先从一个设备读取数据,然后再将其写入另一个设备。但是,这可以非常快地完成,因为瓶颈通常是 I/O 接口,而不是中间系统。