I’ve been thinking a bit about Sun’s ZFS, and can’t make up my mind about one feature. One of many things that ZFS does is allow you to have a single filesystem which spans multiple physical volumes (to the extent that a volume in this era of RAID arrays and virtualizing switches and so on is physical any more). In fact, it allows you to have multiple filesystems sharing the same pool. Making the relationship between filesystems and volumes many-to-many instead of one-to-one offers many of the same resource balancing and sharing advantages for storage that a single SMP machine offers (compared to multiple single-CPU machines) for processors and memory.

Here’s the problem, though: I’m a believer in separate layers providing separate functionality, and in general the task of breaking the ties between physical volumes and the units to which filesystems are bound seems like it belongs in a volume manager (many of which already exist and do this) rather than a filesystem (for which it’s new territory). Certainly, if you find that your filesystem has outgrown the logical volume provided for it by the volume manager you need to have a volume manager capable of adding arbitrary pieces of storage to an existing volume and a filesystem capable of adapting when the volume size changes. The volume-manager hooks that would be necessary to do such things automatically could get a bit complicated, and it’s not clear that growing and shrinking volumes could ever be quite as good as letting filesystems share space on one volume. However, I’m not sure any of this justifies replicating what is essentially volume-manager functionality within a filesystem. If you do it in the volume manager multiple alternative filesystems and things that are not filesystems (e.g. databases) could also benefit. I’ll bet that ZFS even has an internal layer that closely resembles a volume manager, which could potentially expose an API to entities besides the ZFS upper layers if the developers and architects (and the marketing folks who seem to be as much involved as the technical folks in making ZFS decisions) wanted it that way.

I guess I’ve just seen too many people who were supposed to be doing something else try to implement their own private volume manager within that something else. I’ve seen databases do it, I’ve seen several different kinds of projects at EMC do it, and every once in a while someone here at Revivio seems to be thinking of it. Maybe I’m too sensitized to the negatives, and in the one particular case of ZFS it’s actually not a bad idea. Does anyone else have any thoughts on it?

P.S. I’ve reenabled comments without registration. Let’s see if the HotSeat trolls with their short attention spans have lost interest in harassing me on my own site.