nbdkit is a pluggable NBD server and it comes with a very wide range of plugins (of course you can also write your own). One of them is the VMware VDDK plugin, an interface between nbdkit and the very proprietary VMware VDDK library. The library allows you to read local VMware disks or access remote VMware servers. In this example I’m going to use it to loopback mount a VMDK file:
$ export LD_LIBRARY_PATH=~/tmp/vddk/vmware-vix-disklib-distrib/lib64 $ nbdkit -fv vddk \ libdir=~/tmp/vddk/vmware-vix-disklib-distrib \ file=/var/tmp/fedora.17.x86-64.20120529.vmdk
When loopback-mounting you must use a 512 byte sector size (see the mailing list for discussion):
# nbd-client -b 512 localhost /dev/nbd0 Warning: the oldstyle protocol is no longer supported. This method now uses the newstyle protocol with a default export Negotiation: ..size = 10240MB Connected /dev/nbd0
Standard health warning: Loopback mounting any unknown disk is dangerous! You should use libguestfs instead as it protects you from harmful disks and also doesn’t require root.
It turns out this VMDK file contains a partitioned disk with one partition:
# fdisk -l /dev/nbd0 Disk /dev/nbd0: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 1024 bytes / 1024 bytes Disklabel type: dos Disk identifier: 0x000127ae Device Boot Start End Sectors Size Id Type /dev/nbd0p1 2048 20971519 20969472 10G 83 Linux
and it can be mounted directly and it’s fully writable:
# mount /dev/nbd0p1 /mnt # ls -l /mnt total 76 lrwxrwxrwx. 1 root root 7 May 29 2012 bin -> usr/bin dr-xr-xr-x. 4 root root 4096 May 29 2012 boot drwxr-xr-x. 2 root root 4096 Feb 3 2012 dev drwxr-xr-x. 59 root root 4096 May 29 2012 etc drwxr-xr-x. 2 root root 4096 Feb 3 2012 home lrwxrwxrwx. 1 root root 7 May 29 2012 lib -> usr/lib lrwxrwxrwx. 1 root root 9 May 29 2012 lib64 -> usr/lib64 [etc] # touch /mnt/hello