dissect.archive.vma

Module Contents

Classes

VMA

Proxmox VMA.

Device

Extent

DeviceDataStream

Basic buffered stream that provides easy aligned reads.

class dissect.archive.vma.VMA(fh: BinaryIO)

Proxmox VMA.

Parse and provide a readable object for devices in a Proxmox VMA backup file. VMA is designed to be streamed for extraction, so we need to do some funny stuff to create a readable object from it. Performance is not optimal, so it’s generally advised to extract a VMA instead. The vma-extract utility can be used for that.

fh
header
version
uuid
property creation_time: datetime.datetime
blob_data(offset: int) bytes
blob_string(offset: int) str
config(name: str) bytes
configs() dict[str, bytes]
device(dev_id: int) Device
devices() list[Device]
extents() collections.abc.Iterator[Extent]
class dissect.archive.vma.Device(vma: VMA, dev_id: int, name: str, size: int)
vma
id
name
size
__repr__() str
open() DeviceDataStream
class dissect.archive.vma.Extent(fh: BinaryIO, offset: int)
fh
offset
data_offset
header
uuid
size
blocks
__repr__() str
class dissect.archive.vma.DeviceDataStream(device: Device)

Bases: dissect.util.stream.AlignedStream

Basic buffered stream that provides easy aligned reads.

Must be subclassed for various stream implementations. Subclasses can implement:
  • _read(offset, length)

  • _seek(pos, whence=io.SEEK_SET)

The offset and length for _read are guaranteed to be aligned. The only time that overriding _seek would make sense is if there’s no known size of your stream, but still want to provide SEEK_END functionality.

Most subclasses of AlignedStream take one or more file-like objects as source. Operations on these subclasses, like reading, will modify the source file-like object as a side effect.

Parameters:
  • size – The size of the stream. This is used in read and seek operations. None if unknown.

  • align – The alignment size. Read operations are aligned on this boundary. Also determines buffer size.

device
vma