更好的手工仿真方式——向物理磁盘已被使用say no

前言

最近心血来潮想研究一下如何解析E01文件,需要用到libewf这个库,了解过后发现这个库中提供了一个工具ewfmount,可以将E01镜像文件挂载成一个raw格式的镜像文件。与此同时,vmware恰好支持在vmdk中使用这个类型的镜像文件,因此通过此方法进行仿真是可行的

分析

挂载命令ewfmount 镜像文件 挂载点(盘符或是目录),挂载后在挂载点中就会出现一个EWF1镜像文件,使用XWays等工具可以正常打开(注意:如果要挂载到目录中,需要提供一个存在的空目录),建议是挂载到目录里,这样不会出现盘符,在用户层面无感

由于自己编译失败,我就在电脑里进行了搜索,一搜发现厂商的仿真也是按照这个思路来的,其他的mount也是对应的不同类型的镜像文件(有的厂商是直接用,也有的厂商是自己把所有的都编译到一块,实现一个工具挂载不同类型的镜像),本质的目的就是一个,把镜像转成了raw,供vmware使用

这里以一个案例为例,可以看到disk0.vmdk的内容如下,这里的EWF1明显就是挂载出来的镜像文件(在使用仿真软件时,可以打开任务管理器查看,一定会出现一个程序,可能是**mount这样,在你使用虚拟机的时候,他会负责从镜像读取数据,其实就是这里在使用)

除了disk0.vmdk之外,还可以看到很多vmdk文件,这些其实就是你对虚拟机产生的修改(具体的实现方式就是快照,只需要创建一个快照,vmware就会保护原始的磁盘不会再被修改,达到只读的目的,所以你使用厂商的软件仿真时,会发现总是会自动创建一个快照)

最后则是vmx虚拟机配置文件,我们可以直接拿一个已有仿真的配置文件作为参考,一般情况下就是改改内存、cpu、网络这些

当然,大概率还需要一个引导镜像,如上面的supergrub2.iso,如果有使用过仿真软件,在他们的安装目录下基本上可以找到这些iso,我们直接拿来使用即可。

接下来看一个实际仿真的例子。

实操

挂载镜像

创建一个vmdk文件

这里要注意一下参数,RW后面跟着的是扇区数,由于挂载出来的镜像文件是raw,所以磁盘大小就是文件大小,那么扇区数就是文件大小/512,这里得到419430400,这个数字不对极有可能无法打开虚拟机

创建vmx文件

可以拿一个已经仿真过的文件来用,可以删除一些不必要的配置,这里需要注意的就是光盘的iso镜像,最好就提供仿真软件所用的镜像文件,否则很多系统可能无法引导(软件下可能有很多镜像文件,我们可以一个一个尝试,直到成功引导)

.encoding = "GBK"
MemAllowAutoScaleDown = "FALSE"
bios.bootOrder = "cdrom,hdd"
config.version = "8"
cpuid.coresPerSocket = "4"
displayName = "tttesttt"
ehci.present = "TRUE"
ethernet0.addressType = "generated"
ethernet0.connectionType = "nat"
ethernet0.present = "TRUE"
ethernet0.startConnected = "TRUE"
ethernet0.virtualDev = "e1000"
ethernet0.wakeOnPcktRcv = "FALSE"
extendedConfigFile = "H7000.vmxf"
floppy0.present = "FALSE"
guestOS = "other-64"
gui.fullScreenAtPowerOn = "TRUE"
hpet0.present = "TRUE"
ide0:0.deviceType = "disk"
ide0:0.fileName = "disk0.vmdk"
ide0:0.mode = "persistent"
ide0:0.present = "TRUE"
ide1:0.deviceType = "cdrom-image"
ide1:0.fileName = "C:\Program Files (x86)\H7000\config\help11.iso"
ide1:0.present = "TRUE"
ide1:0.startConnected = "TRUE"
memsize = "4096"
msg.autoAnswer = "TRUE"
numvcpus = "4"
pciBridge0.present = "TRUE"
pciBridge4.functions = "8"
pciBridge4.present = "TRUE"
pciBridge4.virtualDev = "pcieRootPort"
serial0.autodetect = "TRUE"
serial0.present = "TRUE"
snapshot.disabled = "TRUE"
usb.present = "TRUE"
usb_xhci.present = "TRUE"
virtualHW.version = "16"
virtualHW.productCompatibility = "hosted"

创建快照

双击vmx即可进入vmware界面,接下来需要进行最重要的一步,创建快照(不创建快照极有可能对原始镜像造成更改!)

创建完快照后,虚拟机目录下就会自动生成这些虚拟磁盘文件,用来保存更改

启动

如果创建快照顺利,那么就可以启动虚拟机了,当选择的引导镜像合适时,可以成功进入系统,我这里直接仿真windows,不需要另外加引导镜像(镜像除了引导之外,还可以进行自动绕密操作),成功进入了系统

 

结语

掌握了这种方式,以后再给客户提供重建完的服务器时,就不需要使用克隆的方式进行处理了(克隆等待时间久,并且生成的文件很大)

我们只需要把ewfmount和他所需要的依赖以及dokan(给一个安装包就行)配置好,简单弄一个批处理的shell,提供镜像文件和已有的虚拟机文件,重新挂载并修改raw镜像所在目录,即可直接打开重建完的虚拟机了

此方式对vmdk、qcow、vhd等格式的镜像同样适用。

当然最关键的是,使用此方式进行仿真,就不会遇到物理磁盘已被使用这样的问题了,因为挂载进目录时,基本上不会有程序会去占用文件。而使用常规的挂载工具挂载成物理磁盘时,如果文件系统受支持,那么windows下面的很多程序都会去扫描,导致占用无法仿真。

:)

posted @ 2025-08-19 13:30  WXjzc  阅读(430)  评论(0)    收藏  举报