Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Is it possible (how) to mount an VHD file created by Windows 7 in OS X?

I found some information about how to do this on linux. There is a fuse fs "vdfuse" which uses virtualbox libs to mount filesystems supported by virtualbox. However I was unable to compile the package on osx because nearly all headers are missing and I doubt that it would work anyway...

EDIT #2: Okay I got my hands dirty and finally compiled vdfuse (http://forums.virtualbox.org/viewtopic.php?f=26&t=33355&start=0) on osx. As a starting point I used macfuse (http://code.google.com/p/macfuse/) and looked at the example file systems.

This led me to the following build script

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}

You actually don't need to compile VirtualBox on your machine, just install a recent version of VirtualBox.

So now I can partially mount vhds. The separate partitions appear as block files Partition1, Partition2, ... on my mount point. However Mac OS X does not include a loopback file system and macfuse's loopback fs does not work with block files, so we need a loopback fs to mount the blockfiles as actual partitions.

share|improve this question
    
What does Win7 Have to do with it? To answer your question completely, I'd need to know what application created your VHD (VirtualBox, VMware (and workstation vs Server vs...), etc.) –  gWaldo Aug 25 '10 at 12:47
    
Actually I created the VHD with diskpart contained in Windows 7... –  janm Aug 25 '10 at 20:29
    
You may want to use gcc -arch x86-64 "${infile}" \ for line 7 if you're running Leopard or Snow Leopard (esp 10.6) so it compiles 64-bit –  gWaldo Aug 26 '10 at 12:45
    
@gWaldo, VHD is a file format used by Windows 6.1, Virtual PC, Virtual Server, Hyper-V, Xen, and others. –  Chris S Aug 26 '10 at 13:31
add comment

5 Answers

up vote 3 down vote accepted

Finally I got it working. So in summary here are the steps to perform

  1. Install macfuse
  2. Install Virtual Box
  3. Compile vdfuse as mentioned in the question
  4. Mount the vhd disk

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

  5. Attach the virtual partition blockfiles

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

  6. Mount the virtual partition

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

share|improve this answer
add comment

FUSE works on MacOSX, however you would need the headers.

share|improve this answer
    
Thanks, I already established macfuse on our machines to make ntfs (tuxera), ext2 and other file systems accessible to our osx users. Maybe I can compile the lib on a linux system and then copy the files ot osx... –  janm Aug 25 '10 at 20:34
add comment

If you don't find another solution, you could use VirtualBox (or another similar tool that supports VHD files) to run a virtual system that uses that virtual disk image, and then access or copy the files you need using Samba or sftp or such.

share|improve this answer
    
Thank you, this is feasible but unfortunately not quite what I'm looking for. Currently I have NTFS partitions on a dual boot system, so I can read/write data from win and osx. The next step is virtualizing the partitions which contain win7 and data... However the data is still needed to be accessible on osx. –  janm Aug 25 '10 at 20:32
add comment

Just rename your VHD file to IMG.. double click on it to mount it. That's all.

Remember that Mac OS X provides read access only for NTFS volume, so if your VHD has a NTFS volume, you have only read access.

share|improve this answer
1  
Unfortunately this does not work. DiskImageMounter just says "not recognized". –  janm Jan 13 '12 at 22:55
add comment

This worked for me on Mountain Lion. No installation or compilation necessary:

hdiutil attach -readonly -imagekey diskimage-class=CRawDiskImage <Path to .vhd file>
share|improve this answer
    
Say for me on 10.8.3 : hdiutil: attach failed - no mountable file systems –  hkulekci Jun 4 '13 at 7:48
    
I just tried it again and get the same error message. Weird. I have used this a couple of times successfully some months ago. –  henning77 Jun 4 '13 at 10:21
    
With an older vhd image it works again (NTFS, created in 01/2013). With a newer vhd it doesn't. I don't know yet where the difference is. –  henning77 Jun 18 '13 at 11:07
    
i did not find something about this issue. –  hkulekci Jun 18 '13 at 14:07
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.