虚拟硬盘VHD或VHDX的应用

2024-03-09 12:59
文章标签 应用 虚拟 硬盘 vhdx vhd

本文主要是介绍虚拟硬盘VHD或VHDX的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、操作系统限制

Windows7不能使用VHDX的虚拟磁盘格式,只能使用VHD格式的虚拟磁盘。适用于 Windows 10 或更高版本的本机启动要求使用vhdx 格式,而不是vhd 格式。

二、VHD(X)的创建

(一)windows的磁盘管理器可以创建VHD(X)的虚拟磁盘,挂载、分离。

(二)bootICE、WinntSetup、Diskgenius(仅vhd)等软件工具也可用来创建VHD(X)格式的虚拟磁盘。

三、VHD(X)的应用
(一)物理磁盘或分区转换为VHD(X)格式的虚拟磁盘,用于系统引导。
1.Disk2vhd

若要使用 Disk2vhd 生成的 VHD,请创建具有所需特征的 VM,并将 VHD 作为 IDE 磁盘添加到 VM 的配置中。如果计划从它们启动,请不要附加到创建它们的同一系统上的 VHD。 如果这样做,Windows将为 VHD 分配一个新磁盘签名,以避免与 VHD 源磁盘的签名冲突。 Windows通过磁盘签名引用启动配置数据库中 (BCD) 的磁盘,因此启动Windows时将无法找到启动磁盘。

计算机A转换后的虚拟磁盘可以挂载在计算机B上,通过修改BCD引导项,可以将计算机A的软件系统迁移到计算机B上。

修改VHD磁盘上windows系统的注册表2种方法

(1)使用VHD启动到系统后, 打开”运行”, 输入”regedit”(不包括双引号)命令打开注册表, 定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\FsDepends\Parameters 项, 修改 VirtualDiskExpandOnMount 的16进制数值为4, 重启电脑后生效。

(2)使用PE或其他windows系统启动后,挂载虚拟磁盘到盘符(如M:)打开regedit,选中hkey_local_machine,文件-加载配置单元,选择M:\Windows\System32\config下的system文件,输入项名称(如win10vhd),hkey_local_machine下增加一个名称为win10vhd项,CurrentControlSet(n)\services\FsDepends\Parameters,修改 VirtualDiskExpandOnMount 的16进制数值为4。

2StarWind

使用此工具可以实现P2V、V2V的迁移,也可以用来创建VHD(X)格式的虚拟磁盘。

3Bootice1.3.4添加VHD引导项

打开Bootice,BCD编辑-当前系统的BCD-智能编辑模式,点击“添加”选择“新建VHD启动项”,在“启动磁盘”选择VHD文件所在的磁盘,“启动分区”选择VHD文件所在的分区,“设备文件”,格式“\xxx.vhd(x)”,修改“菜单标题”,点击“保存当前系统设置”、“保存全局设置”。

注意:“检测硬件抽象层”不要选中

(二)将本机物理磁盘上windows转为VHDX的虚拟磁盘并挂在本机上启动。
1使用dism++

使用此软件将windows“系统备份”为wim文件,新建一个VHDx的磁盘挂载后将wim文件通过“系统还原”到vhdx的磁盘上,再用bootice修改启动项,可以实现在本机上启动。

2. 使用diskgenius

新建一个VHDx的磁盘并挂载后,使用diskgenius磁盘管理软件“clone partition”功能将本机物理磁盘分区windows克隆到vhdx虚拟磁盘上,再修改vhdx虚拟磁盘上windows系统的注册表,通过在regedit中加载配置单元后,删除添加项名称下的mounteddevice下的全部键值。然后通过BOOTice修改启动项,实现vhdx虚拟磁盘的引导。

3.使用disk2vhd及diskgenius

使用disk2vhd将将本机物理磁盘分区windows系统转换为vhdx虚拟磁盘,使用diskgenius磁盘管理软件的菜单disk中的“modify MBR signature ”修改磁盘标签,generate GUID。通过在regedit中加载配置单元后,修改VirtualDiskExpandOnMount值为4,删除添加项名称下的mounteddevice下的全部键值。然后通过BOOTice修改启动项,实现vhdx虚拟磁盘的引导(HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices)。

