package qcow-tool
A command-line tool for manipulating qcow2-formatted data
Install
Dune Dependency
Authors
Maintainers
Sources
qcow-0.11.0.tbz
sha256=563a2cc10c79055b6d57111592bc6f1445397cf5ef57e74f70f5e1ca6ec23807
sha512=4ab055332f964dff2c00d04a3f867b7fc86a9a6084f6d58bce59c04a6ed6f23aefe8965eb1c9c1ff4372393235b8920135409fd2f94a253493d8533a39d7d6bd
Description
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 (17)
- io-page
- astring
-
fmt
>= "0.8.2"
- logs
- sexplib
-
sha
>= "1.10"
- mirage-time
-
mirage-block-unix
>= "2.9.0" & < "2.13.0"
-
mirage-block
>= "2.0.0"
- lwt
-
mirage-types-lwt
>= "2.6.0" & < "3.7.0"
- unix-type-representations
- result
- cstruct
- cmdliner
-
qcow
= version
-
ocaml
>= "4.03.0"
Dev Dependencies (3)
-
ezjsonm
with-test
-
mirage-block-ramdisk
with-test
-
ounit
with-test
Used by
None
Conflicts
None
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page