在 Mac OS X 上安装 VHD

在 Mac OS X 上安装 VHD

是否有可能(如何)在 OS X 中安装由 Windows 7 创建的 VHD 文件?

我找到了一些关于如何在 Linux 上执行此操作的信息。有一个 fuse fs“vdfuse”,它使用 virtualbox libs 来挂载 virtualbox 支持的文件系统。但是我无法在 osx 上编译该包,因为几乎所有的头文件都丢失了,而且我怀疑它无论如何都无法工作……

编辑#2:好吧,我开始着手并最终编译了 vdfuse(http://forums.virtualbox.org/viewtopic.php?f=26&t=33355&start=0) 在 osx 上。作为起点,我使用了 macfuse (http://code.google.com/p/macfuse/) 并查看了示例文件系统。

这让我想到了以下构建脚本

infile=vdfuse.c
outfile=vdfuse
incdir="your/path/to/vbox/headers"
INSTALL_DIR="/Applications/VirtualBox.app/Contents/MacOS"
CFLAGS="-pipe"

gcc -arch i386 "${infile}" \
         "${INSTALL_DIR}"/VBoxDD.dylib \
         "${INSTALL_DIR}"/VBoxDDU.dylib \
         "${INSTALL_DIR}"/VBoxVMM.dylib \
         "${INSTALL_DIR}"/VBoxRT.dylib \
         "${INSTALL_DIR}"/VBoxDD2.dylib \
         "${INSTALL_DIR}"/VBoxREM.dylib \
        -o "${outfile}" \
        -I"${incdir}" -I"/usr/local/include/fuse" \
        -Wl,-rpath,"${INSTALL_DIR}"  \
        -lfuse_ino64  \
        -Wall ${CFLAGS}

您实际上不需要在您的机器上编译 VirtualBox,只需安装最新版本的 VirtualBox。

所以现在我可以部分挂载 vhd。单独的分区在我的挂载点上显示为块文件 Partition1、Partition2、...。但是 Mac OS X 不包含环回文件系统,并且 macfuse 的环回 fs 不适用于块文件,因此我们需要一个环回 fs 来将块文件挂载为实际分区。

答案1

最后我终于让它工作了。总结一下,下面是要执行的步骤

  1. 安装 macfuse
  2. 安装 Virtual Box
  3. 按照问题中提到的方式编译 vdfuse
  4. 挂载 vhd 磁盘

    sudo ./vdfuse -tVHD -w -f /路径/到/VHD /路径/到/挂载点

  5. 附加虚拟分区块文件

    hdiutil attachment -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN

  6. 挂载虚拟分区

    mount -t YourFS /dev/diskK /Path/To/ParitionMountPoint

答案2

现在是 2020 年,这些 10 年前的说明几乎有效。以下是我根据 Jan Bernlöhr 接受的答案以及问题中的脚本在 Mojave Mac 上安装 Windows 7 的旧备份映像的操作。

  1. 安装 osxfuse (macfuse 的后继者)
  2. 安装 VirtualBox
  3. 从以下位置下载 vdfuse 源代码(vdfuse.chttps://github.com/Thorsten-Sick/vdfuse(目前为 v83 - 原始链接固定至 v80)。
  4. 下载 VirtualBox 标头,但您必须获取 2012 年的版本。我使用了以下命令:svn co -r '{20120801}' http://www.virtualbox.org/svn/vbox/trunk/include/
  5. 使用以下根据问题改编的构建说明,但进行了一些小的改动(64 位构建,较新的 VirtualBox 似乎没有 VBoxREM.dylib):
  infile=vdfuse.c
  outfile=vdfuse
  incdir="$(pwd)/include"
  INSTALL_DIR="/Applications/VirtualBox.app/Contents/MacOS"
  CFLAGS="-pipe"

  gcc -arch x86_64 "${infile}" \
         "${INSTALL_DIR}"/VBoxDD.dylib \
         "${INSTALL_DIR}"/VBoxDDU.dylib \
         "${INSTALL_DIR}"/VBoxVMM.dylib \
         "${INSTALL_DIR}"/VBoxRT.dylib \
         "${INSTALL_DIR}"/VBoxDD2.dylib \
        -o "${outfile}" \
        -I"${incdir}" -I"/usr/local/include/fuse" \
        -Wl,-rpath,"${INSTALL_DIR}"  \
        -lfuse_ino64  \
        -Wall ${CFLAGS}
  1. 挂载 vhd 磁盘

    sudo ./vdfuse -tVHD -w -f/Path/To/VHD /Path/To/Mountpoint

  2. 附加虚拟分区块文件

    hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN

  3. 挂载虚拟分区

    mount -t YourFS /dev/diskK /Path/To/ParitionMountPoint

奇迹般地,这真的有效!

答案3

这在 Mountain Lion 上对我有用。无需安装或编译:

hdiutil attach -readonly -imagekey diskimage-class=CRawDiskImage <Path to .vhd file>

答案4

如果找不到其他解决方案,您可以使用 VirtualBox(或其他支持 VHD 文件的类似工具)来运行使用该虚拟磁盘映像的虚拟系统,然后使用 Samba 或 sftp 等访问或复制所需的文件。

相关内容