注意将当前的windows10系统使用disk2vhd转换为vhd格式后,直接挂载会导致当前系统崩溃,鼠标停止,蓝屏

四、使用vmware workstation的虚拟机引导vhd
(一)vhd(x)直接挂载VM

根据VHD文件的分区,建立虚拟机时选择bios或uefi.vmware workstation的虚拟机可以直接通过添加现有虚拟磁盘的方法,使用vhd格式的虚拟磁盘,不支持vhdx,但可以使用starwind将vhdx转换为vhd再进行挂载。

通过disk2vhd工具转换的VHD虚拟磁盘,首先可以使用pe系统中diskgenius修改磁盘签名(disk mbr signaure),重新generate GUID避免磁盘签名产生的引导问题。新创建一个VHD文件(同时产生新的磁盘签名),通过分区或磁盘克隆,实现系统迁移。

1.vm使用uefi

Vhd虚拟磁盘挂载vm后,出现引导问题,可使bootice工具挂载vhd中的esp分区,使用BCD编辑中选择“其他BCD文件”来检查引导问题。如何还不能启动,可以使用diskgenius的分区克隆其他同类系统的esp分区,然后重新编辑BCD。或者使用pe、dism++重建esp分区。

2.vm使用bios

Vhd虚拟磁盘挂载后,使用diskgenius工具将其转换为MBR分区格式。编辑虚拟机配置,将pe的iso文件挂载光驱,vm引导后修复引导问题,会在c:\boot目录创建bcd文件,使用bootice工具检查引导项。注意:此时不能使用uefi的物理主机上挂载pe或者直接修改vhd虚拟磁盘来处理引导问题。

五、vhd还原到物理分区

Vhd虚拟磁盘挂载后,使用diskgenius工具将vhd(X)虚拟磁盘分区克隆到物理分区,同时使用regedit加载配置单元的方法修改注册表,删除mounteddevice下的键值。

六、BIOS里的启动顺序与BCD启动项顺序

BIOS里的启动顺序,按F12键选择另外一块物理硬盘、u盘时,对uefi,选择的设备要有自己的esp分区;对于mbr,选择的设备主引导记录、有激活的主分区及boot引导文件。

BCD文件于首个启动设备中,通过本设备的系统引导文件,引导设备磁盘分区或者其他物理磁盘分区的操作系统。主要机制是由本设备的引导文件控制系统引导。

七、从vmware workstation虚拟机迁移至本机启动VHDX

vm虚拟机采用uefi+gpt的系统模型。本次迁移的系统为windows11,为避免重新安装,保持原有的系统内容,将其迁移至物理机的vhdx本机启动。

1.物理磁盘1至少建立2个分区,在物理机的磁盘上建立esp分区及存放vhdx文件的ntfs分区。

2.使用starwind将vm虚拟机的vmdk硬盘文件转化为vhdx文件。

3.使用diskgenius的分区克隆功能将vhdx虚拟硬盘中的esp分区克隆到物理机磁盘1的esp分区。

4.使用bootice工具编辑bcd文件,添加相应的引导项。注意“检测硬件抽象层”不要选中。

5.启动物理机,按F12选择disk1进行引导,系统启动后重新检测硬件,系统会再次自动启动,再按按F12选择disk1进行引导,使用360驱动大师更新驱动。

八、从USB的esp分区引导
(1)使用移动u盘实现引导固定物理磁盘上的系统

USBHDD在bios的启动顺序中优先启动,在USBHDD上建立ESP分区并确保能使用。使用bootice工具修改启动项,引导物理磁盘disk1分区上windows10,引导disk2上的windows11的vhdx文件,均正常引导。

(2)使用usb hdd本机启动vhdx失败原因

前提条件同(1),建立好ESP分区,新建ntfs分区,用于放置vhdx文件,无论从winntsetup部署Windows11到NTFS分区的vhdx中,还是从其他硬盘分区拷贝过来的windows11的VHDX文件,使用bootice修改引导项,native boot(即本机启动)均失败,报错vhd_boot_init**_failed。

Native boot(本机启动)仅支持物理机上的内置硬盘,不支持从移动介质上本机启动。

这篇关于虚拟硬盘VHD或VHDX的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790757

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N