[Libguestfs] [PATCH 05/10] resize: calculate location of the partitions of logical partition

Chen Hanxiao chenhanxiao at cn.fujitsu.com
Thu Apr 23 06:14:17 UTC 2015


Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
---
 resize/resize.ml | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/resize/resize.ml b/resize/resize.ml
index 6221254..218eb44 100644
--- a/resize/resize.ml
+++ b/resize/resize.ml
@@ -1131,6 +1131,13 @@ read the man page virt-resize(1).
         []
   in
 
+  (* logical partitions's start have to treat specially.
+   * So we have to split partitions to two parts *)
+  let logical_partitions =
+    List.filter (fun p -> p.p_mbr_p_type = LogicalPartition) partitions in
+  let partitions =
+    List.filter (fun p -> parttype <> MBR || p.p_mbr_p_type <> LogicalPartition) partitions in
+
   let partitions =
     (* Choose the alignment of the first partition based on the
      * '--align-first' option.  Old virt-resize used to always align this
@@ -1146,6 +1153,18 @@ read the man page virt-resize(1).
 
     calculate_target_partitions 1 start ~create_surplus:true partitions in
 
+    let logical_partitions =
+      let start = List.fold_left (
+        fun total p ->
+          match p.p_type with
+            | ContentExtendedPartition -> total +^ p.p_target_start
+            | _ -> total +^ 0L
+      ) 0L partitions in
+
+      (* align logical partitions, too *)
+      let start = roundup64 (start +^ 1L) alignment in
+      calculate_target_partitions 5 start ~create_surplus:false logical_partitions in
+
   let mbr_part_type x =
     match parttype, x.p_part.G.part_num <= 4_l, x.p_type with
     (* for GPT, all partitions are regarded as Primary Partition. *)
-- 
2.1.0




More information about the Libguestfs mailing list