dissect.archive.xva

Module Contents

Classes

XVA

XVA reader.

XVAStream

XVA stream.

Attributes

dissect.archive.xva.BLOCK_SIZE = 1048576
class dissect.archive.xva.XVA(fh: BinaryIO)

XVA reader.

XenCenter export format. Basically a tar file with “blocks” of 1MB.

tar
property ova: xml.etree.ElementTree.Element
disks() list[str]
open(ref: str, verify: bool = False) XVAStream
class dissect.archive.xva.XVAStream(xva: XVA, ref: str, size: int, verify: bool = False)

Bases: dissect.util.stream.AlignedStream

XVA stream.

XenServer usually just streams an XVA file right into an output file, so our use-case requires a bit more trickery. We generally don’t stream directly into an output file, but try to create a file-like object for other code to use.

The numbers for the block files (weirdly) don’t represent offsets. It’s possible for a block file to be 0 sized, in which case you should “add” that block to the stream, and continue on to the next. The next block might have a number + 1 of what your current offset is, but it will still contain the data for that current offset. For this reason we build a lookup list with offsets.

xva
ref
verify = False