[Libguestfs] [PATCH v2 08/13] resize: add function mbr_part_type
Hu Tao
hutao at cn.fujitsu.com
Mon Sep 22 05:49:10 UTC 2014
On Fri, Sep 19, 2014 at 02:21:28PM +0100, Richard W.M. Jones wrote:
> On Fri, Sep 19, 2014 at 03:39:10PM +0800, Hu Tao wrote:
> > Function mbr_part_type returns one of "primary", "extended" and
> > "logical". The type is used by parted when adding partitions.
> >
> > Signed-off-by: Hu Tao <hutao at cn.fujitsu.com>
> > ---
> > resize/resize.ml | 12 +++++++++---
> > 1 file changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/resize/resize.ml b/resize/resize.ml
> > index 2ffd26e..f57b2ff 100644
> > --- a/resize/resize.ml
> > +++ b/resize/resize.ml
> > @@ -50,6 +50,7 @@ type partition = {
> > p_id : partition_id; (* Partition (MBR/GPT) ID. *)
> > p_type : partition_content; (* Content type and content size. *)
> > p_label : string option; (* Label/name. *)
> > + p_part_num: int; (* partition number *)
>
> I don't think it's necessary to store p_part_num in the main
> partitions struct.
>
> Instead you can get to the partition number using:
>
> p.p_part.G.part_num
>
> For example, mbr_part_type could be written:
>
> let mbr_part_type x =
> if x.p_part.G.part_num <= 4 && x.p_type <> ContentExtendedPartition then "primary"
> [etc]
Yes, this works, too.
>
> > + let mbr_part_type x =
> > + if x.p_part_num <= 4 && x.p_type <> ContentExtendedPartition then "primary"
> > + else if x.p_part_num <= 4 && x.p_type = ContentExtendedPartition then "extended"
> > + else "logical" in
> > +
> > (* Now partition the target disk. *)
> > List.iter (
> > fun p ->
> > - g#part_add "/dev/sdb" "primary" p.p_target_start p.p_target_end
> > + g#part_add "/dev/sdb" (mbr_part_type p) p.p_target_start p.p_target_end
> > ) partitions;
>
> The big problem with this is I think it doesn't work properly for GPT.
> GPT has no idea what "extended" is -- such a concept does not exist.
> So if you passed a GPT guest to virt-resize with >= 5 partitions in
> it, then virt-resize will not work.
The type becomes partition name if the partition table is GPT. So this
patch is not a problem.
However, I didn't test the series with GPT partitions, I'll test in v3.
Regards,
Hu
>
> I think you need to check the partition table type somewhere.
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> Fedora Windows cross-compiler. Compile Windows programs, test, and
> build Windows installers. Over 100 libraries supported.
> http://fedoraproject.org/wiki/MinGW
More information about the Libguestfs
mailing list