我将如何在两个相同大小的存储设备之间进行 100% 的数据交换,并在不使用第三个设备作为临时缓冲区的情况下保留两个数据分区?
换句话说,我有两个非常大的存储阵列,每个存储阵列都有两个相同大小的非常大的卷:
驱动器 1:音量 A
驱动器 2:B 卷
我希望卷 a 中的数据转到卷 b,卷 b 中的数据转到卷 a。必须保留所有数据。我无法获得用于临时存储的第三个设备。
我认为理论上可以在位级别进行编程。只要两个卷上都有一些可用空间(确实存在),该可用空间就可以用作交换数据的临时存储。最坏的情况是,我可以通过批量复制目录来手动执行此操作。但是,肯定有软件可以在位级别执行此操作吗?
不幸的是,我已经搜遍了网,却一无所获。我看到的所有软件都将旧驱动器克隆到新驱动器,但没有直接的双向卷数据交换。
有任何想法吗?
**更新**
明确一点-我意识到可以手动将数据移动到多个临时位置并使用备份/恢复过程。这就是我试图避免的事情,因为从多个位置和通过多个进程恢复数据需要花费时间和精力。只是没有任何其他数组大到足以作为整个数据/文件集的临时位置。
**解决方案**
由于数据集是模块化的,我最终手动来回交换数据。Altap Salamander 文件管理器能够对文件传输进行排队,因此我基本上创建了一个来回传输文件的队列,其大小根据复制一组文件后每个驱动器上可用的可用空间量计算得出。工作起来很有魅力,但与仅使用备用存储阵列临时存放整个副本相比,太耗时了。如果有自动执行此操作的软件会很酷,但显然这是额外硬件胜过软件解决方案的问题之一。
我只想编写一个程序以原始模式打开两个卷并在内存中分配两个大缓冲区。从卷 A 填充一个缓冲区,从卷 B 填充一个缓冲区。然后将您从卷 A 读取的缓冲区写入卷 B,反之亦然。重复直到你完成交换。
请注意,如果您在此过程中的任何地方被打断,那将是非常难看的。
如果你提到你的平台,我可以给你更具体的建议。
唯一安全的解决方案是使用额外的硬件。与您的存储供应商谈谈雇用一些东西来帮助您完成工作。尝试以任何其他方式进行操作将以灾难告终,您将回到这里询问如何恢复...
将开发数据复制到生产硬件,然后从备份中将生产数据恢复到开发硬件。我错过了什么吗?
有很多方法可以做到这一点,但是您需要根据安全性确定优先级。如果您丢失了生产数据,我想您会被洗劫一空,所以让我们关注一种方法来保护它并减少它无法用于生产的时间。
第一步:备份您的开发环境并将其关闭。
第二步:从您的开发环境中取消分配磁盘
第三步:将这些磁盘分配给 prod 环境(这样 prod 环境就不会尝试使用旧的文件系统)
第四步:将您的产品迁移到新磁盘。您可以使用操作系统在两个卷之间镜像数据并在新硬件上重新启动服务。
第五步:从生产服务器上取消分配旧的生产磁盘,并将它们分配给开发服务器
第六步:将您的开发数据恢复到提供给开发服务器的磁盘上。
编辑:恢复或使用暂存空间是您唯一的选择,如果没有以可以恢复的方式备份,我质疑您将其定义为“产品服务器”。
这确实需要硬件解决方案。我有一个设备,它采用一对 SATA 驱动器,只需按一下按钮即可将一个驱动器复制到另一个驱动器。无需电脑。
如果没有这样的硬件设备,则必须有某种形式的中间缓冲,因为执行复制的系统必须先从一个设备读取,然后再将其写入另一个设备。然而,这可以非常快地完成,因为瓶颈通常是 I/O 接口,而不是中间系统。
你确定你没有临时存储?- 我确定您有系统备份。那里有足够的临时存储空间。
为什么不使用这些备份来完成此操作?将两个最新的备份恢复到所需的存储阵列上,您就完成了。
如果您不能执行 Oskar 建议的从备份方法复制+恢复(如果您没有备份,真丢人),那么开发系统的性质使这变得非常简单和直接。只需将您的开发工作进行到将其发布到生产服务器的地步,当开发不再与生产有任何差异时,交换他们的角色,然后在另一台服务器上恢复开发。