:py:mod:`dissect.hypervisor.backup.xva` ======================================= .. py:module:: dissect.hypervisor.backup.xva Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: dissect.hypervisor.backup.xva.XVA dissect.hypervisor.backup.xva.XVAStream Attributes ~~~~~~~~~~ .. autoapisummary:: dissect.hypervisor.backup.xva.BLOCK_SIZE .. py:data:: BLOCK_SIZE .. py:class:: XVA(fh) XVA reader. XenCenter export format. Basically a tar file with "blocks" of 1MB. .. py:property:: ova .. py:method:: disks() .. py:method:: open(ref, verify=False) .. py:class:: XVAStream(xva, ref, size, verify=False) Bases: :py:obj:`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.