简介:迁移virtualbox虚拟机核心工作就是虚拟盘格式迁移到hyper-v支持的格式上,本身操作比较简单,但是如果遇到boot方式不对应则需要手动修正,否则无法正常启动。

迁移流程:

*virtualbox 下把虚拟机处于关闭状态(非停止),在命令行下运行下面命令:

VBoxManage.exe clonehd --format vhd "C:\temp\VM\src-disk.vmdk" "C:\temp\VM\target-disk.vhd"

其中src-disk.vmdk为virtualbox 创建好的虚拟盘,而目标文件target-disk.vhd是hyper-v支持的格式

*启动hyper-v新建一个虚拟机,在进入连接虚拟硬盘环节选择你刚转换的虚拟硬盘:

*顺利的话即可启动新虚拟机。

无法启动故障分析:

现象:屏幕只是一个光标闪烁,连ubuntu的grub菜单都不出现,则可能是hyper-v和虚拟盘配置的启动方式不对造成。

解决方法:

检查当下hyper-v方式方法:

关闭系统

 重新连接:

 点击媒体->DVD驱动器->插入磁盘 来挂接ubuntu 的iso文件,如果已经挂接可以忽略这步

点击启动,hyper-v从ubuntu iso 启动并进入ubuntu光盘演示模式。

在演示模式命令行下面输入

sudo efibootmgr -v

如果出现 "EFI variables are not supported on this system"意味着hype-v当前是处于早期的bios mbr启动模式,否则就是UEFI引导模式。

我的hyper-v是mbr引导模式。

提示,创建hyper-v时候选择代数就是影响启动模式(虽然我的虚拟机是uefi模式,但是创建磁盘时候hyper-v 禁止我选择该模式):

输入fdisk -l检查当前系统的boot模式。对我的虚拟机,虚拟盘是两个分区,其中一个分区属于uefi,另外一个是主系统区域,即在virtualbox里面安装的系统是uefi引导而hyper-v是采用bios mbr引导,两者不一致导致系统无法加载

由于hyper-v并不支持修改引导模式,故需要把ubuntu系统切到老的bios引导模式。

方法如下(继续在光盘演示模式下):
运行GParted 删除uefi分区,并创建一个标识为bios_grub的未格式化分区,也可以用fdisk 修改该分区类型为4 (bios boot类型),分区不要少于1M(注意不是修改你系统分区,系统分区一般是ext4类型)

然后依次运行下面命令(其中sda2要依据fdisk输出来调整):

mount /dev/sda2 /mnt/

mount -t proc none /mnt/proc

mount -o bind /dev /mnt/dev

mount -t sysfs sys /mnt/sys

chroot /mnt/ /bin/bash

update-grub 

 /usr/sbin/grub-install --recheck --no-floppy /dev/sda

重新启动,正常情况下grub会出现,启动过程中会进入紧急修复模式,这是因为删除uefi分区导致,可以用vi编辑器注释掉/etc/fstab里面对应分区的挂接,对我的系统是一个id 为747f-1e42的分区。

重启后即可正常进入系统,不要忘记卸载掉virtualbox的无用的插件:
sudo vbox-uninstall-guest-additions

如果你还希望调整hyper-v 虚拟窗口的尺寸,可以按照下面方式进行:

1  进入ubuntu系统,编辑grub

Sudo vim /etc/default/grub

修改 其中GRUB_CMDLINE_LINUX_DEFAULT内容如下:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1920x1080"

其中1920x1080就是希望的分辨率

2 运行sudo update-grub

3 安装额外的驱动:sudo apt install linux-image-extra-virtual

4 重启系统

这时候hyper-v的显示尺寸已经变大了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