Date: Fri, 8 Jul 2016 08:20:26 -0700 From: Maxim Sobolev <sobomax@freebsd.org> To: Dexuan Cui <decui@microsoft.com> Cc: "freebsd-geom@freebsd.org" <freebsd-geom@freebsd.org>, Allan Jude <allanjude@freebsd.org>, ken <ken@freebsd.org>, imp <imp@freebsd.org>, Hongjiang Zhang <honzhan@microsoft.com>, Sepherosa Ziehau <sepherosa@gmail.com> Subject: Re: How to force GEOM to recalculate the free space after the disk is resized? Message-ID: <CAH7qZfsov93YC3_tS=NZ1142zh4-WhdVYN2jnhaPshLqKPbx1A@mail.gmail.com> In-Reply-To: <CO2PR03MB2182532200F6E92F110EBAA1BF3C0@CO2PR03MB2182.namprd03.prod.outlook.com> References: <CO2PR03MB2182532200F6E92F110EBAA1BF3C0@CO2PR03MB2182.namprd03.prod.outlook.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Smells like a bug in the geom_part where it supposed to re-read the partitions and update its internal structures. The reason why it works when you open dev/da1 for writing is because the geom_part provider that is attached to that disk is destroyed and created anew when you close the fd. -Maxim On Fri, Jul 8, 2016 at 5:19 AM, Dexuan Cui <decui@microsoft.com> wrote: > Hi, I have a FreeBSD virtual machine (VM) running on Hyper-V and I'm > testing 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 > space 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 > => 63 83886017 da1 MBR (40G) > 63 83886017 - free - (40G) > [root@decui-bsd11 ~]# diskinfo /dev/da1 > /dev/da1 512 42949672960 83886080 4096 0 > 5221 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 handling 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 > 6527 255 63 > > [root@decui-bsd11 ~]# gpart show /dev/da1 > => 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 > => 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?CAH7qZfsov93YC3_tS=NZ1142zh4-WhdVYN2jnhaPshLqKPbx1A>