黑群晖虚拟机从Hyper-V迁移到KVM

1个月前在把台式机的系统改成了WINDOWS SERVER 2016,还在HYPER-V上装了黑群晖。试用一个月之后,感觉WINDOWS SERVER还是有点占资源,开关机都挺慢,正常使用的时候偶尔也会卡顿(没有设置前台程序优先),尤其是关机,每次都要因为关闭HYPER-V虚拟机,等上好几分钟。

正好,一直想把装在2.5寸硬盘上的WINDOWS SERVER硬盘克隆到3.5寸的硬盘上的事情没有成功,于是直接在3.5的硬盘上直接装了UBUNTU,直接安上了KVM和VIRT-MANAGER。

格式上,KVM可以直接识别vhd格式的虚拟硬盘。所以只要把HYPER-V的虚拟盘复制过来就行。有一个要注意的点是如果用了HYPER-V的“检查点”功能,要把所有的检查点合并,以合并成一个vhd文件,方法是删除所有的检查点。黑群的引导盘也一起拿过来分配给KVM,引导盘用IDE,系统盘用SCSI,启动KVM虚拟机一次点亮。

然而迁移黑群晖还是遇到了一个坑。

HYPER-V是把存储盘脱机之后,整盘分配给黑群的。UBUNTU下看到的已经是分了区的sdb1、sdb2了:

$ sudo fdisk -l
Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00074b48

设备       启动   Start     末尾     扇区  Size Id 类型
/dev/sdb1          2048    4982527    4980480  2.4G fd Linux raid 自动检测
/dev/sdb2       4982528    9176831    4194304    2G fd Linux raid 自动检测
/dev/sdb3       9437184 3906824351 3897387168  1.8T fd Linux raid 自动检测

直接把/dev/sdb3分配给黑群,或者用mdadm处理之后尝试分配/dev/md2磁盘阵列给黑群,在黑群中打开,都是完全作为一个新的磁盘识别的,之前的数据都不认了,赶紧关掉,避免出现什么意外。

图片.png

在网上找相关的KVM硬盘直通的解决方案,大都是直通显卡的解决方案。不过尝试一下是可以找到SATA硬盘控制器的:

$ sudo lspci -nn | grep SATA
00:1f.2 SATA controller [0106]: Intel Corporation 7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] [8086:1e02] (rev 04)

不过这个看着好像只能把整个控制器直通给KVM,没办法只分配一个硬盘。最后又发现一篇文章,印证了刚刚的想法:

一般 SATA 或者 SAS 等类型的硬盘的控制器都是直接接入到 PCI 或者 PCI-E 总线的,所以也可以将硬盘作为普通的PCI设备直接分配个客户机。需要注意的是,当分配硬盘时,实际上将其控制器作为一个整体分配到客户机中,因此需要在硬件平台上至少有另两个或者多个SATA或者 SAS控制器。

《KVM 介绍(4):I/O 设备直接分配和 SR-IOV KVM PCI/PCIe Pass-Through SR-IOV》

没办法,KVM暂时走不通了,只好去试试VMWARE WORKSTATION。配置虚拟机时选择“添加硬盘”,直接找到了分配物理磁盘的输入框,直接选择,观察到路径是/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4Z8RYMJ,感觉发现了新世界!

VMWARE WORKSTATION可以直接添加物理磁盘
硬盘地址的线索
$ ls /dev/disk/by-id
ata-ST2000DM006-2DM164_Z4Z8RYMJ
ata-ST2000DM006-2DM164_Z4Z8RYMJ-part1
ata-ST2000DM006-2DM164_Z4Z8RYMJ-part2
ata-ST2000DM006-2DM164_Z4Z8RYMJ-part3
……

试了一下,KVM分配磁盘时直接填上/dev/disk/by-id/ata-ST2000DM006-2DM164_Z4Z8RYMJ,启动黑群,进入管理页面,成功识别数据,并且提示硬盘有些问题需要修复,完美!点修复之后立即就可以修复好,数据一切正常,nice!

KVM分配物理磁盘
完美迁移

接下来为了让KVM中的黑群晖可以被网络中的其他设备访问到,还需要配置桥接网卡。

# 先查看宿主机的网卡
$ ifconfig
……
enp3s0    Link encap:以太网  硬件地址 10:bf:48:b9:f0:8a  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:2239223 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:1281954 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:2866153516 (2.8 GB)  发送字节:211486261 (211.4 MB)
……

# 找到有线网卡的名字enp3s0,然后设置桥接虚拟网卡
$ sudo vim /etc/network/interfaces

# 增加以下内容 
auto br0
iface br0 inet dhcp
bridge_ports enp3s0
bridge_stp off
bridge_fd 0

# 重启网络服务
$ sudo /etc/init.d/networking restart

然后在KVM中把虚拟网卡br0分配给黑群,如果有必要可以一并修改MAC地址:


虚拟网卡br0分配给黑群

最后对比一下费用:

  • Windows Server 2016有180天的免费试用
  • VMWare Workstation 12有30天的免费试用
  • KVM开源免费

所以还是选KVM比较划算。

推荐阅读更多精彩内容