dissect.btrfs.stream#

Module Contents#

Classes#

Stripe

Chunk

ChunkStream

Implements a stream over Btrfs chunks, including basic RAID support.

Extent

ExtentStream

Implement a stream over Btrfs file extents.

Functions#

decode_extent

Decode a compressed extent.

Attributes#

dissect.btrfs.stream.HAS_ZSTD = True#
class dissect.btrfs.stream.Stripe#

Bases: NamedTuple

fh: BinaryIO#
offset: int#
devid: int#
dev_uuid: uuid.UUID#
class dissect.btrfs.stream.Chunk#

Bases: NamedTuple

offset: int#
length: int#
stripe_length: int#
type: dissect.btrfs.c_btrfs.c_btrfs.BTRFS_BLOCK_GROUP#
num_stripes: int#
sub_stripes: int#
data_stripes: int#
stripes: list[Stripe]#
class dissect.btrfs.stream.ChunkStream(btrfs: dissect.btrfs.btrfs.Btrfs)#

Bases: dissect.util.stream.AlignedStream

Implements a stream over Btrfs chunks, including basic RAID support.

Parameters:

btrfs – The filesystem this stream belongs to.

add(offset: int, chunk: dissect.btrfs.c_btrfs.c_btrfs.btrfs_chunk) None#

Add a chunk to the stream.

This will iterate all stripes and link them to the appropriate devices. Allows for missing devices, if the RAID profile allows this.

Parameters:
  • offset – The logical offset to add this chunk for.

  • chunk – The chunk item to add.

class dissect.btrfs.stream.Extent#

Bases: NamedTuple

compression: int#
encryption: int#
disk_offset: int#
disk_length: int#
offset: int#
length: int#
class dissect.btrfs.stream.ExtentStream(fh: BinaryIO, extents: list[Extent], size: int, sector_size: int)#

Bases: dissect.util.stream.AlignedStream

Implement a stream over Btrfs file extents.

Supports compression.

Parameters:
  • fh – The file-like object to read the data from, usually the ChunkStream of the filesystem.

  • extents – The list of extents to open the stream on.

  • sector_size – The sector size of the filesystem, necessary for LZO decompression.

dissect.btrfs.stream.decode_extent(buf: bytes, compression: int, encryption: int, sector_size: int) bytes#

Decode a compressed extent.

Parameters:
  • buf – The extent data to decode.

  • compression – The compression type to decompress from.

  • encryption – The encryption type - currently unused.

  • sector_size – The sector size of the filesystem, necessary for LZO decompression.