Hello everyone,
I have studied the VMDK specs over the last few days. I have a bit of a unique use case because we actually want to use VMDK files as the back end for a "normal" (i.e. non-virtual) volume backup application. We chose VMDK because we want these volume backups to be usable by VMWare as virtual disks. We can settle for importable if direct mounting is not possible, but we would like VMware to be able to read the files somehow.
To be clear, we intend to write our own code that creates these VMDK files. I.e. we are not limited by what the SDK supports, but we are limited by what the VMware software can read.
We need these disks to have the following properties:
- split into 2GB files (so that we can store them on most filesystems)
- sparse
- compressed grains
The problem I am facing right now is that it ALMOST seems to be possible to do what I need to do within the file format as specified, but there are some problems. In particular when compression is used.
According to the spec, compression seems to only be supported for streamOptimized files. But these files cannot apparently be split into 2GB parts (the spec says that "These disks are currently used only in the monolithic form.").
But if I ignore this sentence, I could easily create a spec-confirming non-monolithic streamOptimized disk, simply by specifying multiple extents in the descriptor. Is it OK to do this? I.e. could VMware import such a disk?
Alternatively I could create a "twoGbMaxExtentSparse" disk and simply set the metaDataMarker and Compressed flags (bits 16 and 17) in the extent header. Would VMware be able to use those (mount or import)?
I also found a mention on the web "ACE compressed/encrypted sparse extents", but these do not seem to be described in the spec. From the name it seems that these types of extents would be a better match for my use case. Do they exist? If so, is there a format specification?
Any help or pointers would be appreciated.