这是我的情况:
- 同一数据中心中的两个专用服务器之间具有千兆以太网。
- 这两个专用服务器都已启动到基于Debian Squeeze的救援环境中,并添加了额外的工具和实用程序。还有足够的tmp空间(两个盒子上都有32GB的RAM)用于下载软件,安装软件包和/或根据需要进行编译。
- 两台专用服务器都有大约 3TB的可用空间。
- “源”服务器在硬件RAID-10中具有4个1.5TB磁盘,带有Adaptec 4端口控制器。
- “目标”服务器在硬件RAID-1中具有2 x 3TB磁盘,带有Adaptec 2端口控制器-与另一代相同,但端口数量不同。
- 可用块的数量
/dev/sda
相差不到10 MB,但是由于某种原因,目标服务器的阵列要小几个兆。 - 两个RAID阵列均配置为使用所有组成磁盘的整个磁盘表面来创建一个单个RAID卷。
- 操作系统以MBR模式引导;不使用UEFI引导。
我想做的事:
- 在块层上,将整个OS映像(仅由GPT分区表,/ boot分区和/分区中的GRUB2引导程序组成)从“源”服务器复制到“目标”服务器。
- 如果可能的话,复制应“实时”进行:这意味着我没有足够的空间在目的地侧存储磁盘映像的适当文件,除非我将磁盘映像作为副本解压缩到硬盘上正在发生。服务器之间的千兆以太网连接足够可靠,我对此感到满意,并且我当然会
fsck
在两端(源和目标)上运行,以验证传输前后文件系统是否正常。 - 如果可能,请不要通过网络传输块,每个块中的组成文件系统都不会使用这些块(所有分区的格式都为ext4)。这是因为超过50%的“源”磁盘是
/
分区中的可用空间。 - 调整
/
分区的大小,以便在复制分区时将其大小调整为适合目标磁盘的大小。 - 复制成功后,安装每个卷并修复对静态IP的引用,以反映新服务器的IP。(无需任何其他帮助,就可以这样做)
我的问题:
- 我是否应该首先计算
/dev/sda
每个服务器上的大小之间的差异(以字节为单位),然后使用e2resize
非破坏性地减小源端上/
分区的大小,以使其适合目标端的空间? - 我应该
dd
在原始块设备上运行,/dev/sda
从源到目标(通过ssh
),还是应该在目标上创建等效的分区布局并dd
在每个分区上运行?请注意,一次处理一个分区给我留下了引导加载程序的问题,但是如果我一次不做一个分区,那么dd
一旦它写入了目标可以容纳的字节数,就需要知道停止传输数据(希望它将“封闭”/
最后一个块上分区的最末端,逻辑上在源分区布局中所有其他分区的“右边”)。
一些杂项。细节:
- 源代码框上的主机操作系统是运行多个OpenVZ来宾的Ubuntu Server 12.04
- 由于两个设备均已启动,因此可以直接进行磁盘访问,而不会期望运行的操作系统对基础数据进行任何更改。