[openbeosstorage] Partitioning rethink

Howdy folks,

I've been reading over the UDF specs the last few days, and having 
done so (along with just working with the disk_scanner stuff so far), 
I'm starting to feel that our borrowed system of 
session/partition/filesystem differentiation is a bit inaccurate and 
limiting. Here are my thoughts:

+ There is little, if any, real functional difference between 
sessions and partitions, other than their levels in the partitioning 
tree. Both are a contiguous extent on a device containing some sort 
of useful information; sessions are just currently always at level 0, 
partitions at level 1. If there is no actual "session" or 
"partition", we make up a virtual one to get ourselves up to level 2 
where the filesystems all live.

+ Using this system, we're limited to two levels of partitioning. In 
most cases, this is enough. But there are few areas where I'm 
wondering if this will be too limiting:

1. How are we planning on handling extended partitions in intel 
partition maps? Technically, the partitions inside an extended 
partition should be at level 2, and their filesystems at level 3. And 
one should be able to resize extended partitions using the facilities 
we want to provide. Unless I'm missing something, there's no good way 
to accurately express the relationship of extended partitions to 
their child partitions using our current scheme.

2. UDF supports the concept of multiple volumes *and* (I believe; I'm 
still slightly sketchy on this...) multiple partitions in each volume 
at the filesystem level. Now, we don't technically *have* to support 
those features (there are 3 levels of interchange, and only one must 
be supported to be compliant; the lowest level just supports a single 
"partition" in a single "volume"), but I don't really see any great 
reason not too (particularly since most DVD media does not support 
more than a single session with a single track, meaning UDF 
partitions are the only way to support multiple volumes on a single 
DVD). And if we do, say someone puts a UDF volume with multiple 
partitions on a hard disk, inside an intel partition that's inside an 
extended partition (not likely, but plausible)? Our current 
session/partition/filesystem partitioning scheme will fall short of 
describing what's actually going on.

Therefore, it seems reasonable to me to consider switching to a more 
general partitioning scheme that allows for an arbitrary level of 
nested partitions. CD/DVD sessions would be treated as one type of 
partition, as would intel partitions, UDF volumes and partitions, 
etc. Instead of having session/partition/filesystem modules, we'd 
either have just one type of recognizer, or possibly device property 
based recognizers used only at level 0 (a la CD/DVD sessions, where 
the partition data isn't part of the data stream) and data stream 
based recognizers used everywhere else (a la intel partitions, 
iso9660, etc.). Thoughts? 

On a side note, I'm now really excited about supporting UDF in BeOS; 
the format is designed such that we'll be able to burn file 
attributes along with regular file data and still have the files 
accessible from other OSes. And I believe relevant indices could also 
be burned as well. :-)

-Tyler

p.s. In case you're curious, I've emailed you both the ecma standard 
that UDF is a specialization of (incidentally Axel, it turns out that 
this is that "other" standard I was looking at a few meetings ago 
while trying to figure out iso9660 volume set stuff... I had no idea 
at the time it was used by UDF :-). The UDF standard itself is at 
http://www.osta.org
 

Other related posts: