我从客户端收到VmWare映像用于某些测试目的.我需要将其转换为Hyper-V.我按照http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyper-v中的步骤进行操作.我安装了Microsoft Virtual Machine Converter并开始在PowerShell中转换虚拟磁盘.但是我变得很恐怖:
C:\Windows\system32> ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk" -DestinationLiteralPath "c:\data\HyperV\PH\" -VhdType DynamicHardDisk -VhdFormat Vhdx
ConvertTo-MvmcVirtualHardDisk : The entry 1 is not a supported disk database entry for the descriptor.
At line:1 char:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVirtualHardDisk], VmdkDescriptorParseException
+ FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskCommand
ConvertTo-MvmcVirtualHardDisk : One or more errors occurred.
At line:1 char:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVirtualHardDisk], AggregateException
+ FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskCommand
Run Code Online (Sandbox Code Playgroud) 我有一个带有vmdk扩展名的vmware磁盘映像文件
我正在尝试安装它并探索所有分区(包括隐藏的分区).
我试图遵循几个指南,例如:http://forums.opensuse.org/showthread.php/469942-mounting-virtual-box-machine-images-host
我可以使用vdfuse挂载图像
vdfuse -w -f windows.vmdk /mnt/
Run Code Online (Sandbox Code Playgroud)
在此之后,我可以看到一个分区和整个磁盘暴露
# ll /mnt/
total 41942016
-r-------- 1 te users 21474836480 Feb 28 14:16 EntireDisk
-r-------- 1 te users 1569718272 Feb 28 14:16 Partition1
Run Code Online (Sandbox Code Playgroud)
继续本指南,我尝试使用EntireDisk或Partition1
mount -o loop,ro /mnt/Partition1 mnt2/
Run Code Online (Sandbox Code Playgroud)
但这给了我错误'mount:你必须指定一个文件系统类型'
在试图找到我试过的正确类型
dd if=/mnt/EntireDisk | file -
which outputs a ton of information but of note is:
/dev/stdin: x86 boot sector; partition 1: ....... FATs ....
Run Code Online (Sandbox Code Playgroud)
所以我厌倦了作为一个vfat登上,但这给了我
mount: wrong fs type, bad option, bad superblock ...etc
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
在 Windows 10 上,尝试使用CreateVirtualDisk API创建虚拟磁盘失败并返回错误代码 87。
完成最小的可重现示例。
program Project3;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Winapi.Windows;
type
// Identifiers for virtual storage types and providers
VIRTUAL_STORAGE_TYPE = record
DeviceId: ULONG; // VIRTUAL_STORAGE_TYPE_DEVICE_xxx
VendorId: TGUID; // VIRTUAL_STORAGE_TYPE_VENDOR_xxx
end;
PVIRTUAL_STORAGE_TYPE = ^VIRTUAL_STORAGE_TYPE;
const
VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT: TGUID = '{EC984AEC-A0F9-47e9-901F-71415A66345B}';
VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN: TGUID = '{00000000-0000-0000-0000-000000000000}';
type
// Version definitions
CREATE_VIRTUAL_DISK_VERSION = (
CREATE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
CREATE_VIRTUAL_DISK_VERSION_1 = 1
);
// Versioned CreateVirtualDisk parameter structure
CREATE_VIRTUAL_DISK_PARAMETERS_V1 = record
Version: CREATE_VIRTUAL_DISK_VERSION;
UniqueId: TGUID;
MaximumSize: ULONGLONG;
BlockSizeInBytes: …
Run Code Online (Sandbox Code Playgroud) 当我在diskpart中列出虚拟磁盘时:
DISKPART> list vdisk
VDisk ### Disk ### State Type File
--------- -------- -------------------- --------- ----
VDisk 0 Disk 2 Attached not open Fixed C:\Disk.vhd
Run Code Online (Sandbox Code Playgroud)
对我来说有趣的部分是文件名.如果我知道磁盘号,我试图找到相应的函数,它会给我文件名(在File列下).
理想情况下,我会给" \\?\ PhysicalDrive2 ",我会得到" C:\ Disk.vhd "作为结果.
我已经尝试过:
知道哪个功能可能是什么?
我试图了解vmware bios在加载之前如何找到MBR.
在物理硬盘中很容易 - MBR位于第一个扇区.
但是......在VM中会发生什么?
我创建了2个VM - 在第一个vmdk(安装了基于linux的系统)上,我发现MBR偏移量为0x2A0000.
在第二个vmdk文件(安装了Windows XP)中,我发现MBR不止一次 - 但我发现的所有偏移量都不能除以512(扇区大小),这有点奇怪(就我而言)知道,MBR应该从一个扇区的开头开始+扇区大小是512字节,在vmdk中=> MBR的起始偏移必须除以512.如果我错了,请纠正我.
所以他们可能是备份的副本我想..不用说xp .vmdk中的@偏移0x2A0000没什么好玩的.
那么.. vmware的BIOS如何找到MBR?这个可配置参数位于何处?如何计算?
附加信息:
- 两个VMDK都是1个文件硬盘文件(并且可以增长到40GB).
他们所服务的系统只使用它们(XP使用xp.vmdk,linux使用linux.vmdk,没有额外的VMDK).
- @Windows VM我在\.\ PhysicalDrive0上使用WinHex来获取MBR.it看起来没问题(签名等等).
- @Linux VM我使用命令"dd if =/dev/sda of = mbr.bin bs = 512 count = 1",然后查看十六进制字节以获得MBR.我看着它看起来很好(GRUB,最后签名等).
从VM获取MBR之后,我在每个相应的.vmdk文件中搜索了主机pc中的MBR(使用十六进制编辑器),并且偏移量如上所述.
任何帮助,将不胜感激.谢谢!
我的程序“UP”需要能够从网络位置挂载 VHDX 文件。困难在于,任何调用OpenVirtualDisk(...)
网络位置的线程都 需要同时拥有SE_MANAGE_VOLUME_PRIVILEGE
,而我的大多数用户都没有,并且需要访问网络位置,我安装的任何系统进程“SP”都没有。
方法 1:我读过我可以让 SP 接收用户的凭据并使用“客户端模拟”创建一个以用户身份运行的线程。但我不知道如何让 SP 也授予该线程SE_MANAGE_VOLUME_PRIVILEGE
。
方法二:如果SP拿到了用户的凭据,它是否可以使用它们为自己设置对网络共享的透明访问,以便它可以调用OpenVirtualDisk(...)
自己?
出于性能目的,我想写入内存,外部应用程序可以读取.我无法将两个应用程序链接在一起,所以我认为唯一的方法是编写一个文件.但是将它写入物理磁盘还不够快.我想挂载虚拟分区,以便任何应用程序都可以访问它.怎么做?