前言:现在能找到的Cadence Virtuoso学习版都是VMware上的虚拟机镜像 ,怎么就非要整一个在Hyper-V上的呢?这其中是我的个人原因——平时学习依赖Linux的内容使用的都是WSL,而众所周知WSL2是依靠Hyper-V技术的,使用WSL2其实就相当于使用了Hyper-V,所使用的主系统windows就已经运行在hypervisor 上了。虽然现在的硬件虚拟化技术已经非常成熟了,性能损失几乎感受不到(主要我也不玩3A大作,FPS也不追求帧率 ),再装个VMware也不是不可以,但是我还是想要Cadence学习版装在Hyper-V上,主要出于两点考虑:一方面我希望虚拟机的性能尽可能好,Hyper-V这种Type-1 Hypervisor显然更合适;另一方面,本来就有Hyper-V还装VMware,性能损失两层不说,是不是有点多此一举?简单搜索了一下发现镜像迁移似乎不难做所以就做了。
以下是折腾的笔记。
即使WSL2已经启用了Hyper-V,这个步骤还是得做一下,原因是我们需要Hyper-V管理器,没有开启功能是不会显示管理器的。
由于我的Windows是家庭版,启用Hyper-V就还要曲折一点。通常的做法就是使用一个批处理文件 ,手动安装Hyper-V相关的功能包。
具体来说就是新建一个文本文档,将下面这段批处理命令
粘贴进去,保存退出,改原后缀 .txt 为批处理文件后缀 .cmd ,然后双击运行批处理程序
。
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
耐心等待安装完成,会提示重启系统,重启完成后就成功安装Hyper-V啦。
想要验证的话到“启用与关闭Windows功能”菜单看一眼,右键“开始”——>“应用和功能”——>“程序和功能”——>“启用或关闭Windows功能”,确保勾选Hyper-V就没问题。
VMware的镜像格式是.vmdk ,要转换为Hyper-V使用的.vhdx 格式,微软
官方的转换器就可以解决这个问题,安装包和命令帮助文档链接如下[1]
MSI for 3.0 (mvmc_setup.msi; 25 MB):
https://web.archive.org/web/20200611215113if_/https://download.microsoft.com/download/9/1/E/91E9F42C...
MVMC_cmdlets.doc
(download; 426 KB):
https://web.archive.org/web/20200803210502if_/https://download.microsoft.com/download/9/1/E/91E9F42C...
(view as html):
https://web.archive.org/web/20200803210502/https://download.microsoft.com/download/9/1/E/91E9F42C-3F...
接着以下命令操作在powershell-ISE上进行
先加载转换模块,默认安装在C:\Program Files\Microsoft Virtual Machine Converter\ 自定义安装的话替换成对应路径。
Import-Module 'C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1'
然后执行转换
ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath 源文件绝对路径 -VhdType DynamicHardDisk -VhdFormat Vhdx -DestinationLiteralPath 输出文件夹的绝对路径
如果出现类似报错The entry X is not a supported disk database entry for the descriptor. 则需要我们做一些修改。[2]
对于twoGbMaxExtentSparse格式的vmdk文件
(即分卷的),我们只需要用记事本打开它(注意不是带标号的分卷文件
),然后注释掉toolsInstallType 那一行(前加"#")
如果是单个完整镜像文件,请使用dsfo工具进行部分读取和写入,同样也是注释掉那行。
之后重新执行转化命令即可,转化过程会有读条,结束后可以在输出文件夹看到转化后的.vhdx文件,就可以给Hyper-V使用了。
这部分就正常新建虚拟机,设置内存,选择镜像
其他选项默认就行,按需调整。
有的虚拟机会启动不了,提示为找不到root等盘的挂载,报错大概如下
这是因为VMware的硬盘是自动挂载在SCSI控制器上的,而Hyper-V是挂载在IDE控制器上的,为了应对这个问题,我们需要重建一下系统镜像的initramfs[3]。
具体方法就是下载个对应linux系统的光盘安装镜像(其他非光盘安装镜像,选择对应挂载方式就是了),挂载到虚拟机的DVD驱动器上,让系统从安装镜像启动,利用安装镜像引导菜单中的troubleshooting -> Rescue a Linux OS -> 1) Continue,进入恢复命令行。
切换到要修复的系统根路径:cd /mnt/sysimage然后chroot .
注意备份一下initramfs文件,我遇到的boot盘空间不足,所以我选择将原文件备份到外面去,文件具体名称与虚拟机使用的发行版本有关,自动补全或者ls看一下就好了,肯定不会找错的。
mkdir bak
mv /boot/initramfs-操作系统的发行编号.img /bak/initramfs-操作系统的发行编号.img
重建initramfs
dracut -v /boot/initramfs-操作系统的发行编号.img 操作系统的发行编号
完成之后退出bash
exit
关机
shutdown -h now
Hyper-V中取消虚拟机光盘安装镜像的挂载,再次启动就能用了。