package qcow
Support for Qcow2 images
Install
Dune Dependency
Authors
Maintainers
Sources
qcow-0.10.3.tbz
sha256=84e870d21cb91422aa1f75630b7b7f015e58e3885bba8137f9367c230bfe5064
md5=24352d96f3408fcdb2f845a2dec603dc
Description
Please read the API documentation.
Features
- supports
resize
- exposes sparseness information
- produces files which can be understood by qemu (although not in reverse since we don't support many features)
Example
In a top-level like utop:
README
Ocaml support for Qcow2 images
Please read the API documentation.
Features
supports
resize
exposes sparseness information
produces files which can be understood by qemu (although not in reverse since we don't support many features)
Example
In a top-level like utop:
# #require "io-page.unix";;
# #require "mirage-block";;
# #require "mirage-block-ramdisk";;
# #require "qcow";;
# #require "lwt.syntax";;
# lwt t_or_error = Ramdisk.create ~name:"hello" ~size_sectors:1024L ~sector_size:512;;
val t_or_error : [ `Error of Ramdisk.error | `Ok of Ramdisk.t ] = `Ok <abstr>
# let t = Mirage_block.Error.ok_exn t_or_error;;
val t : Ramdisk.t = <abstr>
# module Qcow_on_ramdisk = Qcow.Make(Ramdisk);;
module Qcow_on_ramdisk : sig type page_aligned_buffer = Ramdisk.page_aligned_buffer
type error =
[ `Disconnected | `Is_read_only | `Unimplemented | `Unknown of bytes ]
type 'a io = 'a Ramdisk.io
type t = Qcow.Make(Ramdisk).t
type id = Qcow.Make(Ramdisk).id
val disconnect : t -> unit io
type info =
Qcow.Make(Ramdisk).info = {
read_write : bool;
sector_size : int;
size_sectors : int64;
}
val get_info : t -> info io
val read :
t ->
int64 -> page_aligned_buffer list -> [ `Error of error | `Ok of unit ] io
val write :
t ->
int64 -> page_aligned_buffer list -> [ `Error of error | `Ok of unit ] io
val create : Ramdisk.t -> int64 -> [ `Error of error | `Ok of t ] io
val connect : Ramdisk.t -> t io
val resize : t -> int64 -> [ `Error of error | `Ok of unit ] io
val seek_unmapped : t -> int64 -> [ `Error of error | `Ok of int64 ] io
val seek_mapped : t -> int64 -> [ `Error of error | `Ok of int64 ] io
val rebuild_refcount_table : t -> [ `Error of error | `Ok of unit ] io
val header : t -> Qcow.Header.t
module Debug :
sig
type t = Qcow.Make(Ramdisk).t
type error = error
val check_no_overlaps : t -> [ `Error of error | `Ok of unit ] io
val set_next_cluster : t -> int64 -> unit
end
end
# lwt t_or_error = Qcow_on_ramdisk.create t 1048576L;;
val t_or_error : [ `Error of Qcow_on_ramdisk.error | `Ok of Qcow_on_ramdisk.t ]
= `Ok <abstr>
# let t = Mirage_block.Error.ok_exn t_or_error;;
val t : Qcow_on_ramdisk.t = <abstr>
# let page = Io_page.(to_cstruct (get 1));;
val page : Ramdisk.page_aligned_buffer =
{Cstruct.buffer = <abstr>; off = 0; len = 4096}
# lwt result_or_error = Qcow_on_ramdisk.read t 0L [ page ];;
val result_or_error : [ `Error of Ramdisk.error | `Ok of unit ] = `Ok ()
# lwt ok_or_error = Mirage_block.sparse_copy (module Ramdisk) t (module Ramdisk) t;;
val ok_or_error :
[ `Error of [> `Different_sizes | `Is_read_only | `Msg of bytes ]
| `Ok of unit ] = `Ok ()
Limitations
cluster size is fixed at 64-bits
no support for snapshots
Dependencies (20)
-
ppx_type_conv
build
- ppx_sexp_conv
- ppx_tools
-
jbuilder
>= "1.0+beta10"
-
io-page-unix
>= "2.0.0"
-
fmt
>= "0.8.2"
- logs
- sexplib
- mirage-time-lwt
-
mirage-time
< "2.0.0"
-
mirage-block-unix
>= "2.3.0"
- mirage-block-lwt
-
mirage-block
>= "0.2" & < "2.0.0"
- lwt
-
mirage-types-lwt
>= "3.0.0" & < "3.7.0"
- prometheus
- result
-
cstruct
< "4.0.0"
- astring
-
ocaml
>= "4.03.0"
Dev Dependencies (4)
-
nbd
with-test & >= "2.0.1"
-
ezjsonm
with-test
-
mirage-block-ramdisk
with-test
-
ounit
with-test
Used by (1)
-
qcow-tool
= "0.10.3"
Conflicts
None
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page