标签: virtual-disk

将VmWare虚拟磁盘转换为HyperV时出错

我从客户端收到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)

vmware hyper-v virtual-disk

54
推荐指数
4
解决办法
5万
查看次数

挂载VMDK磁盘映像

我有一个带有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)

我究竟做错了什么?

mount computer-forensics virtual-disk vmdk

21
推荐指数
4
解决办法
5万
查看次数

CreateVirtualDisk 给出错误 87(参数不正确。)

在 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)

delphi winapi virtual-disk

8
推荐指数
1
解决办法
546
查看次数

从磁盘编号中检索虚拟磁盘文件名

当我在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 "作为结果.

我已经尝试过:

  1. 使用diskpart和解析输出 - 因为它是未记录的格式,它可以随时更改.这不是我所依赖的.
  2. 常规VHD API - 没有函数将磁盘号作为参数.
  3. Microsoft.Storage.Vds.dll - 有一些枚举遍历每个驱动器(例如Service.Providers),但是没有属性/函数可以为我提供源文件的名称.虽然我现在可以确定例如驱动器D:是虚拟驱动器,但我仍然无法知道连接了哪个.vhd文件.

知道哪个功能可能是什么?

c# pinvoke winapi virtual-disk

7
推荐指数
1
解决办法
8138
查看次数

如何在VMDK文件中找到MBR扇区?

我试图了解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(使用十六进制编辑器),并且偏移量如上所述.

任何帮助,将不胜感激.谢谢!

mbr bios virtual-disk

7
推荐指数
1
解决办法
2795
查看次数

为模拟线程授予额外权限

我的程序“UP”需要能够从网络位置挂载 VHDX 文件。困难在于,任何调用OpenVirtualDisk(...)网络位置的线程 需要同时拥有SE_MANAGE_VOLUME_PRIVILEGE,而我的大多数用户都没有,并且需要访问网络位置,我安装的任何系统进程“SP”都没有。

方法 1:我读过我可以让 SP 接收用户的凭据并使用“客户端模拟”创建一个以用户身份运行的线程。但我不知道如何让 SP 也授予该线程SE_MANAGE_VOLUME_PRIVILEGE

方法二:如果SP拿到了用户的凭据,它是否可以使用它们为自己设置对网络共享的透明访问,以便它可以调用OpenVirtualDisk(...)自己?

windows impersonation shared-directory virtual-disk

5
推荐指数
0
解决办法
57
查看次数

我可以以编程方式在内存中创建虚拟磁盘吗?

出于性能目的,我想写入内存,外部应用程序可以读取.我无法将两个应用程序链接在一起,所以我认为唯一的方法是编写一个文件.但是将它写入物理磁盘还不够快.我想挂载虚拟分区,以便任何应用程序都可以访问它.怎么做?

.net c# virtual-disk

3
推荐指数
1
解决办法
3252
查看次数