summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--virt-df/virt_df_ext2.ml2
-rw-r--r--virt-df/virt_df_linux_swap.ml2
-rw-r--r--virt-df/virt_df_lvm2.ml30
-rw-r--r--virt-df/virt_df_mbr.ml2
4 files changed, 30 insertions, 6 deletions
diff --git a/virt-df/virt_df_ext2.ml b/virt-df/virt_df_ext2.ml
index 0ea8a25..2d1d1b8 100644
--- a/virt-df/virt_df_ext2.ml
+++ b/virt-df/virt_df_ext2.ml
@@ -27,7 +27,7 @@ open Virt_df
let superblock_offset = 1024L
-let probe_ext2 (dev : device) =
+let probe_ext2 dev =
(* Load the superblock. *)
let bits = dev#read_bitstring superblock_offset 1024 in
diff --git a/virt-df/virt_df_linux_swap.ml b/virt-df/virt_df_linux_swap.ml
index ad56149..afd671f 100644
--- a/virt-df/virt_df_linux_swap.ml
+++ b/virt-df/virt_df_linux_swap.ml
@@ -23,7 +23,7 @@
open Virt_df_gettext.Gettext
open Virt_df
-let probe_swap (dev : device) =
+let probe_swap dev =
(* Load the "superblock" (ie. first 0x1000 bytes). *)
let bits = dev#read_bitstring 0L 0x1000 in
diff --git a/virt-df/virt_df_lvm2.ml b/virt-df/virt_df_lvm2.ml
index a79ec7f..4247dc3 100644
--- a/virt-df/virt_df_lvm2.ml
+++ b/virt-df/virt_df_lvm2.ml
@@ -24,9 +24,33 @@ open Printf
open Virt_df_gettext.Gettext
open Virt_df
-let probe_lvm2 (dev : device) =
- raise Not_found
+let sector_size = 512
+let sector_size64 = 512L
+
+let pv_label_offset = sector_size64
+
+let rec probe_pv dev =
+ try ignore (read_pv_label dev); true
+ with _ -> false
+
+and read_pv_label dev =
+ (* Load the second sector. *)
+ let bits = dev#read_bitstring pv_label_offset sector_size in
+
+ bitmatch bits with
+ | labelone : 8*8 : bitstring; (* "LABELONE" *)
+ padding : 16*8 : bitstring;
+ lvm2_ver : 8*8 : bitstring; (* "LVM2 001" *)
+ uuid : 32*8 : bitstring (* UUID *)
+ when Bitmatch.string_of_bitstring labelone = "LABELONE" &&
+ Bitmatch.string_of_bitstring lvm2_ver = "LVM2 001" ->
+ uuid
+ | _ ->
+ invalid_arg (sprintf "read_pv_label: %s: not an LVM2 physical volume"
+ dev#name)
+
+let list_lvs devs = []
(* Register with main code. *)
let () =
- filesystem_type_register "LVM2" probe_lvm2
+ lvm_type_register "LVM2" probe_pv list_lvs
diff --git a/virt-df/virt_df_mbr.ml b/virt-df/virt_df_mbr.ml
index b9a6cb7..b56189c 100644
--- a/virt-df/virt_df_mbr.ml
+++ b/virt-df/virt_df_mbr.ml
@@ -66,7 +66,7 @@ end
@raise Not_found if it is not an MBR.
*)
-let rec probe_mbr (dev : device) =
+let rec probe_mbr dev =
(* Adjust size to sectors. *)
let size = dev#size /^ sector_size64 in