在 Mac OS X 上掛載 VHD
是否可以(如何)在 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 來將塊文件掛載為實際分區。
最後我讓它工作了。所以總而言之,這裡是執行的步驟
- 安裝 macfuse
- 安裝虛擬盒子
- 按照問題中的說明編譯 vdfuse
- 掛載 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 安裝舊備份映像所做的工作。
- 安裝 osxfuse(macfuse 的繼承者)
- 安裝 VirtualBox
vdfuse.c
從https://github.com/Thorsten-Sick/vdfuse下載 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
7. 附加虛擬分區塊文件
hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN
8. 掛載虛擬分區
mount -t YourFS /dev/diskK /Path/To/ParitionMountPoint
奇蹟般地,這很有魅力!