Library
Module
Module type
Parameter
Class
Class type
Block device on top of Lwt_unix
include Mirage_block.S
The type for block errors.
The type for write errors.
val pp_write_error : write_error Fmt.t
pp_write_error
is the pretty-printer for write errors.
Disconnect from the device. While this might take some time to complete, it can never result in an error.
val get_info : t -> Mirage_block.info Lwt.t
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.
val write : t -> int64 -> Cstruct.t list -> (unit, write_error) result Lwt.t
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 really_read : Lwt_unix.file_descr -> Cstruct.t -> unit Lwt.t
val really_write : Lwt_unix.file_descr -> Cstruct.t -> unit Lwt.t
val blkgetsize : string -> Unix.file_descr -> (int64, error) result
blkgetsize path fd
: returns the size of the open block device given by fd
. path
is only used to construct a human-readable error message.
val ftruncate : Lwt_unix.file_descr -> int64 -> unit Lwt.t
ftruncate fd size
: changes the size of the file backed by fd
to size
. This function works on Unix and Windows.
module Config : sig ... end
val connect :
?buffered:bool ->
?sync:Config.sync_behaviour option ->
?lock:bool ->
?prefered_sector_size:int option ->
string ->
t Lwt.t
connect ?buffered ?sync ?lock ?prefered_sector_size path
connects to a block device on the filesystem at path
. By default I/O is buffered and asynchronous. By default the file is unlocked. The size of sectors is choosen automatically for block devices, prefered_sector_size
is used for regular files, the default value is 512
. These defaults can be changed by supplying the optional arguments ~buffered:false
and ~sync:false
~lock:true
val resize : t -> int64 -> (unit, write_error) result Lwt.t
resize t new_size_sectors
attempts to resize the connected device to have the given number of sectors. If successful, subsequent calls to get_info
will reflect the new size.
val flush : t -> (unit, write_error) result Lwt.t
flush t
flushes any buffers, if the file has been opened in buffered mode
seek_unmapped t start
returns the sector offset of the next guaranteed zero-filled region (typically guaranteed because it is unmapped)
seek_mapped t start
returns the sector offset of the next regoin of the device which may have data in it (typically this is the next mapped region)
val discard : t -> int64 -> int64 -> (unit, write_error) result Lwt.t
discard sector n
signals that the n
sectors starting at sector
are no longer needed and the contents may be discarded. Reads following the discard will return zeroes. Note the contents may not actually be irrecoverable: this is not a "secure erase".