Module Block

Block device on top of Lwt_unix

include Mirage_block.S
type nonrec error = private [>
| Mirage_block.error
]
val pp_error : error Fmt.t
type nonrec write_error = private [>
| Mirage_block.write_error
]
val pp_write_error : write_error Fmt.t
type t
val disconnect : t -> unit Lwt.t
val get_info : t -> Mirage_block.info Lwt.t
val read : t -> int64 -> Cstruct.t list -> ( unit, error ) Stdlib.result Lwt.t
val write : t -> int64 -> Cstruct.t list -> ( unit, write_error ) Stdlib.result Lwt.t

Low-level convenience functions

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 ) Stdlib.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 ) Stdlib.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 ) Stdlib.result Lwt.t

flush t flushes any buffers, if the file has been opened in buffered mode

val seek_unmapped : t -> int64 -> ( int64, error ) Stdlib.result Lwt.t

seek_unmapped t start returns the sector offset of the next guaranteed zero-filled region (typically guaranteed because it is unmapped)

val seek_mapped : t -> int64 -> ( int64, error ) Stdlib.result Lwt.t

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 ) Stdlib.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".

val to_config : t -> Config.t

to_config t returns the configuration of a device

val of_config : Config.t -> t Lwt.t

of_config config creates a fresh device from config