第2章 文 件 系 统 2.1 文件系统及其分类 2.2 二级扩展文件系统ext2构成 2.3 虚拟文件系统VFS 2.4 缓冲区的缓存 第2章 文 件 系 统 2.1 文件系统及其分类 2.2 二级扩展文件系统ext2构成 2.3 虚拟文件系统VFS 2.4 缓冲区的缓存 2.5 特 殊 设 备 文 件 2.6 Linux系统目录结构 2.7 文件系统管理
本章提要 文件系统概述 文件系统分类与构成 虚拟文件系统 目录结构 进程管理 文件管理 用户管理
2.1 文件系统及其分类 Linux支持的文件系统格式:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。其中:ext3、ReiserFS、XFS、JFS均为提供日志功能的日志文件系统。
2.1.1 扩展文件系统ext 2.1.2 二级扩展文件系统ext2 ext是第一个专门为Linux开发的文件系统类型,也称扩展文件系统。
ext2存在的问题是:如果在写入文件的元数据之前系统突然断电,那么将引发文件系统内容的不一致性,甚至会出现系统瘫痪的严重后果。
2.1.3 升级的扩展文件系统ext3 ext3是ext2的升级版。 在分区中保存日志记录的优点是:文件系统写操作首先是对记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,则在下次系统启动时就会根据日志记录文件的内容,使系统恢复到写操作之前的状态。
2.1.4 JFS日志文件系统 它具有可伸缩性和健壮性,与非日志文件系统相比,它的优点是快速重启能力:JFS能够在几秒或几分钟内就把文件系统恢复到一致状态。
2.1.5 ReiserFS 1.先进的日志机制 2.高效的磁盘空间利用 3.独特的搜寻方式 4.支持海量磁盘 ReiserFS是最早用于Linux的日志文件系统之一。ReiserFS的特点包括: 1.先进的日志机制 2.高效的磁盘空间利用 3.独特的搜寻方式 4.支持海量磁盘
5.优异的性能 ReiserFS文件系统的缺点是,每升级一个版本都将要将磁盘重新格式化一次,它的安全性能和稳定性与ext3相比有一定的差距。由于ReiserFS文件系统不能正确处理超长的文件目录,因此若创建一个超过768字符的文件目录,并使用ls或其他echo命令时,将有可能导致系统挂起。
2.1.6 XFS XFS是一个非常优秀的日志文件系统,它是由SGI于20世纪90年代初开发的。 XFS使用大型的条带式磁盘阵列,提供达数GB/秒的总带宽,因此具有极好的I/O性能。 由于XFS比较复杂,实施起来有一些难度,所以目前XFS主要应用于Linux企业应用的高端。
2.1.7 其他文件系统简述 Minix是Linux支持的第一个文件系统,它的文件名最长为l4个字符,性能低下,对用户有很多限制。 2.1.7 其他文件系统简述 Minix是Linux支持的第一个文件系统,它的文件名最长为l4个字符,性能低下,对用户有很多限制。 Xia是Minix文件系统修正后的版本,在一定程度上解决了文件名和文件系统大小的局限。
SysV是System V/Coherent在Linux平台上的文件系统。 NFS网络文件系统,允许多台计算机之间共享同一文件系统,易于从所有这些计算机上存取文件。 SMB是一种支持Windows for Workgroups、Windows NT和Lan Manager的、基于SMB协议的网络操作系统。
UMSDOS是Linux下的扩展MSDOS文件系统驱动,支持长文件名、所有者、允许权限、连接和设备文件,允许一个普通的MSDOS文件系统用于Linux,而且无须为它建立单独的分区。 ISO9660是标准CDROM文件系统。 NTFS是Windows NT/2000操作系统支持的文件系统。
MSDOS是在DOS、Windows和某些OS/2操作系统上使用的一种文件系统。 VFAT是Windows 9x和Windows NT/2000下使用的一种DOS文件系统。 HPFT是微软的LAN Manager中的高性能文件系统。
NCPFS是一种Novell的NetWare系统使用的。 /proc文件系统是一个伪文件系统,不占用存储空间。 SWAP文件系统是一个虚拟的文件系统。用于Linux磁盘交换分区的特殊文件系统。
2.1.8 Linux文件系统类型 不同的Linux版本所支持的文件系统类型和种类有所不同。 文件系统是操作系统用于表示在磁盘上组织文件的方法,它是整个操作系统的重要组成部分,是操作系统正常运行的基本条件。
2.2 二级扩展文件系统ext2构成 2.2.1 ext2文件系统的分区格式 ext2是为Linux设计的一个可扩展的高性能文件系统。 对于ext2文件系统来说,硬盘分区被划分为块(block),每块大小相同,但是对于不同的ext2文件系统,块的大小可以不同。
每个块组都对应一个组描述符(group descriptor),这些组描述符聚集在一起,位于硬盘分区的开始,紧跟在超级块(super block)的后面。在组描述符中有几个重要的块指针。这里所谓的块指针(block),实际上是指硬盘分区上的块(block)号。如,指针的值为 0,则指向硬盘分区上的block 0;指针的值为1023,则指向硬盘分区上的block 1023。
图2-3 ext2文件系统的物理结构
2.2.2 ext2文件系统的inode节点 在ext2文件系统中,inode节点是系统的基本单元。
图2-4 ext2的inode节点
模式 所有者信息 长度 时戳 文件数据块索引
2.2.3 ext2文件系统的超级块 ext2 文件系统的超级块(super block),位于硬盘分区第1024字节开始往后的一部分数据。
ext2文件系统的超级块中包含内容说明: 魔数域(Magic Number) 修订级别域(Revision Level) 安装记数和最大安装记数 块组号域 块长度域 每组的块数域 自由块数域 自由inode数域 第一个inode节点
2.2.4 ext2系统的组描述符(group descriptors) 每个块组都有一个数据结构,称为“组描述符”。像超级块一样,为了防止文件系统崩溃,所有块组的数据结构在块组内都有备份,每个组描述符包括如下信息: 块组位图块号 inode位图块号 inode表块号
在块组(block group)的组描述(group descriptors)域中有一块指向i节点位图(inode bitmap),此位图同样只有一块(block)大小。其中的每一位对应一个i节点。
2.2.5 ext2系统的目录 在ext2文件系统中,目录是一种特殊的文件。目录文件是一组目录项的列表,每个目录项包含下列信息: inode节点号:记录目录项的inode节点号。它是块组的inode表中记录的inode数组的索引值。 名字长度:以字节为单位来表示本目录项的长度。 名字:本目录项的名字
2.2.6 ext2文件系统的文件操作 Linux的文件名与UNIX文件名有相同的格式,它是用“/”分隔的一组目录名,并且最后以文件名来结尾。
文件系统的一个共同问题是文件碎片。由于记录文件的数据块随机分布在文件系统的数据块上,数据块间隔越大对于一个文件的若干数据块访问的效率就越低。为此,ext2文件系统在给文件分配数据块时,尽量分配与文件的首个数据块位置接近或在同一个块组的数据块来提高系统的访问效率。
2.2.7 ext2文件系统的进程操作 进程表示正在运行的程序。进程有三种状态:运行态、就绪态和等待态。运行态表示进程占有CPU正在运行;就绪态表示进程本身具备运行条件,在等待CPU的资源;等待态表示进程本身不具备运行条件,即使分给它CPU也不能运行。
进程一旦创建就进入到就绪态;若被CPU调度而占有CPU,就进入运行态;若运行完毕就撤消,若等待某事件发生就转为等待态;一旦所等待的事件发生,进程就由等待态转为就绪态。
2.3 虚拟文件系统VFS 虚拟文件系统负责管理所有已经安装的文件系统,它通过维护描述整个虚拟文件系统和真实的被安装的文件系统的数据结构(即VFS自身的超级块和inode节点,不同于ext2的超级块和inode节点)的方式来表示系统的文件。
图2-5 虚拟文件系统(VFS)与真实文件系统的关系
2.3.1 VFS文件系统的inode节点 2.3.2 注册文件系统 2.3.2 注册文件系统 文件系统模块在载入时向内核注册,并在在卸载时向内核注消。每个文件系统的初始化程序向VFS文件系统注册,并由一个文件系统类型的数据结构来表示。
超级块:安装时由VFS文件系统调用。 文件系统名:对应的文件系统的名称:如ext2。 所需设备:保存文件系统的设备。有些文件系统不需要保存的设备,如/proc文件系统不需要支持的块设备。
2.3.3 安装文件系统 在安装文件系统时,Linux内核首先验证传入系统调用中的参数的有效性。 2.3.3 安装文件系统 在安装文件系统时,Linux内核首先验证传入系统调用中的参数的有效性。 VFS文件系统的第一个工作就是查找待安装的文件系统。 之后,VFS文件系统的安装代码要分配一个VFS超级块,并把安装信息传递给这个文件系统的超级块。 每个安装的文件系统由vfsmount数据结构来表示。
图2-6 安装的文件系统
2.3.4 卸载文件系统 文件系统成功的卸载只能发生在对被卸载的文件系统的各种操作全部结束以后。也就是说,
2.4 缓冲区的缓存 在使用安装的文件系统时,每次操作都会向块设备发出大量的读、写数据块的请求。所有的读、写数据块的请求,都通过标准内存调用程序与设备驱动程序连接。
Linux使用如下几类缓冲区: 空白(clean)缓冲区:未使用的新缓冲区。 锁定(locked)缓冲区:表明缓冲区已被锁定,等待写入。 dirty缓冲区:在此缓冲区里包含了需要被写回到硬盘上的有效数据,但系统还没有执行对硬盘的写操作。
共享(shared):共享的缓冲区。 未共享( unshared):缓冲区曾经被共享过,但现在没有处于共享状态。 当文件系统需要从物理设备读数据时,它会首先从缓冲区缓存中查找,若缓冲区缓存中没有,文件系统就会从相应大小的自由块表中找一个空白的缓冲区并把它加入到缓冲区缓中,对新的块缓冲区,文件系统将请求设备驱动程序从物理设备上读入相应的数据块。
2.5 特 殊 设 备 文 件 Linux把所有的硬件设备作为一个特殊文件看待。例如:/dev/null是空设备。设备文件不使用文件系统的任何数据空间,它只是设备驱动程序的访问点。 ext2文件系统和Linux VFS文件系统都把设备文件作为特殊类型的inode节点。
2.6 Linux系统目录结构 Linux文件系统的目录结构是一棵倒挂树。它由树根和树叉组成。根目录"/"就是此倒挂树的根,根下的目录就是树叉。
2.7 文件系统管理 文件系统的管理由系统内核来完成。系统内核是系统用来管理用户程序对系统硬件资源访问的软件。 2.7 文件系统管理 文件系统的管理由系统内核来完成。系统内核是系统用来管理用户程序对系统硬件资源访问的软件。 内核由四个部分组成:进程管理、内存管理、I/O管理和文件管理。
文件的逻辑结构和物理结构是不同的,逻辑结构是用户使用编辑命令(vi等)或显示命令(more等)所看到的文件,是用户可得到表示文件内容的字符流。 在Linux文件系统中每个文件都是用i节点来控制的。 Linux使用64字节长的i节点,来实现文件逻辑结构和物理结构之间的转换和管理的。
文件系统将文件名转换为i节点的方法实际上相当简单。我们来看目录的结构,目录实际上是一个含有目录表的文件:对于目录中的每个文件,在目录表中有一个入口项,入口项中含有文件名和与文件相应的i节点号。当用户键入cat xxx时,文件系统就在当前目录表中查找名为xxx的项,由此得到与文件xxx相应的i节点号,然后开始读取含有文件xxx内容的数据块。
2.7.1 文件管理 1.文件的访问权限 inode节点中的一项重要内容就是对文件的访问权限。 2.7.1 文件管理 inode节点中的一项重要内容就是对文件的访问权限。 1.文件的访问权限 每个文件和目录有三组权限:①文件的拥有者的权限,又称属主的权限;②文件所属用户组成员的权限;③其他所有用户的权限(除所有者和同组用户外的用户)。每组权限有三个权限标志,分别标识三种权限:
可读(r):若设置此位,则文件或目录具有读权限。 可写(w):若设置此位,则文件或目录具有写和修改权限。 可执行(x):若设置此位,则文件或目录具有执行和查找权限。
2.文件的类型 Linux操作系统中的文件共有8类。其中设备文件有两类:面向字符设备的特殊文件和面向块设备的特殊文件。前者允许I/O操作以字符的形式进行,而后者通过内存缓冲区来使数据的读、写操作以数据块的方式进行。
普通文件 目录文件 链接 套接字 有名管道 字符设备 块设备
2.7.2 进程管理 1.进程启动 (1)手工启动 (2)调度启动进程 2.进程的查看方式
2.7.3 进程记账 1.编译内核 2.启动记账进程accton 3.观察,汇总记账的命令 2.7.3 进程记账 对用户的各种操作进行记录,又称进程记账。记账的内容包括用户使用的CPU时间,进行操作消耗的资源等等。 1.编译内核 2.启动记账进程accton 3.观察,汇总记账的命令
2.7.4 用户管理 用户管理涉及添加、删除用户,添加、删除用户组,还涉及有完成用户和用户组管理的相关命令。
1.用户账号管理 系统管理员的一个重要任务是管理用户。用户管理的日常任务包括创建用户、管理用户和删除用户。系统每创建一个用户,需要完成3个任务:第一,在/etc/passwd文件中添加用户的相关信息;第二,在/etc/shadow文件中添加用户的密码和相关信息;第三,创建用户的登录目录,默认状态下是在/home目录下为用户创建登录目录。
2.管理用户组 系统中每个用户可以选择属于一个或多个用户组。
2.7.5 用户磁盘空间的管理 系统管理员的重要工作之一是实时监控系统资源,特别是磁盘空间。在Linux系统中规定,当磁盘空间使用率超过85%时,文件系统将不能正常工作。 为保证系统对用户使用磁盘空间的绝对限制,可以采用qouta应用程序为用户设定允许使用磁盘空间的上限。
1.检查服务器的 /etc/fstab文件有无设限 3.建立文件quota.user 4.重新启动服务器
5.为用户限定磁盘空间和创建文件个数 (1)编辑用户的磁盘空间和i节点数 (2)修改超过软soft 限制的宽限期 (3)拷贝相同用户的磁盘限额 图2-7 edquota命令编辑磁盘限额包含的内容
2.7.6 组用户的磁盘空间管理 在多用户操作系统中,每个用户都属于某个用户组,磁盘空间的限制也可以以组为单位限制一组用户使用的共享磁盘空间。 那么设置过程如下: ① #vi /etc/fstab ② 为用户组staff建立磁盘限额
2.7.7 常见的系统故障 1.关闭系统后普通用户不能登录 2.DNS失效 3.系统不能正常启动 4./dev中的设备文件受损 2.7.7 常见的系统故障 在Linux系统关机重起后,由于各种原因常常遇见的问题: 1.关闭系统后普通用户不能登录 2.DNS失效 3.系统不能正常启动 4./dev中的设备文件受损 5.检查与修复受损的文件系统