sig   val sleep :     float ->     (unit, [> `System of [> `Sleep of float ] * [> `Exn of exn ] ])     Pvem_lwt_unix.Deferred_result.t   module Shell :     sig       val do_or_fail :         string ->         (unit,          [> `Shell of               string *               [> `Exited of int                | `Exn of exn                | `Signaled of int                | `Stopped of int ] ])         Pvem_lwt_unix.Deferred_result.t       val execute :         string ->         (string * string *          [ `Exited of int | `Signaled of int | `Stopped of int ],          [> `Shell of string * [> `Exn of exn ] ])         Pvem_lwt_unix.Deferred_result.t       val status_to_string :         [< `Exited of int | `Exn of exn | `Signaled of int | `Stopped of int ] ->         string     end   val with_timeout :     float ->     f:(unit ->        ('a,         [> `System of [> `With_timeout of float ] * [> `Exn of exn ]          | `Timeout of float ]         as 'error)        Pvem_lwt_unix.Deferred_result.t) ->     ('a, 'error) Pvem_lwt_unix.Deferred_result.t   val make_new_directory :     ?perm:int ->     string ->     (unit,      [> `System of           [> `Make_directory of string ] *           [> `Already_exists | `Exn of exn | `Wrong_access_rights of int ] ])     Pvem_lwt_unix.Deferred_result.t   val ensure_directory_path :     ?perm:int ->     string ->     (unit,      [> `System of           [> `Make_directory of string ] *           [> `Exn of exn | `Wrong_access_rights of int ] ])     Pvem_lwt_unix.Deferred_result.t   type file_info =       [ `Absent       | `Block_device       | `Character_device       | `Directory       | `Fifo       | `Regular_file of int       | `Socket       | `Symlink of string ]   val file_info_to_string : Pvem_lwt_unix.SYSTEM.file_info -> string   val file_info :     ?follow_symlink:bool ->     string ->     (Pvem_lwt_unix.SYSTEM.file_info,      [> `System of [> `File_info of string ] * [> `Exn of exn ] ])     Pvem_lwt_unix.Deferred_result.t   val list_directory :     string ->     [ `Stream of         unit ->         (string option,          [> `System of [> `List_directory of string ] * [> `Exn of exn ] ])         Pvem_lwt_unix.Deferred_result.t ]   val remove :     string ->     (unit,      [> `System of           [> `File_info of string            | `List_directory of string            | `Remove of string ] *           [> `Exn of exn ] ])     Pvem_lwt_unix.Deferred_result.t   val make_symlink :     target:string ->     link_path:string ->     (unit,      [> `System of           [> `Make_symlink of string * string ] *           [> `Exn of exn | `File_exists of string ] ])     Pvem_lwt_unix.Deferred_result.t   type file_destination = [ `Into of string | `Onto of string ]   val copy :     ?ignore_strange:bool ->     ?symlinks:[ `Fail | `Follow | `Redo ] ->     ?buffer_size:int ->     ?if_exists:[ `Fail | `Overwrite | `Update ] ->     src:string ->     Pvem_lwt_unix.SYSTEM.file_destination ->     (unit,      [> `System of           [> `Copy of string            | `File_info of string            | `List_directory of string            | `Make_directory of string            | `Make_symlink of string * string            | `Remove of string ] *           [> `Already_exists            | `Exn of exn            | `File_exists of string            | `File_not_found of string            | `IO of [> `File_exists of string | `Wrong_path of string ]            | `Not_a_directory of string            | `Wrong_access_rights of int            | `Wrong_file_kind of                string *                [> `Block_device                 | `Character_device                 | `Fifo                 | `Socket                 | `Symlink of string ]            | `Wrong_path of string ] ])     Pvem_lwt_unix.Deferred_result.t   val move_in_same_device :     ?if_exists:[ `Fail | `Overwrite | `Update ] ->     src:string ->     Pvem_lwt_unix.SYSTEM.file_destination ->     ([ `Moved | `Must_copy ],      [> `System of           [> `File_info of string | `Move of string ] *           [> `Exn of exn | `File_exists of string ] ])     Pvem_lwt_unix.Deferred_result.t   val move :     ?ignore_strange:bool ->     ?symlinks:[ `Fail | `Follow | `Redo ] ->     ?buffer_size:int ->     ?if_exists:[ `Fail | `Overwrite | `Update ] ->     src:string ->     Pvem_lwt_unix.SYSTEM.file_destination ->     (unit,      [> `System of           [> `Copy of string            | `File_info of string            | `List_directory of string            | `Make_directory of string            | `Make_symlink of string * string            | `Move of string            | `Remove of string ] *           [> `Already_exists            | `Exn of exn            | `File_exists of string            | `File_not_found of string            | `IO of [> `File_exists of string | `Wrong_path of string ]            | `Not_a_directory of string            | `Wrong_access_rights of int            | `Wrong_file_kind of                string *                [> `Block_device                 | `Character_device                 | `Fifo                 | `Socket                 | `Symlink of string ]            | `Wrong_path of string ] ])     Pvem_lwt_unix.Deferred_result.t   type file_tree =       [ `Leaf of string * Pvem_lwt_unix.SYSTEM.file_info       | `Node of string * Pvem_lwt_unix.SYSTEM.file_tree list ]   val file_tree :     ?follow_symlinks:bool ->     string ->     (Pvem_lwt_unix.SYSTEM.file_tree,      [> `System of           [> `File_info of string            | `File_tree of string            | `List_directory of string ] *           [> `Exn of exn | `File_not_found of string ] ])     Pvem_lwt_unix.Deferred_result.t   val error_to_string :     [< `Shell of          string *          [< `Exited of int | `Exn of exn | `Signaled of int | `Stopped of int ]      | `System of          [< `Copy of string           | `File_info of string           | `File_tree of string           | `List_directory of string           | `Make_directory of string           | `Make_symlink of string * string           | `Move of string           | `Remove of string ] *          [< `Already_exists           | `Exn of exn           | `File_exists of string           | `File_not_found of string           | `IO of               [< `Exn of exn                | `File_exists of string                | `Read_file_exn of string * exn                | `Write_file_exn of string * exn                | `Wrong_path of string ]           | `Not_a_directory of string           | `Wrong_access_rights of int           | `Wrong_file_kind of string * Pvem_lwt_unix.SYSTEM.file_info           | `Wrong_path of string ] ] ->     string end