Practical File System Design: The Be File System (1999)
nobius.org
nobius.org
The book is terribly dated though and I'm not sure I would recommend it to anyone except as a historical reference. It lacks much of the latest file system research that has gone into things like ZFS and Btrfs.
If you want to go the BFS-like route, then I recommend just accepting the premise and getting a book or other resource on DBMS design, getting one on modern file system design, and then merging the two yourself.
Some of the same leadership that ran that project (Glen Henry) was also respononible for IBM's adoption of Unix.
This IBM Unix system, AIX (1986), was designed to run on another interesting hardware platform, the earliest generation of IBM's RISC hardware PowerPC. Which in turn evolved from IBM's (1975) 801 system (John Cocke--who won the Turing Award in 1987 for invention of RISC) was responsible for the 801. I remember him coming into my office to talk to me about some ideas he had for a high capacity disk drive around 1987 when I was working on AIX.
...nor overall performance, as the benchmarks in chapter 9 show. Apparently BFS is very good at sequential accesses (but then, so is FAT... which has probably become the most popular filesystem in use, especially in embedded devices) but performs poorly for a lot of other operations.
This book also reaffirms a common adage that books with "theoretical" in their title tend to be very practical, and vice-versa... but then again, it was written at a time when a lot of people were betting on BeOS being The Next Big Thing and they never expected the current dominance of Linux and Windows.
Ultimately, it seems the "keep the filesystem simple and build further abstractions inside files" design has lead to the greatest success, because it's more flexible and allows more interoperability --- building too much "intelligence" into the FS, proprietary or otherwise, makes it harder to exchange data with other systems, whereas you can e.g. move or copy a file containing a relational database between systems and operate on it more easily. Filesystem drivers are usually implemented in the OS kernel, and so it makes sense to keep them minimal from a reliability and security perspective.
BeOS was less production ready but a better multitasking media OS than NeXT. NeXT had a longer history but did take a long time (years!) to get ready for consumer use. Which was a better call is hard to say, even in hindsight.
Many, many years passed between the beginning of this sentence and the end. Remember BeIA? Internet appliances were the final bet that actually killed Be.
Operating systems should really have two separate systems, one for user documents and one for low-level persistence (the former probably being built on top of the latter). Programs needing plain persistent storage shouldn't have to pay for nice features at the document level, and we shouldn't have to compromise the user experience of document browsing to get high-performance persistence.
If I were writing a file system from scratch, and I have thought about this, I would make a base layer that did nothing more than provide a hardware independent interface to block devices plus B-tree and PATRICIA index implementation that includes block-level features such as RAID, snapshots, log structured updates, etc.
Then on top of that you can either write a fast DBMS for a BeOS like experience, or a POSIX compatibility layer that makes a more traditional hierarchical interface.
Software that wants to store structured documents without thinking up their own file format can use Core Data, and still get their documents indexed properly. Software that's cross-platform or has to support existing file formats can use regular documents and supply a file metadata/content indexer to Spotlight.
That was the promise of exo-kernels: remove all abstractions from the kernel, leaving only what's required for secure multiplexing of resources, and then let user level libraries handle abstractions and cross-platform concerns.
That includes multiple different file system in user land.
Keep in mind, this was during the era of Microsoft FindFast. FindFast worked by continuously crawling the filesystem, so the extra cost you might be incurring on BFS on-demand was happening in batch mode on Windows at great cost. slocate still works essentially the same way and is widely used on Linux but doesn't really do metadata queries; Beagle and Spotlight do the same thing as FindFast but plug into filesystem notifications to make the reindexing less painful. I don't think it's necessarily an insane idea to make this part of the OS at a lower level, especially in an era when filesystem notifications were kind of a new idea.
As someone who lived through that era, BeOS was always a long-shot. But it was crazy responsive and looked good. I don't think BeOS failed because of technical shortcomings really. BFS was compelling compared to HFS+, FAT32 and ext2 (and it could mount at least FAT and ext2 natively); ext3 and ReiserFS came out around the same time as Be Inc dissolved so journalling was still a significant filesystem differentiator at the time. Whether BFS was relevant to it or not, BeOS had a reputation for being very good at media operations.
Perhaps another example of the "end to end principle"? [1] While the original statement of the principle is over networks, the same seems to apply here .. where a file system is like a network protocol for communicating with the same system over time.
Could you or anyone else recommend a book or other single resource about filesystem design that does include more recent research and concepts?
/s
Could you recommend a recent book on file system design ?
thanks.
In the intervening 17 years, Mr. Giampaolo surely learned new things that invalidated some assumptions in 1999 and/or discovered new demands on file systems that he didn't foresee.
Imo, the intellectual evolution from the vantage point of 2017 & hindsight would be much more interesting than trying to read through a 247 page pdf.
I am hoping Apple releases APFS with the xnu 10.13 code drop.
"Metadata Indexes & Queries in the BeOS Filesystem", by Ivan Richwalski, at Systems We Love.
He explains cool features like extended attributes in files, and search queries whose results are updated in real time.
Web pages are quite large anymore and most can be larger than a PDF when delivering less content, so I don't know if there is a size issue anymore.