Linux档案系统中的档案是数据的集合,档案系统不仅包含着档案中的数据而且还有档案系统的结构,所有Linux 用户和程式看到的档案、目录、软连线及档案保护信息等都存储在其中。
基本介绍
- 中文名:Linux档案系统
- 是:数据的集合
- 包含着:档案中的数据
- 介绍:档案系统的结构
创始人
Linus Torvalds
林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)出生于芬兰赫尔辛基市。父亲尼尔斯·托瓦兹(Nils Torvalds)是一名活跃的共产主义者及电台记者。托瓦兹家族属于在芬兰占6%的少数民族芬兰瑞典人。他毕业于赫尔辛基大学计算机科学系,1997年至2003年在美国加州硅谷任职于全美达公司(Transmeta Corporation)参与该公司晶片的code morph技术研发。后受聘于开源码发展实验室(OSDL : Open Source Development Labs,Inc),全力开发Linux核心。现任职于Linux基金会。
基本介绍
很详细地了解某个作业系统的实际工作方式是非常困难的,因为大多数作业系统的原始码都是严格保密的。在以实际使用为目标的作业系统中,让任何人都可以自由获取系统原始码,无论目的是要了解、学习还是修改,这样的系统并不多。本论文的主题就是这些少数作业系统中的一个:Linux。
Linux是一个性能稳定、功能强大、效率高的作业系统。它在功能特性方面与Unix系统相似,同时又具有多任务、多用户、多平台等若干特性。Linux的原始码是开放的,阅读Linux原始码,无疑是深入学习Linux的最好方法。
系统原理
Linux 最早的档案系统是Minix,但是专门为Linux 设计的档案系统——扩展档案系统第二版或EXT2被设计出来并添加到Linux中,这对Linux产生了重大影响。EXT2档案系统功能强大、易扩充、性能上进行了全面最佳化,也是所有Linux发布和安装的标準档案系统类型。
每个实际档案系统从作业系统和系统服务中分离出来,它们之间通过一个接口层:虚拟档案系统或VFS来通讯。VFS使得Linux可以支持多个不同的档案系统,每个表示一个VFS 的通用接口。由于软体将Linux 档案系统的所有细节进行了转换,所以Linux核心的其它部分及系统中运行的程式将看到统一的档案系统。Linux 的虚拟档案系统允许用户同时能透明地安装许多不同的档案系统。
在Linux档案系统中,作为一种特殊类型/proc档案系统只存在记忆体当中,而不占用外存空间。它以档案系统的方式为访问系统核心数据的操作提供接口。/proc档案系统是一个伪档案系统,用户和应用程式可以通过/proc得到系统的信息,并可以改变核心的某些参数。
在Linux档案系统中,EXT2档案系统、虚拟档案系统、/proc档案系统是三个具有代表性的档案系统,本论文试图通过对他们的分析来研究Linux档案系统机制。并且在分析这三种档案系统的基础上对Linux档案系统操作进行了解、研究(本论文选取了open和close两种操作进行研究)。在第二部分中将介绍EXT2档案系统;第三部分论述虚拟档案系统的特点;第四部分简要介绍/proc档案系统;最后,介绍两种具体档案系统操作的实现。
档案系统
在Linux中普通档案和目录档案保存在称为块物理设备的磁碟或者磁带上。一套Linux系统支持若干物理盘,每个物理盘可定义一个或者多个档案系统。(类比于微机磁碟分区)。每个档案系统由逻辑块的序列组成,一个逻辑盘空间一般划分为几个用途各不相同的部分,即引导块、超级块、inode区以及数据区等。
引导块:在档案系统的开头,通常为一个扇区,其中存放引导程式,用于读入并启动作业系统;超级块:用于记录档案系统的管理信息。特定的档案系统定义了特定的超级块;inode区(索引节点):一个档案或目录占据一个索引节点。第一个索引节点是该档案系统的根节点。利用根节点,可以把一个档案系统挂在另一个档案系统的非叶节点上;数据区:用于存放档案数据或者管理数据。
Linux最早引入的档案系统类型是MINIX。MINIX档案系统由MINIX作业系统定义,有一定的局限性,如档案名称最长14个字元,档案最长64M位元组。第一个专门为Linux设计的档案系统是EXT(Extended File System),但目前流行最广的是EXT4。
第二代扩展档案系统由Rey Card 设计,其目标是为Linux 提供一个强大的可扩展档案系统。它同时也是Linux界中设计最成功的档案系统。通过VFS的超级块(struct ext2_sb_info ext2_sb)可以访问EXT2的超级块,通过VFS的inode(struct ext2_inode_info ext2_i)可以访问EXT2的inode。
档案系统EXT2的原始码在/usr/src/linux/fs/ext2目录下,它的数据结构在档案/usr/src/linux/include/linux/ext2_fs.h以及同一目录下的档案ext2_fs_i.h和ext2_fs_sb.h中定义。
EXT2档案系统将它所占用的逻辑分区划分成块组(block group),如下图所示:

