前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一种离线给.vhd文件缩容和集成虚拟化驱动的简单办法

一种离线给.vhd文件缩容和集成虚拟化驱动的简单办法

原创
作者头像
Windows技术交流
修改2024-05-30 11:14:53
1040
修改2024-05-30 11:14:53
举报
文章被收录于专栏:Windows技术交流Windows技术交流

问题1:阿里云在线迁移到腾讯云文件系统有问题进不去系统(阿里云虚拟化驱动跟腾讯云不兼容导致的),如果不用导出.vhd的办法,有简单的办法参考https://cloud.tencent.com/developer/article/2368787,如果用下文的离线思路也可以,就是需要删掉原来所有的虚拟化驱动再集成腾讯云的,不是在源平台搞,而是离线搞(chkdsk /f 检查文件系统那一步是必要的,第5、第6步集成虚拟化驱动也是必要的,只是要注意"先删后增")。

问题2:disk2vhd导出的.vhd文件要上云,但是文件特别大,且不一定有虚拟化驱动,7b蓝屏进不了系统,或者文件系统异常无法chkdsk /f修复,或者无法在winpe中dism集成驱动,总之,源头有问题没处理好。既然如此,那就想办法处理好源头问题,只能离线改造,本文就是方案。

问题3:裸金属机器搞好业务环境了,但是做不了镜像,无法批量生产,唯一的办法就是导出.vhd文件离线改造,本文针对性解决。

先弄好样板机业务环境,用disk2vhd导出.vhd文件。

disk2vhd是微软出品,可以放心使用,下载地址:https://download.sysinternals.com/files/Disk2vhd.zip

starwind也很好,可参考https://cloud.tencent.com/developer/article/1843176

disk2vhd导出.vhd的注意事项

①VSS(Volume Shadow Copy Service)是前提,VSS服务是Windows系统自带的,一般都是正常的,基本可以忽略。

②如果是在winpe里操作,原系统盘此时相当于winpe的一块没有业务的数据盘,此时不要勾选Use Volume Shadow Copy、不要选Use Vhdx。(我们不在winpe操作,这点忽略)

③如果是直接在系统运行的情况下操作,需要勾选Use Volume Shadow Copy,但不要选Use Vhdx。(我们就用此点)

④导出的时候,注意.vhd文件保存的位置,比如导出磁盘0,需要把磁盘0的所有分区都勾选,导出到磁盘0之外的数据盘分区上,一定不要选错保存的位置。

详情参考https://cloud.tencent.com/document/product/213/17815#.E5.AF.BC.E5.87.BA.E9.95.9C.E5.83.8F

导出后先不着急上传COS,先改造,改造完了再上传COS。

步骤:

1、注意操作old.vhd前先拷贝一份原文件以备不时之需,然后新建空白动态大小的.vhd文件,假如原vhd文件为old.vhd,新建的vhd文件为new.vhd。

附加(attach)old.vhd到磁盘管理器,查看原文件系统,假如盘符是J:,执行chkdsk /f J:

连续执行3遍,没有问题的话,删掉pagefile.sys后查看盘符占用大小,比如42G多,那你创建new.vhd时动态大小指定45G即可

2、用DiskGenius (https://diskgenius.cn/download.php)对old.vhd附加后的磁盘进行"备份分区表"的操作。

3、附加new.vhd到磁盘管理器并用DiskGenius还原上步的分区表信息到new,然后按软件自动化提示修正,这样就确保了new和old的分区信息一致,只是C分区大小不同而已。

4、用DiskGenius的克隆分区功能,把old的每一个分区分别克隆到new的每一个对应分区,克隆的时候选第3个选项(只复制文件),操作的时候一定看清楚源分区和目标分区,别整差了而后悔莫及。

5、给new系统集成虚拟化驱动。

假如new的系统分区盘符在磁盘管理器中显示为G:

假设驱动你已经提前准备好了,在C:\drivers\amd64\目录

代码语言:txt
复制
Dism /Add-Driver /Image:"G:" /Driver:"C:\drivers\amd64\viostor.inf" /ForceUnsigned
Dism /Add-Driver /Image:"G:" /Driver:"C:\drivers\amd64\netkvm.inf" /ForceUnsigned
Dism /Image:"G:" /Get-Drivers

6、给new系统的winre.wim集成驱动。

cmd命令行进行如下操作(这个很关键,是修复启动引导)

BIOS+MBR:

代码语言:javascript
复制
cd /d G:\Windows\System32
G:\Windows\System32\bootrec.exe /fixmbr
G:\Windows\System32\bootrec.exe /rebuildbcd
bcdboot G:\Windows /s G:

如果是UEFI+GPT,EFI分区盘符假如是S:、Windows\System32目录所在盘符仍然是G:,命令做适当调整

代码语言:txt
复制
cd /d G:\Windows\System32
G:\Windows\System32\bootrec.exe /rebuildbcd
bcdboot G:\Windows /s S: /f UEFI

bootrec.exe如果不存在,用Everything搜索winre.wim,比如我的是G:\Recovery\WindowsRE\winre.wim

新建一个空目录比如C:\boottmp1,把G:\Recovery\WindowsRE\winre.wim挂到新建的空目录再继续搜就能找到bootrec.exe,把bootrec.exe复制到G:\Windows\System32\,然后给G:\Recovery\WindowsRE\winre.wim集成虚拟化驱动(驱动跟上步的驱动保持一致)

代码语言:javascript
复制
mkdir C:\boottmp1 -force
Dism /Get-ImageInfo /ImageFile:"G:\Recovery\WindowsRE\Winre.wim"
Dism /Mount-Image /ImageFile:"G:\Recovery\WindowsRE\Winre.wim" /index:1 /MountDir:"C:\boottmp1"

Dism /Add-Driver /Image:"C:\boottmp1" /Driver:"C:\drivers\amd64\viostor.inf" /ForceUnsigned
Dism /Add-Driver /Image:"C:\boottmp1" /Driver:"C:\drivers\amd64\netkvm.inf" /ForceUnsigned

Dism /Image:"C:\boottmp1" /Get-Drivers
Dism /Unmount-Image /MountDir:"C:\boottmp1" /Commit
上一句是提交命令,发生内容变化
下面一句命令以备不时之需,就是你中途想放弃了,回滚到原始状态,则是:
Dism /Unmount-Image /MountDir:"C:\boottmp1" /Discard

以上几步完成后,就可以从磁盘管理器解分离(detach)new.vhd,这个new.vhd就改造好的vhd,上传到对象存储COS,导入自定义镜像来使用(导入的时候选强制导入)。

备注:建议尽可能把镜像搞得小一些,另外需要注意,如果系统盘vsize大小超过1T,只能离线导入实例(当然小于1T也是可以离线导入实例的)。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档