Qcow.MakeSourcemodule B : Qcow_s.RESIZABLE_BLOCKinclude Mirage_block.SThe type for block errors.
The type for write errors.
pp_write_error is the pretty-printer for write errors.
The type representing the internal state of the block device
Disconnect from the device. While this might take some time to complete, it can never result in an error.
Query the characteristics of a specific block device
read device sector_start buffers reads data starting at sector_start from the block device into buffers. Ok () means the buffers have been filled. Error _ indicates an I/O error has happened and some of the buffers may not be filled. Each of elements in the list buffers must be a whole number of sectors in length. The list of buffers can be of any length. Some implementations may further require that each element in buffers is exactly sector_size long.
write device sector_start buffers writes data from buffers onto the block device starting at sector_start. Ok () means the contents of the buffers have been written. Error _ indicates a partial failure in which some of the writes may not have happened.
Once submitted, it is not possible to cancel a request and there is no timeout.
The operation may fail with: `Is_read_only: the device is read-only, no data has been written.
Each of buffers must be a whole number of sectors in length. The list of buffers can be of any length. Some implementations may further require that each element in buffers is exactly sector_size long.
The data will not be copied, so the supplied buffers must not be re-used until the IO operation completes.
val create :
B.t ->
size:int64 ->
?lazy_refcounts:bool ->
?cluster_bits:int ->
?config:Config.t ->
unit ->
(t, write_error) result Lwt.tcreate block ~size ?lazy_refcounts ?cluster_bits ?config () initialises a qcow-formatted image on block with virtual size size in bytes.
By default the file will use lazy refcounts, but this can be overriden by supplying ~lazy_refcounts:false. By default the file will use 64KiB clusters (= 16 bits) but this can be overridden by supplying ?cluster_bits. Note the cluster size must be greater than the sector size on the underlying block device.
The ?config argument does not affect the on-disk format but rather the behaviour as seen from this client.
connect ?config block connects to an existing qcow-formatted image on block.
val resize :
t ->
new_size:int64 ->
?ignore_data_loss:bool ->
unit ->
(unit, write_error) result Lwt.tresize block new_size_bytes ?ignore_data_loss changes the size of the qcow-formatted image to new_size_bytes, rounded up to the next allocation unit. This function will fail with an error if the new size would be smaller than the old size as this would cause data loss, unless the argument ?ignore_data_loss is set to true.
type compact_result = {copied : int64;number of sectors copied
*)refs_updated : int64;number of cluster references updated
*)old_size : int64;previous size in sectors
*)new_size : int64;new size in sectors
*)}Summary of the compaction run
val compact :
t ->
?progress_cb:(percent:int -> unit) ->
unit ->
(compact_result, write_error) result Lwt.tcompact t () scans the disk for unused space and attempts to fill it and shrink the file. This is useful if the underlying block device doesn't support discard and we must emulate it.
discard sector n signals that the n sectors starting at sector are no longer needed and the contents may be discarded. Note the contents may not actually be deleted: this is not a "secure erase".
seek_unmapped t start returns the offset of the next "hole": a region of the device which is guaranteed to be full of zeroes (typically guaranteed because it is unmapped)
seek_mapped t start returns the offset of the next region of the device which may have data in it (typically this is the next mapped region)
rebuild_refcount_table t rebuilds the refcount table from scratch. Normally we won't update the refcount table live, for performance.
val check :
B.t ->
(check_result,
[ Mirage_block.error
| `Reference_outside_file of int64 * int64
| `Duplicate_reference of (int64 * int) * (int64 * int) * int64
| `Msg of string ])
result
Lwt.tcheck t performs sanity checks of the file, looking for errors. The error `Reference_outside_file (src, dst) means that at offset src there is a reference to offset dst which is outside the file. The error `Duplicate_reference (ref1, ref2, target) means that references at both [ref1] and [ref2] both point to the same [target] offset.
flush t flushes any outstanding buffered writes