Library
Module
Module type
Parameter
Class
Class type
module B : Qcow_s.RESIZABLE_BLOCK
include V1_LWT.BLOCK
type page_aligned_buffer = Cstruct.t
The type for page-aligned memory buffers.
type error = [
| `Unknown of string
an undiagnosed error
*)| `Unimplemented
operation not yet implemented in the code
*)| `Is_read_only
you cannot write to a read/only instance
*)| `Disconnected
the device has been previously disconnected
*) ]
The type for IO operation errors.
type info = {
read_write : bool;
True if we can write, false if read/only
*)sector_size : int;
Octets per sector
*)size_sectors : int64;
Total sectors per device
*)}
Characteristics of the block device. Note some devices may be able to make themselves bigger over time.
val read :
t ->
int64 ->
page_aligned_buffer list ->
[ `Error of error | `Ok of unit ] io
read device sector_start buffers
returns a blocking IO operation which attempts to fill buffers
with data starting at sector_start
. Each of buffers
must be a whole number of sectors in length. The list of buffers can be of any length.
val write :
t ->
int64 ->
page_aligned_buffer list ->
[ `Error of error | `Ok of unit ] io
write device sector_start buffers
returns a blocking IO operation which attempts to write the data contained within buffers
to t
starting at sector_start
. When the IO operation completes then all writes have been persisted.
Once submitted, it is not possible to cancel a request and there is no timeout.
The operation may fail with:
`Unimplemented
: the operation has not been implemented, no data has been written.`Is_read_only
: the device is read-only, no data has been written.`Disconnected
: the device has been disconnected at application request, an unknown amount of data has been written.`Unknown
: some other permanent, fatal error (e.g. disk is on fire), where an unknown amount of 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.
The data will not be copied, so the supplied buffers must not be re-used until the IO operation completes.
create block ~size ?lazy_refcounts ()
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
connect block
connects to an existing qcow-formatted image on block
.
resize block new_size_sectors
changes the size of the qcow-formatted image to be new_size_sectors
512-byte sectors.
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.