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>