在此节选了网络 上的两篇关于2.6内核文件系统的文章, 并附上本人截下的几副图, 用于2.4与2.6相比较 Linux 2.6内核的精彩世界 Joseph Praneich 文件系统 Li" name="description" />
javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)"> | ||||
在此节选了网络上的两篇关于2.6内核文件系统的文章, 并附上本人截下的几副图, 用于2.4与2.6相比较
Linux 2.6内核的精彩世界 |
文件系统
Linux(或其他一些系统)下块设备的最常见用法是在块设备上面建立一个文件系统。相对Linux 2.4而言,Linux 2.6对于文件系统的支持在很多方面都有大的改进。关键的变化包括对扩展属性(extended attributes)以及POSIX标准的访问控制(aclearcase/" target="_blank" >ccess controls)的支持。
EXT2/EXT3文件系统作为多数Linux系统缺省安装的文件系统,是在2.6中改进最大的一个。最主要的变化是对扩展属性的支持,也即给指定的文件在文件系统中嵌入一些元数据(metadata)。一些扩展属性被系统使用,只能由root用户进行读写。很多其他操作系统,如Windows和MacOS系统已经大量地使用了这种扩展属性。不幸的是,UNIX系的操作系统一般都还没有很好地支持扩展属性,很多用户级的程序(比如tar)需要进行更新才能保存和转储这些扩展属性信息。这是Linux成长的又一方面;Linux对扩展属性的支持正在成熟。
新的扩展属性子系统的第一个用途就是实现POSIX访问控制链表。POSIX访问控制是标准UNIX权限控制的超集,支持更细粒度的访问控制。必要的话(比如从NFS输出文件的时候),这些访问控制可以被映射到标准的user/group权限控制上。除了以上,EXT3还有其他一些小的变化。文件系统日志提交(commit)的时间能够进行调整得更加适合于笔记本电脑(处于省电模式时,可能会加速驱动器);缺省的加载选项可以保存在文件系统自身之中(这样不用每次加载时都输入加载选项);可以标记一个目录为"indexed"以加速在这个目录中的文件查找。
Linux对文件系统层还进行了大量的改进以兼容PC机的主流操作系统。首先,Linux 2.6支持Windows的逻辑卷管理器(即动态磁盘Dynamic Disks)。这个是Windows XP及后续版本中新的分区表机制,能够很方便的支持多分区系统中的分区大小的调整以及新分区的创建。(当然,Linux系统不一定会马上使用这一机制)其次,Linux 2.6对NTFS文件系统的支持也进行了重写,现在能以读/写模式安装一个NTFS卷。写支持仍处于试验阶段,在逐步改进;最终的内核发布版中可能含有也可能不含有写支持这一部分。最后,Linux对FAT12(很老的系统或软盘上使用的DOS文件系统)的支持中消除了使用一些MP3播放器时所遇到的bug。跟踪PC领域的其他一些技术将一直是Linux核心向前发展的一个重要环节。
文件系统部分在与其他操作系统的兼容性方面也有改进。对HPFS文件系统(OS/2和其他系统中使用)的扩展属性的支持有了改进。OS/2风格的扩展属性被分离到另一个的名字空间中。XFS文件系统也得到了更新,以达到与IRIX操作系统的磁盘级(on-disk)兼容。
此外,Linux文件系统中还有很多分散的变化。配额(quota)管理进行了重写以便系统可以支持更多的用户;用户可以标记目录为同步,从而所有变化(增加文件等)都是原子的(这一点对于邮件系统和基于目录的数据库系统尤为重要,而且在磁盘故障的恢复方面也更好一些);透明压缩功能(仅Linux支持的扩展)被加到ISO9660文件系统(CD-ROM中使用)中。最后,一个新的基于内存的文件系统(hugetlbfs)被创建;创建该文件系统旨在更好地支持基于共享内存的数据库。
网络文件系统
Linux对网络文件系统的支持构建在Linux健壮的网络协议支持之上,它也同样健壮。安装或者输出(export)一个网络文件系统,是需要内核直接参与的为数不多的几个上层网络相关操作之一。(另外比较明显的还有对于网络块设备的支持,在2.6中没有特别大的改变,并且也只是在类似文件系统操作的特定应用中使用。)所有其他的网络相关操作都可以被放到用户空间去,而不需要核心开发人员去考虑。
在Linux和类UNIX世界中,最普遍的网络文件系统是一个名为Network File System的文件系统,简称NFS。
NFS是一个复杂的文件共享协议,跟UNIX特别是Sun Solaris有相当深厚的渊源。可以使用TCP或UDP作为NFS的主要传输协议,但也需要其他一些子协议,这些协议又各自运行在RPC(远程过程调用)协议之上。这其中包括独立的用于认证的mount协议以及用于文件锁的NLM(network lock manager)。(通常的实现版本同时也跟其他一些基于RPC的协议紧密地结合在一起,比如用于身份验证的NIS-网络信息服务--用于认证。NIS在Linux机器上没有得到广泛应用,主要因为它缺乏安全性。)可能正是因为NFS协议如此的复杂性,才没有被作为"Internet协议"广泛接受。
Linux 2.6中,NFS文件系统得到了很大的更新和改进。最大的改进就是实验性地支持新的并且还没有被广泛接受的NFSv4协议(以前的linux版本支持NFS2和NFS3两种协议)在客户端和服务器端的实现。新的版本有更强、更安全的身份认证(采用加密技术),支持更智能化的锁管理,支持伪文件系统等。Linux还没有实现所有NFS4的新特征,但是目前的版本已经比较稳定并且能够支持一些产品级的应用。并且,基于Linux的NFS服务端的实现已得到改进,从而具有了更好的扩展性,更好的完整性(支持UDP还支持TCP),更健壮(文件系统在输出文件的时候能够进行调整以维持它们自有的一些特征),更简便的管理(通过新的nfsd文件系统,而不再是系统调用)。还有其他方面的一些改进,比如分离lockd和nfsd,支持零拷贝传输等。NFS客户端也因为底层RPC协议在缓存机制、UDP连接控制以及其他在TCP协议上的改进而受益。Linux支持NFS共享卷作为根文件系统的功能也因为核心对TCP协议上的NFS的改进而改进。
除了改进对UNIX风格的网络文件系统的支持,Linux 2.6对于Windows类型的网络文件系统的支持也进行了改进。Windows服务器(也包括OS/2和其他一些操作系统)的标准共享文件系统是遵循SMB(server message block)协议的,Linux核心在SMB协议的客户端对该协议的很多版本都已经有了非常优秀的支持。然而,Windows2000将SMB协议的一个超集的升级版标准化了,即熟知的CIFS("common internet filesystem")。CIFS修改的主要目的是简化与精炼SMB协议中一些比较混乱的部分。(注:协议之前的定义很松散,甚至会出现Win95/98/ME版与WinNT/Win2k版不兼容的情况。)CIFS达到了修改的目的,并且增加了UNICODE支持,改善了文件锁,支持硬链接,彻底消除了对NetBIOS的依赖,并给Windows用户增加了一些新的特征。既然Linux用户不打算始终呆在被遗忘的角落(译者注:CIFS是Windows系统提出的标准,之前仅在Windows系统之上有实现),Linux 2.6核心对本地安装CIFS文件系统的部分彻底进行了重写。Linux 2.6现在也支持SMB和CIFS的扩展--SMB-UNIX,该扩展使得Linux可以访问SMB服务器(比如Samba)上的可能存在的非Windows的文件类型(比如设备节点和符号链接)。
尽管现在已经不常见到,但是Linux还是没有完全忘记Novell NetWare用户。Linux 2.6最多允许256个Linux客户端安装同一个使用NCP(NetWare Core Protocol)文件系统驱动的NetWare卷。
Linux 2.6也加入了相对新的一些分布式网络文件系统(即在一个逻辑卷上的文件可以分布在多个节点中)的支持。除了Linux 2.4中引入的CODA文件系统,Linux现在也包含对另两个分布式文件系统:AFS和InterMezzo的支持。AFS,即the Andrew filesystem(如此命名是因为它最初是CMU开发的),特性非常有限,目前只支持读操作。另一个新支持的文件系统InterMezzo(也是CMU开发的)也在Linux2.6中得到支持;它具有一些更为先进的特性,如:无连接操作(工作在客户端的缓存中),适合要求高可用性的应用,在那些应用环境中,需要保证存储区永远可用。同时它也支持保持数据在多个计算机之间(比如笔记本电脑、PDA和桌面电脑)同步的应用。很多对这些新的文件系统提供支持的项目都是在Linux平台上实现的,这也使得Linux能够走在对这些新特性支持的最前面。
Linux 2.6内核新特性比较 |
作者:闫红 余海发 2.文件系统 |