:py:mod:`dissect.hypervisor.backup.vma` ======================================= .. py:module:: dissect.hypervisor.backup.vma Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: dissect.hypervisor.backup.vma.VMA dissect.hypervisor.backup.vma.Device dissect.hypervisor.backup.vma.Extent dissect.hypervisor.backup.vma.DeviceDataStream .. py:class:: VMA(fh) 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. .. py:property:: creation_time .. py:method:: blob_data(offset) .. py:method:: blob_string(offset) .. py:method:: config(name) .. py:method:: configs() .. py:method:: device(dev_id) .. py:method:: devices() .. py:method:: extents() .. py:class:: Device(vma, dev_id, name, size) .. py:method:: __repr__() Return repr(self). .. py:method:: open() .. py:class:: Extent(fh, offset) .. py:method:: __repr__() Return repr(self). .. py:class:: DeviceDataStream(device) Bases: :py:obj:`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. :param size: The size of the stream. This is used in read and seek operations. None if unknown. :param align: The alignment size. Read operations are aligned on this boundary. Also determines buffer size.