Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Jul 2016 12:19:01 +0000
From:      Dexuan Cui <decui@microsoft.com>
To:        "freebsd-geom@freebsd.org" <freebsd-geom@freebsd.org>
Cc:        Allan Jude <allanjude@freebsd.org>, sobomax <sobomax@FreeBSD.org>, ken <ken@FreeBSD.org>, imp <imp@FreeBSD.org>, Hongjiang Zhang <honzhan@microsoft.com>, Sepherosa Ziehau <sepherosa@gmail.com>
Subject:   How to force GEOM to recalculate the free space after the disk is resized?
Message-ID:  <CO2PR03MB2182532200F6E92F110EBAA1BF3C0@CO2PR03MB2182.namprd03.prod.outlook.com>

next in thread | raw e-mail | index | archive | help
Hi, I have a FreeBSD virtual machine (VM) running on Hyper-V and I'm testin=
g Hyper-V's Disk Online Resizing feature. The feature can expand or shrink =
the (virtual) disk capacity of a VM when the VM is running.

There is an issue with gpart or GEOM: after the disk capacity is expanded (=
or shrunk), gpart/GEOM can detect the new bigger capacity, but the free spa=
ce displayed by gpart remained the same unless I open the disk dev file for=
 writing, e.g.,

[root@decui-bsd11 ~]# gpart create -s MBR   /dev/da1
da1 created
[root@decui-bsd11 ~]# gpart show /dev/da1
=3D>      63  83886017  da1  MBR  (40G)
        63  83886017       - free -  (40G)
[root@decui-bsd11 ~]# diskinfo /dev/da1
/dev/da1        512     42949672960     83886080        4096    0       522=
1    255     63

Now I expand the disk from 40GB to 50GB by Hyper-V management tool.

Next, I get the below, i.e., gpart/GEOM detects the new disk capacity, but =
the free space remains the same.
(Note: the first diskinfo failure should be expected: Hyper-V only notifies=
 the VM of the capacity change on the VM's next read or write request, and =
in the VM it seems there is a race condition between the ioctl and the hand=
ling of capacity change. I'll see how this can be fixed.)

[root@decui-bsd11 ~]# diskinfo /dev/da1
diskinfo: /dev/da1: ioctl(DIOCGMEDIASIZE) failed, probably not a disk.
[root@decui-bsd11 ~]# diskinfo /dev/da1
/dev/da1        512     53687091200     104857600       4096    0       652=
7    255     63

[root@decui-bsd11 ~]# gpart show /dev/da1
=3D>      63  83886017  da1  MBR  (50G)
        63  83886017       - free -  (40G)

Now, if I run a program that only does "openat(AT_FDCWD,"/dev/da1",O_WRONLY=
|O_CREAT,0644);", GEOM will detect that the free space is 50GB now and GEOM=
 will pass this info to gpart:

[root@decui-bsd11 ~]# gpart show /dev/da1
=3D>       63  104857537  da1  MBR  (50G)
         63  104857537       - free -  (50G)

I'm not familiar with GEOM.
Can somebody please explain the behavior?

I don't know who exactly maintains GEOM , so I just picked some names from =
"git log geom/" and put you to Cc.  Sorry if this mail bothers you. :-)

Thanks,
-- Dexuan




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CO2PR03MB2182532200F6E92F110EBAA1BF3C0>