转篇各种文件系统的简介,慢慢看看 ^_^
-------------------------
文件系统是建置于储存设备的分割区之上,用以储存文件资料。一个文件系统在使用之前必须先「挂上 (mount)」,将它挂在系统树状目录结构的某个点上。同理,当某个分割区的文件系统不使用时,可以将它「卸下 (umount)」,如此系统会将尚未写入的资料写回去,并将它从系统的树状目录中除去。
所谓「树状目录结构」意指系统文件放置的位置整个看起来就像一棵倒过来的树一样,由最上层的「根目录」开始,其下可以有文件,也可以有目录 (即微软系统中俗称之「资料夹」),而各目录下还可以有子目录与文件,如此一路繁衍,形成状似枝叶茂密的大树。而每个文件在此目录树的位置,就称之为「路径 (path)」。此树状目录结构的文件配置方式是 UNIX 的一大创举,之后影响深远,有许多操作系统都采取这样的设计方式,包括微软的操作系统。而与微软操作系统不同的是,在微软系统中每个储存设备或分割区都以一个英文字母来做代表,例如 A: 是软盘,C: 是硬盘的第一个分割区,而光盘可能是 D: 等等。在 UNIX 的世界中并不采用这样的方式,如前所述,所有建置于储存设备或分割区上的文件系统都是以「挂上」的方式连上整个目录树,因此,目录树上任何一个「子目录」都可以是一个挂入点,而此后系统在做资料存取时,就与系统其它的目录文件存取方式一致。
由于使用前「挂上」与使用后「卸下」的动作在微软的操作系统中都没有,可能造成已用惯微软系统的朋友的不适应。故在 Linux 核心中还支持「自动挂上」与「自动卸下」 (automount) 的功能,在经过适当的设定后,所有的挂上与卸下的动作都可以自动进行,使用上就与微软的系统一般无异。
在 Linux 核心中支持各式各样的文件系统,使得 GNU/Linux 在各种平台间的整合能力极佳。而这些为数众多的文件系统,全部由「虚拟文件系统 (Virtual File System)」管理,它提供了统一的操作接口供系统使用,故系统不需要因操作的文件系统不同而改变其操作方式。在这些文件系统中,属于 UNIX 类的多半都有完整的功能实作,例如文件属性、文件所有人与使用权管理、以及使用者可使用的容量管制 (Quota) 等等。而不属于 UNIX 类 (如微软平台的) 可能就会欠缺某些功能,这是因为该文件系统原本设计上的限制。
Linux 核心所支持的文件系统大至分类如下:
一 .一般文件系统:
这些文件系统很多是在早期的 Linux 核心版本中就有支持的,这之中包含了许多其它操作系统平台的文件系统,包括:
1.ext2:
Ext2 是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的效能极好,对于中小型的文件尤佳,这主要得利于其资料区块快取层的优良设计。其单一文件大小与文件系统本身的容量上限与文件系统本身的资料区块大小有关,在一般常见的 x86 计算机系统中,资料区块最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统的容量上限为 16384GB。但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,因此实际上能使用的文件系统容量最多也只有 2048GB。
2.BSD 平台文件系统:
BSD 平台是另一类的自由 UNIX 操作系统,包括 FreeBSD、NetBSD、OpenBSD 等,其中 FreeBSD 最为常见。其所采用的文件系统称之为 ufs。除了各种 BSD 平台以外,此类的文件系统也用于 SunOS、NextStep 等系统中,但格式稍有不同。以 FreeBSD 的为例,其 ufs 文件系统最大的特色是可以在分割区上在分割子区块,称之为 Slice,每个 Slice 可分别用来建置文件系统,其使用方式就和我们平常在使用分割区一样。此特色使得我们只需准备单一一个磁盘分割区,就可以安装一个完整的 FreeBSD 系统。
3.微软平台文件系统:
微软平台的文件系统包括 msdos (使用于 MS-DOS), vfat (使用于 Win95, Win98, WinMe 等), 与 ntfs (使用于 WinNT 等)。其中 vfat 与 msdos 相当类似,差别只在于 vfat 支持长档名而已。除此之外,Linux 核心还支持 umsdos 文件系统,它可以直接在 msdos 文件系统中规划一块区域来安装 GNU/Linux 操作系统,而无须额外划分割区,这在早期很常见,特别是当计算机的硬盘很小,已安装了 MS-DOS,而无法再重新分割其它分割区时。然而,使用 umsdos 其文件读写效率不好,故不建议将 GNU/Linux 操作系统安装在其上,最好还是使用 ext2。
msdos 与 vfat 很早以前就已支持完整的读写功能,但 ntfs 截至目前为止还只有读的功能而已,写的功能仍在发展中。值得一提的是 vfat 中的 codepage 支持,它可以让 vfat 长档名中使用各国的文字,包括我们台湾常用的 Big5 (其为 cp950)。
4.光盘媒体文件系统:
此类文件系统包括 iso9660 以及最近新开发的 udf, 前者用于一般的 CDROM,后者用于 DVD 片,二者都是只读文件系统。其中 iso9660 还支持了微软的 Joliet 的延伸规格,它可以让 CDROM 的长档名可以内含 Unicode 格式。
5.其它平台文件系统:
以下的文件系统在一般情况下可能较不常用,兹简述如下:
1.minix: 此操作系统是由阿姆斯特丹的 Andrew S. Tanenbaum 教授为教学用所发展的类 UNIX 操作系统。由于是为了教学用,故其功能较为简单阳春。而 Linux 核心在最早期草创阶段,就是在此操作系统上的。
2.hpfs: OS/2 平台的文件系统。
3.hfs: 麦金塔计算机的文件系统。
4.adfs: Acorn Disc 文件系统,用于 ARM Risc PC 的 RiscOS 操作系统上。
5.affs: 用于 Amiga 的 AmigaOS 操作系统上。
6.bfs: 用于 SCO UnixWare 操作系统上,在开机时加载核心文件用。
7.efs: 用于旧的 SGI IRIX 操作系统上。
8.vxfs: 此为 Veritas VxFS 文件系统,用于 SCO UnixWare,也见于 Solaris、HP-UX 及其它操作系统上。
9.qnx4fs: 用于 QNX 4 操作系统。
10.sysv: 用于 SCO, Xenix 及其它商业版 UNIX 操作系统。
二.日志式文件系统:
在之前已提过,由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部卸下后才能进行关机。
如果在文件系统尚未卸下前就关机 (如停电) 时,下次重开机后会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。故这在大型的服务器上可能会造成问题。
为了克服此问题,业界经长久的开发,而完成了所谓「日志式文件系统 (Journal File System) 」。此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回朔追踪。由于资料的写入动作包含许多的细节,像是改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回朔并重整被中断的部分,而不必花时间去检查其它的部分,故重整的工作速度相当快,几乎不需要花时间。
目前在 GNU/Linux 上的日志式文件系统,除了 ext3 之外,其余均为来自业界的贡献,兹简介如后:
1.ext3:
顾名思义,它就是 ext2 的下一代,也就是在保有目前 ext2 的格式之下再加上日志功能。目前它离实用阶段还有一段距离,也许在下一版的核心就可以上路了。
2.reiserfs:
此文件系统为 Threshold Networks、Emusic.com、Bigstorage.com 等公司所支持开发,它目前已完整地与核心 2.4 整合在一起,且发展已接近成熟。其特色除了日志功能以外,其在数量庞大的小文件存取效率相当惊人,在某些情况下可以达到 ext2 文件系统的三至四倍以上。
3.xfs:
此文件系统为 SGI 公司所开发,已移植到 GNU/Linux 系统上,但尚未整合到 Linux 核心中。除了日志功能以外,其最大的特色是高延展性,可以有效率地处理超大型文件。
4.jfs:
此文件系统为 IBM 公司所开发,已移植到 GNU/Linux 系统上,但尚未整合到 Linux 核心中。其主要特色与 xfs 相似。
这些新开发的文件系统如 reiserfs、xfs、及 jfs 除了日志功能较传统的文件系统 (如 ext2、ufs .... 等) 较为进步外,通常还拥有传统文件系统难以达到的能力,例如高处理效率、高延展性等等,这些额外的特色主要来自文件系统内部的数据结构与算法的改进。这类文件系统都使用了平衡树 (balanced tree) 来管理文件资料区块以及硬盘未使用的区块,使得在数量庞大的运作环境下可以显著提升效率,故相当适于大型数据库与资料搜寻的应用场合上。然而 ext3 在设计时就没有使用这些先进的设计,主要是为了与目前的 ext2 兼容之故。
三.网络文件系统:
网络文件系统并非建置在机器本上的储存设备上,而是用以将远程机器的文件系统经由网络联机挂到本身的机器上,使其使用上就与一般的文件系统无异。Linux 核心支持了数种网络文件系统,包括:
1.NFS:
NFS 是此类文件系统的代表,它是由 Sun Microsystems 公司设计发表的,现已成为各 UNIX 系统的标准配备之一。
2.Code (Coda?) 文件系统:
此文件系统与 NFS 类似,但拥有较 NFS 还先进的特色,例如断线操作、安全性认证等。
3.SMB:
此文件系统可以将微软操作系统的「网络芳邻」分享出来的磁盘或文件系统挂上来使用。
4.NCP:
此文件系统可以将 Novell NetWare 的 IPX 分享磁盘挂上来使用。
四.虚拟文件系统:
在 Linux 核心中,有许多文件系统并不是用来存取实际的文件资料。这些文件系统在挂上后,我们可以见到其内部的文件目录,但实际上这些文件目录都不占任何储存设备的储存空间,因为它们根本不是来自任何储存设备,它们都是系统核心所制造出来的文件「影像」。
这么做的目的主要有两个,其一就是用以方便存取系统内部信息。前面我们已说过, UNIX 世界对「文件」的定义相当广泛,只要它们的操作方式与一般文件一样或相近即可。因此,就利用这样概念,将一些系统信息以文件的方式出现在文件系统中,让应用程序可以随时存取使用。由于它们的内容来自核心内部的资料镜像,故只要核心状态改变,它们的内容也会立即改变。
另一个目的为有效率配置系统资源,供应用程序使用。由于应用程序要使用系统资源时,传统的 UNIX 的做法都是去操作系统的设备文件 (device files),因此系统各装置的设备文件必须存在,其对应的装置才能驱动。然而,很多时候我们无法预知系统会有那些装置存在,在大型的系统中会有相当多的装置,但小型的桌上系统则否。如果要考虑所有可能的情况而将所有的系统设备文件都准备好,显然不是件经济的做法。因此,此问题就可以考虑由虚拟文件系统来处理,当系统真的有该项装置并且系统核心也侦测到时,系统核心就会自动产生一个虚拟的设备文件以代表该项装置,如果该装置移除了,该设备档就会消失。
虚拟文件系统随着未来的系统装置越来越复杂、应用越来越多样化而不断增加其种类与普及率。目前 Linux 核心中包含了如下的虚拟文件系统:
1.proc:
用以存取系统核心状态信息。此文件系统同时也出现在许多新设计的 UNIX 系统上,使用相当广泛。其内含的信息包括: 系统资源分配状况、机器硬件组 态、各设备目前的状态、网络系统状态与可调整选项、以及所有执行中的行程 (process) 状态等等。
2.devfs:
用以取代传统的设备文件,使用此文件系统时所有的系统设备文件都会依一定的规则存在于树状目录群中,而且只有该装置存在时才会存在。此为核心 2.4 的新设计,对于大型系统的延展性有相当大的帮助。目前此文件系统尚在开发阶段,在不久的将来将会被广泛使用。
3.devpts:
用于接受外部网络联机 (telnet) 的虚拟终端机端口。每一个外来的网络联机本机都必须要准备一个虚拟终端机端口来处理它,而每个虚拟终端机端口就是一个设备档,故在此情况下使用虚拟文件系统是最佳的解决方式。未来当 devfs 被广泛采用时,devpts 的功能将完全由 devfs 取代。
五.特殊用途文件系统:
此类文件系统在一般应用上的使用机会不大,多半只会在特殊的场合上才会使用,例如嵌入式系统上。目前有越来越多的厂商以 Linux 核心为基础来开发嵌入式装置,而这类装置由于所拥有的储存设备很小 (或甚至完全没有),同时主存储器的容量也相当有限,故往往需要特别设计的文件系统。
目前 Linux kernel 支持下列的特殊用途文件系统:
1.cramfs:
此为 Compressed ROM File System,为只读文件系统,其容量上限只有 256MB,用于嵌入式装置。
2.romfs:
此为非常小的只读文件系统,用于只读的储存媒体。
3.jffs:
此为日志式快闪 (Flash) 文件系统,用于嵚入式装置。
4.tmpfs:
此文件系统可以用来将文件暂时保存在主存储器 (RAM) 中,而且其容量可以随着保存文件的量而增减。
5.ramfs:
此文件系统也用于将文件暂时保存在主存储器中,与 tmpfs 类似。
一是
(High-Performance File System)
高性能文件系统。OS/2的高性能文件系统(HPFS)主要克服了FAT文件系统不适合于高档操作系统这一缺点,HPFS支持长文件名,比FAT文件系统有更强的纠错能力。Windows NT也支持HPFS,使得从OS/2到Windows NT的过渡更为容易。HPFS和NTFS有包括长文件名在内的许多相同特性,但使用可靠性较差。二是UNIX
三是
Novell, Inc是世界上最具实力的网络系统公司,其主要产品NETWARE网络操作系统可将多台个人电脑连接到一个统一的整合了目录,存储,打印,数据库等的网络中。Novell旗下的其他产品包括,在欧洲流行的Linux操作系统 - SUSE, 网络管理软件 - Zenworks, 集成工具,文件目录服务产品等。
个人意见: hpfs OS/2平台的文件系统,unix就是Unix系统 ,novell应该是苹果机了。