Subject: Re: "sector range" driver (was Re: APPLE_UFS on i386?)
To: Bill Studenmund <wrstuden@netbsd.org>
From: Christian Limpach <chris@pin.lu>
List: current-users
Date: 03/29/2003 22:20:53
Quoting Bill Studenmund <wrstuden@netbsd.org>:

> If we're wanting to use it as the kernel side of wedges, we need to do
> something other than refer to "/dev/wd0X" for the source of backing
> blocks. Refering to anything other than the raw partition means we're
> still basing this on partition info, and the point is to move partition
> info out into userland. We also can't refer to the raw partition given the
> current syntax of an offset. The problem with an offset is that it's hard
> (and dangerous) to keep in sync with the partitioning info.

Yes, that's why reading/parsing partition info isn't done by the device 
mapper but by a (possibly userland) library/tool.  There should at least be 
an interface inside the kernel which uses an offset into another device.  If 
we limit this to only raw partitions, then we can't use devices created 
through device mapper as building blocks for other devices.  I see you agree 
to this later.  Also please note that the dmsetup command used in the 
examples from my original mail exposes the kernel interface directly to 
userland and that there are supposed to be more "sophisticated tools".

> What would work is using a partition locator string. The exact format is
> still up in the air, so feel free to comment. But something like, "NDL 4"
> to refer to NetBSD Disklabel partition 4, "APL 5" for Apple Partition Map
> 5, "MBR 0 NDL 2" for partition 2 in the NetBSD disklabel in MBR partition
> 0, or "MBR 3 MBR 2" for an extended MBR partition - partition 2 in the MBR
> in partition 3 of the main MBR.
> 
> The point is to configure based on names/locators for partitions, not
> their locations. That way if another OS repartitions, we don't start
> scribbling on random space.

Ideally partitions should have names ;-)  I use LVM2 from Linux 
as "sophisticated tool" and it gives names to partitions.  

Aren't "MBR 0 NDL 2" and "MBR 3 MBR 2" just names made up from a low-grained 
view of the disk, a fallback when there's no name?  The locator string also 
needs to include the device.  And it should be possible to map the locator 
string into a path to the device nodes which give access to the device.  

Isn't this independent of the device-mapper/libdisklabel issue?  The user of 
libdisklabel has to come up with (and maybe create) a name/path to the device 
node, possibly based on the name stored in the partition.[1]

We could have a device-mapper/libdisklabel based drop-in replacement for the 
partition code in wd/sd/... which uses the names and device nodes we have 
now.  This would run before /etc/rc.d/root and setup the devices.  Maybe 
that's the way to go forward?

> Obviously there would need to be a userland library to read different
> partitioning schemes and supply a list of found partitions that this tool
> would put together into the wedges.

Yes, I think this should move into userland since it's a one-time operation, 
we don't have a dhcp client in the kernel either (but in the bootloader).

-- 
Christian Limpach <chris@pin.lu>

[1] Maybe something like:
/dev/disk0                    [disk raw device]
/dev/pdisk0/part0             [MBR 0]
/dev/pdisk0/ppart0/part2      [MBR 0 NDL 2]
/dev/pdisk0/part3             [MBR 3]
/dev/pdisk0/ppart3/part2      [MBR 3 MBR 2]