Accessing Files On A VMDK Without Booting The Virtual Machine

By: kryptikos

May 30, 2008 9:15 am





Virtualization is quite the hot topic these days. More companies and individuals in rapidly advancing numbers are deploying virtualized machines and services. In fact I no longer run a physical windows box. All of my systems are running on Linux and I have virtualized my Windows XP machine (keeping it only out of a pure evil necessity of corporate reasons). I’ll also go on record that my Windows box runs faster as a vm than when it was a physical entity. It is easy to say that VMware is neat, but let’s scrape away the magic here for a moment.

What is a virtualized machine? Boil it down, trim off the icing and pull out your T-square from drafting class and you’ll simply find that the operating system has been converted into one large fat pack of data. That’s right, the vmdk (virtual machine disk) is nothing more than a large file. Now, if you remember back to my tip on the command lsof I made the comment that the Linux kernel basically looks at everything as a file. What does that mean for us? A great deal actually. It means that with the power of Linux you can manipulate your virtual machines without having them running.

Example time. Let’s say you have a virtual Windows machine. You are getting ready to go play in traffic and head home. You’ve powered down the vm when suddenly your boss calls and says “quick, I need the reconfigure configurations of the configures document”. You could restart and wait for the virtual box to boot up and start all of its services, or you can simply mount the vmdk in a loop inside your Linux box and pull the file off.

VMware includes some tools for you when you install the software. One of these tools is a perl script called You use it just the same as your normal mount command. The command structure is… /home/user/vmware/windows.vmdk 1 -o ro /mnt/point

For example mounting my Windows XP vmdk would be: /home/kryptikos/vmware/windowsxp.vmdk 1 -o ro /mnt/vm_mnt

The “1” represents the partition number and “-o” passes the option to mount the file as read-only. You will be prompted by some comments about lack of guarantees and asking to proceed. The script will create a network block device driver for you as you can see below:

root@kryptikos:/mnt# /home/kryptikos/vmware/windowsxp.vmdk 1 -o ro /mnt/vm_mount/

VMware for Linux - Virtual Hard Disk Mounter
Version: 1.0 build-56528
Copyright 1998 VMware, Inc.  All rights reserved. -- VMware Confidential

It has been reported that this program does not work correctly with 2.4+ Linux 
kernels in some cases, and you are currently running such a kernel. Do you 
really want to continue? [N] Y

No Network Block Device detected.

There is no Network Block Device defined on this machine. This script is about 
to create the /dev/nb0 Network Block Device. Continue? [Y] 

Creating the /dev/nb0 Network Block Device

No Network Block Device driver detected.

Trying to load the Network Block Device driver kernel module... Success.

Client: The partition is now mapped on the /dev/nb0 Network Block Device.

Using another terminal, you can now browse your Virtual Hard Disk partition in 
/mnt/vm_mount/. Hit Control-C in this terminal when done.

The kernel does the rest of the heavy lifting and completes the mount. You are now able to access and look into your Windows machine just as if it was running real-time. You can open Nautilus, Konqueror etc to look through the virtual disk, or do it via another shell. Just remember that you will have to exit the mount by using “ctrl-c” from the terminal shell you executed the command in.

That’s it. Fairly clean and simple. Being able to access your virtual machine files at anytime regardless if the machine is running or not is a great tool for any user or engineer. I can’t claim this particular quote as mine, but I loved it…”This is Linux country. On a quiet night you can hear Windows reboot”.

0 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 5 (0 votes, average: 0.00 out of 5)
You need to be a registered member to rate this post.

Tags: ,
Categories: SUSE Linux Enterprise Server, Technical Solutions, Virtualization

Disclaimer: As with everything else in the SUSE Blog, this content is definitely not supported by SUSE (so don't even think of calling Support if you try something and it blows up).  It was contributed by a community member and is published "as is." It seems to have worked for at least one person, and might work for you. But please be sure to test, test, test before you do anything drastic with it.