逻辑分区
和很多档案系统一样, EXT2 建立在数据被保存在数据块中的档案内这个前提下。这些数据块长度相等且这个长度可以变化,某个EXT2 档案系统的块大小在创建(使用mke2fs)时设定。每个档案的大小和刚好大于它的块大小正数倍相等。如果块大小为1024 位元组而一个1025 位元组长的档案将占据两个1024 位元组大小的块。这样你不得不浪费差不多一半的空间。我们通常需要在CPU 的记忆体利用率和磁碟空间使用上进行折中。而大多数作业系统,包括Linux 在内,为了减少CPU 的工作负载而被迫选择相对较低的磁碟空间利用率。并不是档案中每个块都包含数据,其中有些块被用来包含描叙此档案系统结构的信息。EXT2通过一个inode 结构来描叙档案系统中档案并确定此档案系统的拓扑结构。inode 结构描叙档案中数据占据哪个块以及档案的存取许可权、档案修改时间及档案类型。EXT2 档案系统中的每个档案用一个inode 来表示且每个inode 有唯一的编号。档案系统中所有的inode都被保存在inode 表中。 EXT2 目录仅是一个包含指向其目录入口指针的特殊档案(也用inode表示)。
对档案系统而言档案仅是一系列可读写的数据块。档案系统并不需要了解数据块应该放置到物理介质上什幺位置,这些都是设备驱动的任务。无论何时只要档案系统需要从包含它的块设备中读取信息或数据,它将请求底层的设备驱动读取一个基本块大小整数倍的数据块。EXT2 档案系统将它所使用的逻辑分区划分成数据块组。每个数据块组将那些对档案系统完整性最重要的信息複製出来, 同时将实际档案和目录看作信息与数据块。为了发生灾难性事件时档案系统的修复,这些複製非常有必要。
与微软比较
相同点
用户和组
Linux是多用户多任务作业系统而Windows是单用户多任务作业系统。都可以由许多不同的用户来使用,为每个用户提供单独的环境和资源。基于用户身份来控制安全性。都可以以组成员的方式来控制资源的访问许可权,这样在用户数目较大时可以不必为每一个帐号设定许可权。
用户和组可以集中管理,让多个伺服器共享相同的用户和身份验证数据。
档案系统
Linux和Windows都支持多种档案系统。档案资源可以通过NetBIOS、FTP或者其他协定与其他客户机共享。可以很灵活地对各个独立的档案系统进行组织,由管理员来决定它们在何处可以以何种方式被访问。
连线埠和设备
两种作业系统都支持各种物理设备连线埠,比如并口、串口和 USB 接口。支持各种控制器,比如 IDE 和 SCSI 控制器。Linux 还支持很多“刚刚上市”的标準硬体。
网路
Linux和Windows都支持多种网路协定,比如TCP/IP、NetBIOS和IPX。都支持多种类型的网路适配器。都具备通过网路共享资源的能力,比如已分享档案和列印。都可以提供网路服务能力,比如 DHCP 和 DNS。
服务
Linux和Windows都提供服务。所谓服务,指的是那些在后台运行的应用程式,可以为系统和远程调用该服务的计算机提供一些功能。在系统引导的时候可以单独控制并自动启动这些程式。(注意:Linux 中沿用了 Unix 的习惯,称这种应用程式为 daemon)
不同点
Linux 的套用目标是网路而不是列印
Windows最初出现的时候,这个世界还是一个纸张的世界。Windows的伟大成就之一在于您的工作成果可以方便地看到并列印出来。这样一个开端影响了 Windows 的后期发展。
同样,Linux 也受到了其起源的影响。Linux 的设计定位于网路作业系统。它的设计灵感来自于 Unix作业系统,因此它的命令的设计比较简单,或者说是比较简洁。由于纯文本可以非常好地跨网路工作,所以 Linux 配置档案和数据都以文本为基础。
对那些熟悉图形环境的人来说,Linux伺服器初看可能比较原始。但是Linux开发更多关注的是它的内在功能而不是表面上的东西。即使是在纯文本的环境中,Linux同样拥有非常先进的网路、脚本和安全能力。执行一些任务所需的某些表面上看起来比较奇怪的步骤是令人费解的,除非您认识到 Linux 是期望在网路上与其他 Linux系统协同执行这些任务。Linux的自动执行能力也很强,只需要设计批处理档案就可以让系统自动完成非常详细的任务。Linux 的这种能力来自于其基于文本的本质。
可选的 GUI
Linux有图形组件。Linux支持高端的图形适配器和显示器,完全胜任图形相关的工作。许多数字效果艺术家在Linux工作站上来进行他们的设计工作,而以前这些工作需要使用IRIX系统来完成。但是,图形环境并没有集成到 Linux 中,而是运行于系统之上的单独一层。这意味着您可以只运行 GUI,或者在需要时才运行 GUI。如果您的系统主要任务是提供Web套用,那幺您可以停掉图形界面,而将其所用的记忆体和CPU资源用于您的服务。如果您需要在 GUI 环境下做一些工作,可以再打开它,工作完成后再将其关闭。
Linux 有图形化的管理工具,以及日常办公的工具,比如电子邮件、网路浏览器和文档处理工具等。不过,在 Linux 中,图形化的管理工具通常是控制台 (命令行) 工具的扩展。也就是说,用图形化工具能完成的所有工作,用控制台命令同样可以完成。同样,使用图形化工具并不妨碍您对配置档案进行手工修改。其实际意义可能并不是特别显而易见,但是,如果在图形化管理工具中所做的任何工作都可以以命令行的方式完成,这就表示那些工作也可以由一个脚本来实现。脚本化的命令可以成为自动执行的任务。Linux 同时支持这两种方式,并不要求您只用文本或者只用 GUI。您可以根据您的需要选择最好的方法。
Linux 中的配置档案是人类可读的文本档案,这与过去的 Windows 中的 INI 档案类似,但与 Windows 的注册表机制在思路上有本质的区别。每一个应用程式都有其自己的配置档案,而且通常不与其他的配置档案放在一起。不过,大部分的配置档案都存放于一个目录树 (/etc) 下的单个地方,所以看起来它们在逻辑上是在一起。文本档案的配置方式使得不通过特殊的系统工具就可以完成配置档案的备份、检查和编辑工作。
档案名称扩展
Linux不使用档案名称扩展来识别档案的类型。相反,Linux根据档案的头内容来识别其类型。为了提高档案可读性您仍可以使用档案名称扩展,但这对 Linux 系统来说没有任何作用。不过,有一些应用程式,比如 Web 伺服器,可能使用命名约定来识别档案类型,但这只是特定的应用程式的要求而不是 Linux 系统本身的要求。
Linux通过档案访问许可权来判断档案是否为执行档。任何一个档案都可以赋予可执行许可权,这样程式和脚本的创建者或管理员可以将它们识别为执行档。这样做有利于安全。保存到系统上的可执行的档案不能自动执行,这样就可以防止许多脚本病毒。
重新引导是最后的手段
如果您使用Windows已经很长时间了,您可能已经习惯出于各种原因(从软体安装到纠正服务故障)而重新引导系统。在Linux思想中您的这一习惯需要改变。Linux在本质上更遵循“牛顿运动定律”。一旦开始运行,它将保持运行状态,直到受到外来因素的影响,比如硬体的故障。实际上,Linux系统的设计使得应用程式不会导致核心的崩溃,因此不必经常重新引导(与Windows系统的设计相对而言)。所以除了Linux核心之外,其他软体的安装、启动、停止和重新配置都不用重新引导系统。
如果您确实重新引导了 Linux 系统,问题很可能得不到解决,而且还会使问题更加恶化。学习并掌握 Linux 服务和运行级别是成功解决问题的关键。学习 Linux 最困难的就是克服重新引导系统的习惯。
另外,您可以远程地完成Linux中的很多工作。只要有一些基本的网路服务在运行,您就可以进入到那个系统。而且,如果系统中一个特定的服务出现了问题,您可以在进行故障诊断的同时让其他服务继续运行。当您在一个系统上同时运行多个服务的时候,这种管理方式非常重要。
命令区分大小写
所有的 Linux 命令和选项都区分大小写。例如, -R 与 -r 不同,会去做不同的事情。控制台命令几乎都是小写的。