Signed-off-by: Chen Hanxiao <chenhanxiao@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