6.1 文件系统
文件系统是操作系统中实现对文件的组织、管理和存取的一组系统程序和数据结构,或者说它是管理软件资源的软件。对用户来说,文件系统提供了一种便捷的存取信息的方法。
6.1.1 Linux文件系统的基本概念
文件系统是操作系统用来存储和管理文件的方法。从系统角度来看,文件系统对文件存储空间进行组织、分配,并对文件的存储进行保护和检查。从用户角度来看,文件系统可以帮助用户建立文件,并对文件的读、写和删除操作提供保护和控制。
Windows系统在格式化硬盘时会指定格式,如FAT或NTFS。不同的操作系统可能会采用不同的文件系统,例如,MS DOS下的msdos文件系统,Windows的FAT16、FAT32、NTFS等文件系统。
Linux操作系统采用的是ext2或ext3文件系统,目前ext3文件系统是Linux默认的文件系统。ext2文件系统虽然是高效和稳定的,但是,随着Linux系统在关键业务中的应用,这种文件系统的弱点也渐渐显露出来了。因为ext2文件系统是非日志文件系统,这在关键行业的应用是一个致命的弱点。ext3文件系统直接从ext2文件系统发展而来,ext3文件系统带有日志功能,可以跟踪记录文件系统的变化,并将变化内容写入日志。写操作首先是对日志记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,当系统重启时,会根据日志记录来恢复中断前的写操作,而且这个过程费时极短。目前ext3文件系统已经非常稳定可靠,它完全兼容ext2文件系统,用户可以平滑地过渡到一个日志功能健全的文件系统中来。这实际上也是ext3日志文件系统初始设计的初衷。
Linux系统能支持使用许多种类的文件系统,即这些文件系统可以挂接在Linux系统的某一个安装(挂接)点上,并由Linux系统来访问它们。Linux文件系统在Windows中是不能被识别的,但是在Linux系统中则可以挂载Windows的文件系统,Linux目前支持MS-DOS、VFAT、FAT和BSD等格式。如果用户使用的是RedHat或者CentOS,那么不要将NFS格式的文件挂载到Linux下,因为它不支持NFS。虽然有些版本的Linux支持NFS,但不建议使用,因为NFS目前的技术还不成熟。
ext3文件系统为Red Hat/CentOS默认使用的文件系统,除了ext3文件系统外,有些Linux发行版(例如SuSE)默认的文件系统为reiserFS。ext3独特的优点是易于转换,因其很容易在ext2和ext3之间相互转换,故而具有良好的兼容性。ext3的其他优点reiserFS都有,而且还比它做得更好。如高效的磁盘空间利用和独特的搜寻方式都是ext3所不具备的,速度上ext3也不能和reiserFS相媲美。在实际使用过程中,reiserFS也更加安全高效。
reiserFS的优势在于,它是基于B*Tree快速平衡树这种高效算法的文件系统,例如在处理小于1k的文件时比ext3快10倍。再有就是reiserFS空间浪费较少,它不会为一些小文件分配inode,而是打包存放在同一个磁盘块(簇)中;ext2/ext3则是把它们单独存放在不同的簇上。如簇大小为4k,那么2个100字节的文件会占用2个簇,reiserFS则只占用一个。当然reiserFS也有缺点,比如每升级一个版本,都要将磁盘重新格式化一次。
6.1.2 Linux文件系统类型
Linux操作系统支持的文件系统种类繁多,在/lib/modules/2.4.20-8/kernel/fs目录(不同Linux的发行套件和版本,目录的位置和名称可能有所不同)中保存有Linux当前使用的和所支持的文件系统为名称的子目录,这些子目录里是对应文件系统模块的二进制代码。Linux支持的常见文件系统如下。
(1)minix
它是Linux系统最早支持的一种文件系统,虽然本身没有什么特色,能力也有限,但一直被认为是最可靠的文件系统。
(2)xia
minix文件系统的一个修正版,改变了文件名和文件系统大小的限制,但没有增加其他的新特点,一直没有流行起来。
(3)msdos
它是在MS DOS、Windows 3.x和某些OS/2操作系统上使用的一种文件系统,采用8个字符的文件名加上3个字符的扩展名。
(4)umsdos
Linux下的扩展msdos文件系统,支持长文件名、文件所有者、文件权限、链接和设备文件等高级文件属性。允许Linux系统使用普通的msdos文件系统,而无须建立单独的分区。
(5)iso9600
标准CD-ROM文件系统,支持长文件名。
(6)nfs
网络文件系统,允许在多台计算机之间共享文件系统。便于从联网的计算机上使用资源。
(7)hpfs
它是微软LAN Manager中的文件系统,同时也是IBM的LAN Server和OS/2操作系统的文件系统。hpfs能访问较大的硬盘驱动器,并改善了文件系统的安全特性。
(8)sysv
System V和Coherent操作系统在Linux平台上的文件系统。
(9)vfat
Windows 9.x和Windows NT/2000下使用的一种DOS文件系统,其在MS-DOS文件系统的基础上增加了对长文件名的支持。
6.1.3 Linux文件系统的组织方式
不同的操作系统对文件的组织方式不同,所支持的文件系统数量和种类也不一定相同。Linux文件系统的组织方式称作Filesystem Hierarchy Standard(文件系统分层标准,简称FHS),即采用层次式的树状目录结构。在Linux操作系统中把ext2或ext3以及Linux系统所支持的各种文件系统称为逻辑文件系统。由于每一种逻辑文件系统服务于一种特定的操作系统,具有不同的组织结构和文件操作函数,所以Linux系统在传统的逻辑文件系统上增加了一个虚拟文件系统(VFS)的接口,如图6-1所示。
图6-1 Linux文件系统的组织方式
逻辑文件系统按照某种方式对系统中的所有设备,包括字符设备、块设备和网络设备进行统一管理,并为这些设备提供访问接口。虚拟文件系统位于层次结构中的最上层,它是用户与逻辑文件系统的接口,管理系统中各种逻辑文件系统,屏蔽这些逻辑文件系统的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口。对于普通用户而言,感觉不到各种逻辑文件系统之间的差别,可以使用Linux系统的命令来操作其他逻辑文件系统所管理的文件。例如,挂接磁盘上某个分区中Windows操作系统的FAT32逻辑文件系统,并用cp命令复制文件或用vi命令编辑文件等。
在Linux系统中,还有两种特殊的文件系统,即swap和proc文件系统。在安装Linux时,系统会要求用户划分一个swap类型的分区以便挂接swap文件系统。Linux系统与Unix系统一样,在内存与磁盘之间采用交换技术,把内存中长时间不活动的进程交换到swap分区(文件系统)上。这个文件系统安装一般在Linux系统安装过程中自动完成,Linux不支持使用mount命令挂接swap文件系统。对于proc文件系统,也称为伪文件系统或虚拟文件系统,它所表现出来的是/proc目录,但该目录不占用任何磁盘空间,它实际上是Linux内核在内存中所建立的系统内核映像。proc文件系统被用于从内存读取进程的信息,因此,通过它可以让外部环境了解系统内核的执行情况、系统资源的使用情况等。
6.1.4 Linux系统的默认安装目录
按着FHS的要求,Linux系统在安装过程中会创建一些默认的目录。这些默认的目录都有其特殊的功能,不可随便将其更名,以免造成系统的错误。