logo NodeSeekbeta

懒人教程,通过dd迁移kvm服务器数据,不用重新安装软件

逛LES论坛看到了利用dd来迁移kvm的教程,感觉挺实用的,翻译并整理到这边(有修改)。

我想介绍一个超级简单的教程,利用一种几乎不费力的方法,将 KVM VPS 从一台主机迁移到另一台主机,并且不必担心因为迁移过程中数据的微小变化而导致失败的问题。

有时由于操作系统主要版本的生命周期结束或即将发生的硬件故障等原因,我们需要对主机进行迁移。如果迁移的主机中运行的程序安装较为繁琐或者数据依赖复杂,这将会是一个非常头疼的事情。

考虑到这些,我想本教程可能是最简单的服务器迁移方法之一。本方法适用于 KVM 到 KVM迁移,也适用于 Xen HVM 到 Xen HVM 或 KVM 到 Xen HVM 或 Xen HVM 到 KVM,最后 VMware 到 VMware 也应该可以正常工作。

我无法涵盖所有不同的主机商提供的控制面板,毕竟每一家服务商的控制面板可能都有其特点,但是只要您的主机商的控制面板提供 ISO 安装选项或救援模式,就可以使用本教程。

在此示例中,我在使用 SolusVM 的主机上使用了 KVM VPS,并将其迁移到使用 Virtualizor 的主机。

开始之前的要求和其他信息

  • 目标 VPS 应该具有相同或者更大的硬盘
  • 目标VPS与源VPS距离尽可能近,延迟是一个很重要的因素,毕竟将 50GB 的磁盘映像从印度移动到纽约并不好玩。
  • 需要注意一些细节,如果你弄乱了命令,可能会丢失你的数据。
  • 如果目标控制面板不提供“重新配置网络”按钮或串行控制台/VNC 选项,您可以使用自己重新配置网络,您可能需要考虑在关闭之前配置但不激活源上目标 VPS 的网络设置 ,但是,SolusVM 会为您执行此操作,并且在某些情况下,它也会执行此操作,具体取决于 Virtualizor 中的主机配置选项。

在本教程的案例中,源 VPS 位于 Inception Hosting - 伦敦,目标 VPS 位于 Nexus Bytes - 纽约

首先,我在基于 SolusVM 的主机上创建了一个快速 KVM VPS 作为源VPS,安装了 apache2 并稍微修改了测试页面,您可以看到在源 IP 上加载:
zniyu73dxmiz.png

然后我关闭源 VPS,并将源和目标 VPS 都置于救援模式。

对于 SolusVM(来源):
8croozaarz9i.png
对于 Virtualizor(目标):
xz54kkp15j1d.png
g9js7othui9n.png
注意:我注意到虚拟器倾向于锁定所有选项,即使是那些在您执行此操作时退出救援模式的选项,只需刷新页面即可解决,不用担心它不会重新提交操作

现在你应该在救援模式下同时拥有源和目标,你应该能够通过 ssh 登录到这两个:

SolusVM VPS(来源)
woe0o6h22h5n.png
对于 Virtualizor(目标)
wvotolqgra4z.png
接下来,您需要检查您的磁盘以确保您获得正确的磁盘,救援模式将创建一个虚拟磁盘,因此您的 VPS 运行时的 vda 或 sda 现在可能不是,这是您需要的部分 确定你是正确的,我在下面并排展示了使用 fdisk -l 来检查我想将哪个磁盘迁移到另一端的哪个磁盘。

iwojrxcezml7.png

从上图中我们可以看到 5GiB 磁盘(/dev/vda)是我想要的,因为我知道我的源磁盘是 5GiB 。而在目标端我可以看到它实际上是 10 GiB 磁盘的 /dev/vdb。

因为我们现在知道我想将源上的 vda 复制到目标上的 vdb,所以我们可以构造命令来执行此操作。

dd if=/dev/vda bs=32M status=progress | ssh [email protected] "dd of=/dev/vdb"

让我们分解一下,以便更好地理解:

  • dd - “data duplicator”的缩写,用于复制或复制数据的常用指令。
  • if=/dev/vda - 输入或我们正在读取的内容,在本例中为整个虚拟硬盘映像
  • bs=32M - BYTES,复制时每块读取的字节数,你可以自己设置,我发现32M是一个很好的平均值。
    status=progress - 显示进度,它有一个非常小的开销但是没有它你在进度指示器方面一无所获
  • | - 管道,用非常简单的术语来说,让您将一个命令或一组命令的结果传递给下一个
    ssh [email protected] - 因为这是在管道之后|它采用之前完成的操作,并以 root 身份通过 - ssh 会话将其发送到目标 IP 45.61.123.123
  • "dd of=/dev/vdb" - 最后是关于在另一端做什么的说明,即使用 dd "data duplicator" 将它通过 ssh 接收的块写入 /dev/vdb

发出该命令后,您将看到如下内容:
7n4y6jib6bcv.png

当它完成时你会看到:
s05ejnapmj0e.png

正如我们所看到的那样,这需要 634 秒或 10 多分钟才能完成,现在目标上的磁盘映像应该与源上的完全相同

下一步是通过控制面板取消目标上的救援模式,然后启动目标 VPS,一旦完成启动就转到新的 IP 地址表明它是成功的,因为同一页面在新 IP 上加载网页可以看到:
zniyu73dxmiz.png

注意,如果你的目标服务器不支持自动配置ip接口,你需要自己完成配置,有很多教程提供了实例配置,这里不再赘述。

另外,这个教程中传输数据竟然是直接传递完整镜像的,要知道原始的dd镜像里面有很多空白数据,通过压缩可以极大的加快传输进程,也就是在源VPS和目标VPS分别进行压缩和解压缩。看到评论里面也有人提到这点,并提供了一个可行的命令

dd if=/dev/vda bs=32M status=progress | gzip -1 - | ssh -C [email protected] "gzip -d | dd of=/dev/vdb"
  • 不错不错,学到了很多。才知道还可以这么玩

  • 感觉有两个问题

    1. 有可能驱动不兼容的问题
    2. 如过目标主机磁盘比较大,dd镜像之后如果要调整分区大小会比较麻烦
  • @Teslamodelx #2 对的,目标磁盘过大一般需要重新扩大分区,不难的。驱动不兼容基本上没有遇到过

  • 看起来不错..................

  • 🚫

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有14876位seeker

🎉欢迎新用户🎉