Crate qcow

Source
Expand description

A library for working with qcow (version 1, 2, and 3) files.

§Example

// open qcow
let qcow = qcow::open(PATH).unwrap();

// print out list of snapshots in the qcow
for snapshot in qcow.snapshots() {
    println!(
        "Snapshot {:?}: {:?} (size = {})",
        snapshot.unique_id,
        snapshot.name,
        snapshot.vm_state_size
    );
}

// create a reader for accessing the virtual hard disk
let mut file = BufReader::new(File::open(PATH)?);
let qcow2 = qcow.unwrap_qcow2();
let mut reader = qcow2.reader(&mut file);

// read the first 10 bytes of the virtual hard disk
let mut buf = [0; 10];
reader.read_exact(&mut buf)?;

§Important types/functions

§Features

  • Parse qcow files
  • Full qcow version 1 support
    • Support for parsing the header and some associated data
  • Full qcow version 2-3 support
    • Header parsing, including extra version 3 header data
    • Header extension parsing, allowing you to use addition data they provide
    • Lookup table (L1 and L2) parsing, only loading L2 tables on demand
    • Snapshot parsing, including snapshot L1 lookup tables
    • Support for reading the contents of the virtual disk
      • Includes compression support (for both zlib and zstd)
      • Cluster lookup caching, backtracking on cache miss
      • Allows arbitrary seeking within the guest

Modules§

  • Module for types pertaining to QCOW header extensions
  • Types used for parsing the 2-level indexing of clusters that allows qcow to sparsely store virtual drive contents.
  • Module containing structs specific to the legacy QCOW v1 format

Structs§

  • Bitmask of auto-clear features. An implementation may only write to an image with unknown auto-clear features if it clears the respective bits from this field first.
  • Bitmask of compatible features. An implementation can safely ignore any unknown bits that are set.
  • Bitmask of incompatible features. An implementation must fail to open an image if an unknown bit is set.
  • Parsed representation of a v1 qcow file (legacy)
  • Parsed representation of a qcow2 file.
  • Top-level header of Qcow format
  • A reader for reading from the guest virtual drive. Should be constructed using Qcow2::reader.
  • An entry in the snapshot table representing the system state at a moment in time
  • Optional extra snapshot data that comes from format updates
  • Represents the time a snapshot was taken in the form of seconds, nanoseconds. The nanoseconds represent the sub-second time of the snapshot.
  • Part of header only present in Qcow version 3

Enums§

  • Compression type used for compressed clusters.
  • An enum representing a qcow of any version
  • Encryption method (if any) to use for image contents.
  • An error encountered by the qcow crate from either a parsing failure or an I/O error.

Functions§

  • Read a qcow or qcow2 file from a reader
  • Read a qcow or qcow2 file from a slice
  • Open a qcow or qcow2 file from a path