How to mount a vmdk file in Linux

Overview

vmdk’s, the underlying filesystem commonly used in vmware, can be mounted on a Linux server using the qemu utilities. In this example, I downloaded an ova, unarchived it, and retrieved the vmdk files. Once exposed, I am able to mount the filesystems embedded within the vmdk.

In this example, the ova is a virtual “appliance” which prohibits access a low level root shell. By mounting the vmdk file system directly, we can take a peek at the hidden secrets the vendor keeps under lock and key.

Details

Install qemu utils:

sudo apt install qemu-utils

Load the network block device module:

jemurray@home-server:~/ib$ sudo modprobe nbd

Create the network block devices from the vmdk image:

jemurray@home-server:~/ib$ sudo qemu-nbd -r -c /dev/nbd1 ./vnios-disk.vmdk

Examine the images qemu created:

jemurray@home-server:~/ib$ ls -al /dev/nbd1p*
brw-rw---- 1 root disk 43, 33 Jan  9 14:28 /dev/nbd1p1
brw-rw---- 1 root disk 43, 34 Jan  9 14:28 /dev/nbd1p2
brw-rw---- 1 root disk 43, 35 Jan  9 14:28 /dev/nbd1p3
brw-rw---- 1 root disk 43, 36 Jan  9 14:28 /dev/nbd1p4
brw-rw---- 1 root disk 43, 37 Jan  9 14:28 /dev/nbd1p5
brw-rw---- 1 root disk 43, 38 Jan  9 14:28 /dev/nbd1p6
brw-rw---- 1 root disk 43, 39 Jan  9 14:28 /dev/nbd1p7

Create mount points for the new filesystems:

jemurray@home-server:~/ib$ mkdir p1
jemurray@home-server:~/ib$ mkdir p2
jemurray@home-server:~/ib$ mkdir p3
jemurray@home-server:~/ib$ mkdir p4
jemurray@home-server:~/ib$ mkdir p5
jemurray@home-server:~/ib$ mkdir p6
jemurray@home-server:~/ib$ mkdir p7

Attempt to mount each individual directory:

jemurray@home-server:~/ib$ sudo mount /dev/nbd1p1 ./p1
mount: /home/jemurray/ib/p1: WARNING: device write-protected, mounted read-only.

jemurray@home-server:~/ib$ sudo mount /dev/nbd1p2 ./p2
mount: /home/jemurray/ib/p2: WARNING: device write-protected, mounted read-only.

jemurray@home-server:~/ib$ sudo mount /dev/nbd1p3 ./p3
NTFS signature is missing.
Failed to mount '/dev/nbd1p3': Invalid argument
The device '/dev/nbd1p3' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

jemurray@home-server:~/ib$ sudo mount /dev/nbd1p4 ./p4
mount: /home/jemurray/ib/p4: WARNING: device write-protected, mounted read-only.

jemurray@home-server:~/ib$ sudo mount /dev/nbd1p5 ./p5
mount: /home/jemurray/ib/p5: WARNING: device write-protected, mounted read-only.

jemurray@home-server:~/ib$ sudo mount /dev/nbd1p6 ./p6
mount: /home/jemurray/ib/p6: WARNING: device write-protected, mounted read-only.

jemurray@home-server:~/ib$ sudo mount /dev/nbd1p7 ./p7
mount: /home/jemurray/ib/p7: unknown filesystem type 'swap'.

Listing files:

jemurray@home-server:~/ib/p1$ ls -al
total 104
drwxr-xr-x 23 root     root      4096 Oct  8 12:42 .
drwxrwxr-x  9 jemurray jemurray  4096 Jan  9 14:31 ..
drwxr-xr-x  2 root     root      4096 Oct  8 12:41 bin
drwxr-xr-x  4 root     root      4096 Oct  8 12:42 boot
drwxr-xr-x  4 root     root      4096 Oct  8 12:41 dev
drwxr-xr-x 29 root     root      4096 Oct  8 12:42 etc
drwxr-xr-x  2 root     root      4096 Oct  8 12:41 home
drwxr-xr-x  7 root     root      4096 Oct  8 12:42 lib
drwx------  2 root     root     16384 Oct  8 12:58 lost+found
drwxr-xr-x  5 root     root      4096 Oct  8 12:41 media
drwxr-xr-x  2 root     root      4096 Oct  8 12:41 mnt