Bubu Blog: ~/article $ ls
把云服务器迁移到本地物理机

因为工作原因几乎所有工作安排都在微信上,这导致工作生活并没有分开,我并不想在公司的电脑上使用微信,于是想用远程的方式使用微信。在去年在腾讯云有促销活动的时候,买了一个 2C/4G/60G/4M 的 Windows 服务器,后面单独加购了一个 200G 的数据盘用来存放微信文件。

到现在服务器快到期了,我想把整个系统给拷下来,刚好家里有一台服务器没跑满,把这个系统转换为一个虚拟机。

不同于数据库、S3 这类业务软件,我需要备份的是整一个系统,如果是业务软件,像数据库都可以通过相应同步软件或者导出 SQL 解决,而系统包含的东西太多了,用户、文件、权限、注册表、驱动等等,目前看市面上没有发现能同步整个系统的软件。

像整个系统迁移的,一般分两种: P2V(物理到虚拟)、V2V(虚拟到虚拟)。我要做的就是腾讯云到家里的 PVE,腾讯云轻量云也是用 KVM 虚拟化,所以我的问题算是 V2V 迁移。无论是哪种迁移,对于 Windows 系统而言,大概步骤为:

  1. 打包硬盘;
  2. 导入到目标虚拟平台;
  3. 修修补补;
  4. 启动、使用;

然而,我是从云上迁移到本地,这就意味着我会被云上的条件限制住,比如 4M 宽带小水管

打包硬盘

首先就是看看能否在云服务商提供的功能上把整个系统盘拉下来,一般来说,云服务商提供的功能都是不限速的(跟你购买的服务器配置没有关系)。

在 V2ex 上看到有网友提到通过服务商提供的硬盘备份功能。步骤为:

  1. 备份系统盘;
  2. 把系统盘制作成镜像;
  3. 导出镜像到对象存储;
  4. 从对象存储下载镜像。

这种方法的好处就是通过对象存储下载一般是按量收费,且不限速,60G 的流量费用也是很便宜的。

腾讯云也是能够支持这种做法,但是会有相关限制

有版权限制的镜像不支持导出,包括 Windows Server 镜像、腾讯云授权的 Red Hat Enterprise Linux 镜像(自带授权支持导出)、基于云市场镜像制作的自定义镜像。

于是只能另寻其他方法了,在搜索的时候看到傲梅备份的P2V教程文章,其中提到了使用微软官方的 Disk2VHD 工具,该工具是把本地磁盘打包成 VHDX 虚拟硬盘格式。

那么就启动,把C盘转换成 VHDX 格式,保存在D盘上(确保D盘有足够的空间)。在转换前可以给系统瘦瘦身(删除文件、用 Dism++ 清理以下系统)。

下载镜像

打包出来的镜像有 48.5 GB。

如果使用 HTTP、SCP、FTP 这类协议直接下载,如果网络断开,加上没开断点续传功能,整个镜像想要一次性拉下来估计是挺玄乎的。且配置这类服务端软件也是挺繁琐的。

那么就搬出神器:Syncthing。它是一款 P2P 同步工具。同步的时候会把大文件分割成小文件传输,类似 Bittorrent,这样可以保证文件下载到本地,且校验能够一致。更多信息可以查看 FAQ

不仅是系统盘,数据盘的数据一样通过 Syncthing 的,两个盘共 170G 的数据,24小时同步,大概3天内全部下载到本地(轻量云的宽带并不是限制死的,可以有突发)。

修补镜像

我的目的是把服务器迁移的到本地的 PVE 上。

首先是新建虚拟机,为了方便,我选用同样的引导方式,在原主机上使用 msinfo32 可以查看引导方式,在我这台机器上使用的是 BIOS 引导。

把系统盘拉下来后,通过 qemu-img convert -O qcow2 xx.vhdx xx.qcow2 命令把 vhdx 镜像转换成 qcow2,接着通过 qm importdisk <vmid> xx.qcow2 local-lvm --format=qcow2 把 qcow2 镜像导入到相应的虚拟机。

在 PVE 的 WEBUI 上,在对应虚拟机的 Hardware 栏目上,双击新加入的未使用的磁盘。

解决引导错误

使用新导入的硬盘作为启动项,出现 A Disk Read Error Occurred 的错误,网上搜索了一下可能与引导有关。于是添加 Wepe 和 VirtIO 驱动的 ISO,使用 PE 启动(这里提到一点,如果你上面使用 VirtIO Block 驱动添加磁盘,在 Wepe 是无法找到的),使用 Dism++ 添加 VirtIO 的驱动,然后修复引导。

重启,这次没有卡在 BIOS 界面上了,可以进到系统启动菜单,但是会出现如下错误:

根据关键词(关键系统驱动程序丢失或包含错误WdFilter.sys最近更改了硬件和软件)进行了检索,找到一篇博文:蛋疼的Windows 10…… | Jungleford’s Home 总舵

按照博文里面的方法,把 WdFilter.sys 备份一份后删除,重启,成功进入系统。待系统重启后,就出现了“海记忆体知己” 经典配色。

启动的时候,提示出现磁盘修复,一开始我直接跳过了,后面进入到系统发现用户的桌面目录提示损坏,重启一下后,让磁盘检查修复,进入系统后恢复正常。

由于之前用 Dism++ 打过 VirtIO 驱动,进入系统后不需要再安装驱动了。

数据盘的数据可以通过新建一个虚拟磁盘,然后把文件拷贝过去就好了,可以使用 Syncthing 或者 Rsync 等软件。

其它

迁移之后,发现系统激活已经失效了。

写在后面

谈谈在 2C4G4M 的服务器上使用微信、QQ这种软件优缺点:

优点:

  1. 隐私有一点点保障,至少不是直接放在公司电脑上
  2. 对于微信接收的文件,可以很方便检索

缺点:

  1. 内存太小,体现在填在线表单时,打开浏览器会卡顿
  2. 由于没装 Office 套件,修改文档需要拉到本地修改,然后再拷贝上去
  3. 遇到大文件传输需要等待,比较浪费时间

目前系统、数据迁移到本地了,CPU/内存等可以不受云端限制,目前有以下计划:

  1. 运行索引文件的服务,快速查找微信的文件;
  2. 安装常用的 Office 等;
  3. 网络使用 Wireguard 中转或者 Tailscale 点对点,尽量优化网络,优化上面缺点中的第三点;

扩展阅读

  1. 不格式化的情况下如何复制迁移 Windows 系统? - V2EX
  2. 该说不说的,就外网同步数据回家里来说, resilio sync 比 syncthing 快多了。 - V2EX