Mac-Osx

在 Mac OS X 上掛載 VHD

  • June 3, 2021

是否可以(如何)在 OS X 中掛載由 Windows 7 創建的 VHD 文件?

我找到了一些關於如何在 linux 上執行此操作的資訊。有一個 fuse fs “vdfuse”,它使用 virtualbox 庫來掛載 virtualbox 支持的文件系統。但是我無法在 osx 上編譯包,因為幾乎所有的標頭檔都失去了,我懷疑它無論如何都可以工作……

**編輯#2:**好的,我弄髒了手,最後在osx上編譯了vdfuse( http://forums.virtualbox.org/viewtopic.php?f=26&t=33355&start=0 )。作為起點,我使用了 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。

所以現在我可以部分安裝 vhds。單獨的分區在我的掛載點上顯示為塊文件 Partition1、Partition2、…。但是 Mac OS X 不包含回送文件系統,並且 macfuse 的回送 fs 不適用於塊文件,因此我們需要一個回送 fs 來將塊文件掛載為實際分區。

最後我讓它工作了。所以總而言之,這裡是執行的步驟

  1. 安裝 macfuse
  2. 安裝虛擬盒子
  3. 按照問題中的說明編譯 vdfuse
  4. 掛載 vhd 磁碟

sudo ./vdfuse -tVHD -w -f/Path/To/VHD /Path/To/Mountpoint 5. 附加虛擬分區塊文件

hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN 6. 掛載虛擬分區

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

現在是 2020 年,這些 10 年前的指示幾乎奏效了。根據 Jan Bernlöhr 接受的答案以及問題中的腳本,這是我在 Mojave Mac 上從 Windows 7 安裝舊備份映像所做的工作。

  1. 安裝 osxfuse(macfuse 的繼承者)
  2. 安裝 VirtualBox
  3. vdfuse.chttps://github.com/Thorsten-Sick/vdfuse下載 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 7. 附加虛擬分區塊文件

hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN 8. 掛載虛擬分區

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

奇蹟般地,這很有魅力!

引用自:https://serverfault.com/questions/174278