是否有可能(如何)在 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
最后我终于让它工作了。总结一下,下面是要执行的步骤
- 安装 macfuse
- 安装 Virtual Box
- 按照问题中提到的方式编译 vdfuse
挂载 vhd 磁盘
sudo ./vdfuse -tVHD -w -f /路径/到/VHD /路径/到/挂载点
附加虚拟分区块文件
hdiutil attachment -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN
挂载虚拟分区
mount -t YourFS /dev/diskK /Path/To/ParitionMountPoint
答案2
现在是 2020 年,这些 10 年前的说明几乎有效。以下是我根据 Jan Bernlöhr 接受的答案以及问题中的脚本在 Mojave Mac 上安装 Windows 7 的旧备份映像的操作。
- 安装 osxfuse (macfuse 的后继者)
- 安装 VirtualBox
- 从以下位置下载 vdfuse 源代码(
vdfuse.c
)https://github.com/Thorsten-Sick/vdfuse(目前为 v83 - 原始链接固定至 v80)。 - 下载 VirtualBox 标头,但您必须获取 2012 年的版本。我使用了以下命令:
svn co -r '{20120801}' http://www.virtualbox.org/svn/vbox/trunk/include/
- 使用以下根据问题改编的构建说明,但进行了一些小的改动(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}
挂载 vhd 磁盘
sudo ./vdfuse -tVHD -w -f/Path/To/VHD /Path/To/Mountpoint
附加虚拟分区块文件
hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN
挂载虚拟分区
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 等访问或复制所需的文件。