part.c

Written by Neal in 2001, 2002.

Useful if the microkernel / DDE / Xen doesn't export partition devices, but only raw devices.

Neal:

The motivation was to be able to evict the partitioning logic from Mach.

Booting

A similar problem is described in unionfs boot, and needs to be implemented.

Open Issues

Documentation

hurd build without parted

IRC, freenode, #hurd. 2013-09-21

<phcoder> Hello, guys. Is there a way to know where partition starts on
  hurd. E.g. given hd0s1 get "2048 sectors"
<youpi> yes, it's the storeinfo RPC
<youpi> let me find you a pointer
<phcoder> in GRUB 2 files for determining device relations are a mess of
  #if's. I try to split it into logical files and make common logic
  uniform. Current Hurd's logic is completely different and, actually,
  wrong. Same logic is used by Mac OS X part ...
<youpi> phcoder: Mmm, I guess you never got the userland-part.patch
  upstream
<youpi> ah, yes ,you did
<youpi> I mean the find_hurd_root_device function
<youpi> grub was previously using file_get_storage_info
<phcoder> youpi: find_hurd_root_Device/file_get_storage info is about
  translating / -> /dev/hd0s1. Current problem is in step hd0s1 ->
  hd0,msdos1
<youpi> yes, but iirc file_get_storage_info might work for hd0s1 itself
<phcoder> I see, let me try this
<phcoder> youpi: file_get_storage gives offset=0 size=partition size
<youpi> (file_get_storage) damn
<phcoder> and name=hd0s1
<youpi> ah, that might be because we're still using in-kernel partition
  table, instead of the parted partition table
<phcoder> looks like file_get_storage would be useful to get block size
  though
<phcoder> youpi: is parted already used in some cases? Any reliable way to
  check for it? Any way to access kernel partition map? Ioctl? RPC to
  kernel?
<youpi> the parted table is only enabled in the debian installer for
  now. You can set up one for yourself by running e.g. settrans -c
  /tmp/myhd0s1 /hurd/storeio -T typed part:1:device:hd0
<youpi> I don't think there is any ioctl/RPC to get the kernel partition
  table
<phcoder> youpi: is it using Linux partition code with some glue?
<youpi> phcoder: the kernel partition table, yes
<phcoder> youpi: that's bad. it's probably one of the least consistent
  numbering schemes. It would imply that it only worked because only
  simplest cases were ever tested
<youpi> I know
<youpi> that's why we want to migrate to the parted-based partition table
  support
<youpi> (which also brings us much better support than the old linux2.0
  code :) )
<phcoder> youpi: I've looked into code and must say that I dislike what I
  see: partitions handled in ide/ahci/sd/...
<youpi> phcoder: which code?
<phcoder> youpi: gnumach
<youpi> sure, that's not what we want in the end
<phcoder> grep -r start_sect
<youpi> it's just the legacy linux way of doing partition support
<phcoder> Well Linux at least gives a meaningful ioctl
<phcoder> couldn't find any hint of it in gnumach
<youpi> we didn't bother to add one since the parted way is supposed to be
  what we have in the end
<phcoder> youpi: I can't make our code follow sth that might be the case in
  the future
<youpi> why not?
<youpi> that's the way we will go
<youpi> it's not just hypothetic
<youpi> we just can't continue maintaining disk drivers in the kernel
<youpi> so it won't be in the kernel
<phcoder> youpi: if I do then GRUB won't work on current GNU/Hurd anymore
<youpi> can't you also keep the old code?
<youpi> as a fallback when the proper way does not work (yet)
<phcoder> More hairs... :(
<phcoder> How do I check for it? offset == 0 isn't proper as partitions may
  start at 0
<phcoder> but checking than name still refers to partition is probably the
  right way
<youpi> I don't see what you mean
<youpi> (about name)
<phcoder> youpi: I mean that we need a way to know that current code is
  used and not future parted-based code
<youpi> phcoder: I understand that for the offset ==0 thing
<youpi> but I didn't understand the phrase you wrote just after that
<phcoder> youpi: file_get_storage gives back a name. If this name is the
  same as the partition we requested in the first place then it's current
  code
<youpi> ah, ok
<youpi> yes, if the name is the same, it means it's not actually a
  partition
<phcoder> youpi: current gnumach code makes fake devices out of partitions
<youpi> yes
<phcoder> youpi: with settrans command you told, I get num_ints = 0
<youpi> phcoder: odd, I do get information, e.g.:
<youpi> hurd:/tmp# settrans -c /tmp/mysd0s1 /hurd/storeio  -T typed
  part:1:device:sd0
<youpi> hurd:/tmp# storeinfo mysd0s1
<youpi> device (0x200): sd0: 512: 83905: 42959360: 63+83905
<phcoder> storeinfo: myhd0s1: Operation not supported
<youpi> do you actually have an hd0 device?
<phcoder> yes
<phcoder> youpi: I typed parted instead of part
<phcoder> Now it works
<youpi> good :)
<phcoder> youpi: what is expected timeline on migration to part interface?
<youpi> there's no real timeline
<youpi> like everything, it'll happen when somebody actually looks at how
  to achieve it
<youpi> perhaps it'll be easy, perhaps not. IIRC there is still an issue
  with the swapper
<phcoder> youpi: sounds like we're stuck will fallback code for at least
  couple of years
<youpi> possibly, entirely depends on people taking the task
<youpi> if that becomes really pressing at some point, I'll have to do it,
  but of course, I can not magically do everything in a glimpse
<phcoder> youpi: it's not pressing but just be aware that unusual
  partitioning is likely to fail. Probably not huge issue. As to its place
  in our code it's not ideal but it's not the only case of suboptimal
  construction for specific systems (what we had to do because of Linux
  caching is terrifying). I'm not going to make hurd code a scapegot of
  more generic problem
<phcoder> youpi: and since we very rarely drop support this code is
  probably stuck for good
<youpi> as long as it's not used whenever we get to move to parted-based
  partitioning, it's not too bad
<phcoder> youpi: and Mac OS X/Darwin case is even worse. Apparently they
  deprecated their *BSD functions (which probably don't work since they
  don't use BSD labels) without giving any replacement.