R.J.T.Morris, B.J.Truskowski. IBM SYSTEMS JOURNAL, VOL42, NO2, 2003
该文献对存储系统的发展进行了全面回顾,从存储介质-磁盘、存储系统的结构、人类社会信息增长的规律都进行了讨论。论文数据充实,观点精辟,高瞻远瞩。
2. The UNIX time-sharing system
Dennis M. Ritchie and Ken Thompson. ACM Symposium on Operating Systems Principles Yorktown Heights, N.Y.: October, 1973
这篇论文是UNIX操作系统的最经典文献,发表于1973年。入选ACM具有里程碑意义的25篇经典文献之一。 该文献奠定了现代UNIX操作系统的基本结构,包括文件系统的结构与功能。
早期的计算机系统主要用于事务处理和科学计算,文件系统的功能也主要是管理结构化的数据。从现代的观点看,其功能是数据库和文件系统的混合。在当时不同操作系统提供的文件访问API都是不兼容的。
该论文首次提出以“流”的方式来实现文件的访问,提供了极大的灵活性,从此奠定了现代文件系统的基本结构、功能和接口。
阅读这篇文献, 不得不为大师们的智慧、深邃的洞察力和远见而叹服。
3. A Fast File System for UNIX (FFS)
Marshall Kirk McKusick, William N. Joy. etc . ACM Transactions on Computer Systems, Vol. 2, No. 3, August 1984, Pages 181-197.
FFS 是最早注重于性能优化的文件系统(文件系统于1980年发布),可以认为是现代文件系统的鼻祖。在FFS之前,UNIX系统使用的是面向PDP-11设计的文件系统,磁盘分配的单位为512字节,系统性能低下,吞吐量只有磁盘带宽的2-4%,而且不够可靠。虽然Berkeley在1978年设计了fsck来修复文件系统,通过把磁盘块增加到1K,将性能提高了2倍,但仍然未彻底解决性能问题。
FFS中提出的很多思想、方法至今仍在使用。为了提高性能,FFS将磁盘分配单位block大幅提高到4K;同时为了减少内碎片导致的空间浪费,提出了fragment方法,将一个block分割为多个固定大小的fragment,对于小块数据给其分配fragment,而不是block。
为了减少磁头寻道时间,FFS将磁盘划分为block group(块组),每个 BG包含superblock,inode,data block;一个文件的inode和data尽可能分配到同一个BG中,从而能够减少读取文件时磁头移动的距离。其它改进有支持长文件名,quota等。
由于现代硬盘对外接口中已经屏蔽了硬件结构的细节,因此将多个磁盘划分为块组的方法已不能再用以减少磁头寻道时间,但是将磁盘划分为多个单位(有些文件系统称为 Allocation Group)的做法目前仍然被普遍采用,它可以增加关键数据的冗余,提高可靠性;减少磁盘管理的时间、空间复杂度;提高磁盘控制数据访问的并发性(多个AG可以并发访问)。
4. A Case for Redundant Arrays of Inexpensive Disks (RAID)
David A. Patterson, Garth A. Gibson and Randy H. Katz. Proceedings of the International Conference on Management of Data (SIGMOD), June 1988
RAID技术是计算机科学与技术领域在80年底最重要的成果之一。通过组织多个磁盘协调工作实现并发访问和数据冗余,极大地提高了磁盘子系统的性能和可靠性。
David A. Patterson因该项成果而无愧于计算机科学大师地位。
5. The Design and Implementation of a Log-Structured File System (LFS)
MENDEL ROSENBLUM, JOHN K. OUSTERHOUTLFS. ACM Transactions on Computer Systems, Vol 10, No. 1, February 1992, Pages 26-52
回首文件系统发展历程,可以看到在80年底末、90年代初期兴起了文件系统可靠性研究的热潮,其成果主要为RAID、日志文件系统(即在文件系统中加入日志来提高系统可靠性和可用性)、日志结构文件系统(将整个文件系统作为日志来实现!)
LFS第一次提出将文件系统作为日志来实现!虽然数据库大师、图灵奖获得者Jim Gray早在1981年已指出“ Update in place is an poison apple”,但在文件系统领域,LFS却是第一次真正尝试用这种思想来设计文件系统。
作为文件系统,LFS本身是不完善的,有一些问题未得到有效解决,因此在实践中未得到普遍使用。LFS的思想在2000年后才真正焕发光彩!WALF、ZFS都采用了LFS的思想和方法。
有兴趣者可以阅读该论文。
6. Scalability in the XFS file system
Adam Sweeney. Proceedings of the USENIX 1996 Annual Technical Conference
San Diego, California, January 1996
XFS是90年代中期 Silicon Graphic公司面向高性能计算机开发的优秀的文件系统,后来被移植到Linux系统。XFS迄今仍在大量使用,国内很多存储产品就是基于该文件系统。
XFS是64位文件系统,因此可以管理极大的磁盘空间和数据。XFS在设计时充分考虑了系统的可扩展性,大量采用B+树结构来组织管理数据,如目录;结合B+树和“extent”管理磁盘空间、文件数据块等;基于文件的方式管理inode,因此文件系统可以动态扩展。
XFS大量使用缓存技术来提高每次写入磁盘的数据量(延迟高达30s),以减少磁盘寻道时间并提高系统吞吐量。
7. File System Design for an NFS File Server Appliance (WAFL)
Dave Hitz, James Lau, and Michael Malcolm. Technical Report 3002, USENIX Winter 1994 — San Francisco, California
NetApp是全球NAS存储系统的第一品牌,其制胜法宝就是“WAFL”文件系统。
WAFL 是针对network file server而设计、定制的文件系统。其根本特征是“Redirect on write”,既当文件被改写时,新数据写入到新的磁盘位置,而不覆盖旧数据。其带来的直接益处有:
l 能够非常高效地支持“Snapshot”,可以创建任意多的快照而不影响文件系统的性能;
l 由于数据总是写入到新的位置,因此可以将新数据一次写入到磁盘的连续存储空间中,可以优化写性能;对于随机写入,性能提升效果更加显著;
从公开文献看,WAFL是最早利用日志结构文件系统来实现高效支持Snapshot的文件系统。
据说WAFL的设计人员出自于SUN公司,这也能够解释为什么SUN公司后来推出的ZFS和WAFL如此相似。
8. The Zettabyte File System(ZFS)
Jeff Bonwick, Matt Ahrens, Val Henson, Mark Maybee, Mark Shellenbaum. 2002.
可以毫不夸张地说,ZFS是现代文件系统的“王冠”,前无古人,后无来者(本人斗胆猜测15年之内无出其右者。目前热炒的ext4,brtfs等至多也只能是ZFS的模仿而已)。ZFS文件既是几十年来文件系统优秀技术的集大成者,更是一次彻底的颠覆和重生。
其主要特色包括:
l ZFS设计了全新的文件系统的结构,高效整合了卷管理功能和RAID功能,极大地简化了系统管理(在Linux下使用过RADI、LVM的人对此将有深切体会);而文件系统结构本身却变得更加清晰、精简,其代码量还不到Linux LVM模块的1/5;
l 能够自动检测并修改文件数据的损坏;对文件系统的元数据实现冗余保护;采用“Redirect on write”方式来组织数据,能够非常高效地创建快照。为数据提供了最全面的保护。
l 128位文件系统,可以管理高达258 ZB数据!(每个 ZB 为 270字节);
l 基于更加智能的预读(Prefetch)和cache管理策略、为同步写提供了专门优化支持(ZIL),以及“Redirect on write”带来的写合并优化等,ZFS具有最优秀的性能。
ZFS目前已被移植到Linux(2010年9月15日)。强烈建议技术爱好者对代码进行学习研究。