2022年Linux文件系统总结 .pdf
《2022年Linux文件系统总结 .pdf》由会员分享,可在线阅读,更多相关《2022年Linux文件系统总结 .pdf(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第三章 Linux文件管理 z每种操作系统都有自己独特的文件系统,如MS-DOS 文件系统、UNIX 文件系统等。z文件系统包括了文件的组织结构、处理文件的 数据结构、操作文件 的方法等。zLinux 自行设计开发的的文件系统称为EXT2。zLinux 还支持多种其它操作系统的文件系统,例如 minix、ext2、hpfs、msdos、umsdos、iso、nfs、sysv、affs、ufs、efs 等达二十几种。zLinux 的虚拟文件系统VFS 屏蔽了各种文件系统的差别,为处理各种不同文件系统提供了统一的接口。3.1 Linux文件系统概论 一 Linux 文件系统的树型结构zLinux
2、 文件系统采用了多级目录的树型层次结构 管理文件。z树型结构的最上层是根目录,用 表示。在根目录之下是各层目录和文件。z在每层目录中可以包含多个文件或下一级目录。z每个目录和文件都有由多个字符组成的目录名 或文件名。z系统在运行中通过使用命令或系统调用进入任何一层目录,这时系统所处的目录称为当前目录。zLinux 使用两种方法来表示文件或目录的位置,绝对路径 和相对路径。z绝对路径 是从根目录开始依次指出各层目录的名字,它们之间用”分隔,如/usr/include。z相对路径 是从当前目录开始,指定其下层各个文件及目录的方法,如系统当前目录为/usr,bin/cc。zLinux 的一个 目录是
3、一个驻留在磁盘上的文件,称为目录文件。系统对目录文件的处理方法与一般文件相同。z目录由若干 目录项 组成,每个目录项对应目录中的一个文件。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 28 页 -2z在一般操作系统的文件系统中,目录项由文件名 和属性、存放位置、大小、建立或修改时间、访问权限等文件控制信息 组成。zLinux 继承了 UINX,把文件名 和文件控制信息 分开管理。z文件控制信息 单独组成一个称为i 节点(inode)的结构体。inode 实质上是一个由系统管理的“目录项”。z每个文件对应一个inode,它们有唯一的编号,称为inode 号。zLinux 的目录项
4、只由两部分组成:文件名和 inode 号。二文件的类型1 普通文件计算机用户和操作系统用于存放数据、程序等信息的文件。一般都 长期地存放在外存储器(磁盘、磁带等)中。普通文件一般又分为文本文件 和二进制文件。2 目录文件是文件系统中一个目录所包含的目录项组成的文件。目录文件只允许系统进行修改。用户进程 可以读取目录文件,但 不能 对它们进行 修改。两个特殊的目录项”?”代表目录本身,”?”表示父目录。3.设备文件用于 与 I/O 设备提供连接 的一种文件,分为 字符设备文件 和块设备文件,对应于字符设备和块设备。Linux把对设备的 I/O 做为普通文件的读取/写入操作,内核提供了对设备处理和
5、对文件处理的统一接口。每一种 I/O设备对应一个设备文件,存放在/dev 目录中,如行式打印机对应/dev/lp,第一个软盘驱动器:/dev/fd0。4.管道文件主要用于 在进程间传递数据。管道是进程间传递数据的“媒介”。某进程数据写入管道的一端,另一个进程从管道另一端读取数据。Linux 对管道的操作与文件操作相同,它把管道做为文件进行处理。管道文件又称先进先出(FIFO)文件。5.链接文件又称 符号链接文件,它提供了 共享文件 的一种方法。在链接文件中不是通过文件名实现文件共享,是通过链接文件中包含的指向文件的指针来实现对文件的访问。普通用户可以建立链接文件,并通过其指针所指向的文件。使用
6、链接文件可以访问普通文件,还可以访问目录文件 和不具有普通文件实态的其它文件。它可以在不同的文件系统之间建立链接关系,名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 28 页 -3z从对文件内容处理的角度,无论是哪种类型的文件,Linux 都把它们看做是 无结构的流式文件,即把文件的内容看做是一系列有序的字符流,三文件的访问权限z为了保证文件信息的安全,Linux 设置了 文件保护机制,其中之一就是给文件都设定了一定的访问权限。z当文件被访问时,系统首先检验访问者的权限,只有与文件的访问权限相符时才允许对文件进行访问。zLinux 中的每一个文件都归某一个特定的用户 所有,而且一
7、个用户一般总是与某个用户组 相关。zLinux 对文件的访问设定了三级权限:文件所有者,与文件所有者同组的用户,其他用户。z对文件的访问主要是三种处理操作:读取、写入 和执行。z三级访问权限和三种处理操作形成了9 种情况:3.2 EXT2文件系统 zLinux 最初引进了Minix 文件系统。Minix 文件系统有较大的局限性。z1992 年 4月推出 EXT(EXTended File system)z1993 年推出了 EXT2文件系统。zEXT2已经成为 Linux 的标准文件系统。一、EXT2 文件系统的构造z文件是存储在 块设备 上的。z在块设备中文件的组织和管理是以物理块 为单位
8、的。物理块是块设备上划分的大小相同的存储区域,如磁盘的扇区。z当文件存储在块设备上时也被划分成与物理块大小相等的逻辑块。文件在存储设备中是由一系列的逻辑块序列组成的。z一个文件系统一般使用块设备上的一个独立的逻辑分区。z在文件的逻辑分区中除了表示文件内容的逻辑块(称为数据块)外,还设置了若干包含管理和控制信息的逻辑块。zEXT2文件系统 也是由 逻辑块序列 组成的。zEXT2文件系统把所使用的逻辑分区划分成块组(Block Group),并从 0 开始依次编号。z每个块组中包含若干数据块,数据块中就是目录或文件内容。z块组中包含着几个用于管理和控制的信息块:名师资料总结-精品资料欢迎下载-名师
9、精心整理-第 3 页,共 28 页 -4z超级块、组描述符表、块位图、inode 位图 和 inode 表。二 EXT2 超级块(super block)z超级块 是用来描述 EXT2文件系统整体信息 的数据结构主要描述文件系统的目录和文件的静态分布 情况,以及描述文件系统的各种组成结构的尺寸、数量等。z超级块对于文件系统的维护是至关重要的。z超级块位于 每个块组的最前面,每个块组中包含的超级块内容是相同的。z在系统运行期间,需要把超级块复制到内存的系统缓冲区内。只需把块组0 的超级块读入内存,其它块组的超级块做为备份。z在 Linux 中,EXT2超级块定义为ext2_super_block
10、结构。成员项意 义s_inodes_count inode的总数量s_blocks_count 块的总数量s_r_blocks_count 保留块的数量s_free_blocks_count 空闲块的数量s_free_inodes_count 空闲 inode 数量s_first_data_block 第一个数据块的块号s_log_block_size 逻辑块长度s_log_frag_size 片(fragment)长度s_blocks_per_group 每个块组包含的块数s_frags_per_group 每个块组包含的片(fragment)数s_inodes_per_group 每个块组
11、包含的inode 数s_mtime 安装时间s_wtime 最后一次写入时间名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 28 页 -5s_mnt_count 安装计数,每安装一次其值增1 s_max_mnt_count 安装最大数,达到此数将显示警告信息s_magic 文件系统署名,EXT2为 0 xEF53 s_state 文件系统状态s_errors 出错时文件系统的动作s_minor_rev_level 改版标志s_lastcheck 最后一次文件系统检测时间s_checkinterval 两次检测相隔的最大时间间隔s_creator_os 可以使用该文件系统的操作系统
12、的ID s_rev_level 版本标志,系统以此识别是否支持某些属性s_def_resuid 可以使用保留块的默认用户uid s_def_resgid 可以使用保留块的默认用户组gid 三内存中超级块的映像zext2_super_block结构是超级块 在磁盘中的形态。z在系统运行期间磁盘上的超级块要读入到内存,在内存建立一个 超级块的映像。z内存中的超级块映像定义为ext2_sb_info结构,名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 28 页 -6在/include/linix/ext2_fs_sb.h中定义如下:struct ext2_sb_info unsigne
13、d long s_frag_size;/*fragment片的长度,以字节为单位*/unsigned long s_frags_per_block;/*每块中 fragment 片数 */unsigned long s_inodes_per_block;/*每块中 inode 数*/unsigned long s_frags_per_group;/*每一块组中fragment 数*/unsigned long s_blocks_per_group;/*每一块组中块数 */unsigned long s_inodes_per_group;/*每一块组中 inode 数*/unsigned lon
14、g s_itb_per_group;/*每一块组中inod 表占用的块数 */unsigned long s_db_per_group;/*每一块组中描述符占用的块数*/unsigned long s_desc_per_block;/*一块中组描述符数*/unsigned long s_groups_count;/*整个文件系统中的块组数*/struct buffer_ head*s_sbh;/*指向内存中包含超级块的缓冲区的指针*/struct ext2_super_block*s_es;/*指向缓冲区中超级块的指针*/struct buffer_head*s_group_desc;/*指向
15、缓冲区组描述符数组的指针*/struct buffer_head*s_group_desc;/*指向缓冲区组描述符数组的指针*/unsigned short s_loaded_inode_bitmaps;/*装入缓冲区的inode 位图块数 */unsigned short s_loaded_block_bitmaps;/*装入缓冲区的块位图块数*/unsigned long s_inode_bitmap_numberEXT2_MAX_GROUP_LOADED;/*inode位图数组 */struct buffer_head*s_inode_bitmapEXT2_MAX_GROUP_LOADE
16、D;/*inode位图指针数组 */unsigned long s_block_bitmap_numberEXT2_MAX_GROUP_LOADED;/*块位图数组 */struct buffer_head*s_block_bitmapEXT2_MAX_GROUP_LOADED;/*块位图指针数组 */int s_rename_lock;/*重命名时的锁信号量*/struct wait_queue*s_rename_wait;/*重命名时的等待队列指针*/unsigned long s_mount_opt;/*安装选项 */unsigned short s_resuid;/*可以使用保留块的用
17、户uid*/unsigned short s_resgid;/*可以使用保留块的用户组gid*/unsigned short s_mount_state;/*超级用户使用的安装选项*/unsigned short s_pad;/*填充*/名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 28 页 -7 int s_addr_per_block_bits;/*块地址(编号)的位(bit)数*/int s_desc_per_block_bits;/*块描述符的位(bit)数*/int s_inode_size;/*inode长度*/int s_first_ino;/*第一个 inode
18、 号*/;四组描述符组描述符 表的每个表项是一个组描述符。组描述符是一个ext2_group_desc结构,用来 描述一个 块组的有关信息,定义在/include/linix/ext2_fs.h 中:struct ext2_group_desc _u32 bg_block_bitmap;/*本组中块位图的位置*/_u32 bg_inode_bitmap;/*本组中 inode 位图的位置 */_u32 bg_inode_table;/*本组中 inode 表的位 */_u16 bg_free_blocks_count;/*本组中空闲块数 */_u16 bg_free_inodes_count;
19、/*本组中空闲inode 数*/_u16 bg_used_dirs_count;/*本组中所含目录数*/_u16 bg_pad;/*填充*/_u32 bg_reserved3;/*保留*/;zLinux 的组描述符 为 32 字节,z每一个 块组 有一个 组描述符。z所有的 组描述符集中在一起依次存放,形成 组描述符表。z描述符表中的组描述符的顺序与块组在磁盘上的顺序对应。z组描述符可能占用多个物理块。z具有相同内容的 组描述符表 放在 每个块组 中做为备份,名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 28 页 -8五块位图zEXT2文件系统中 数据块的使用状况 由块位图 来
20、描述。z每个块组 都有 一个块位图,位于组描述符表之后,用来描述本块组中 数据块的使用状况。z块位图的每 一位(bit)表示 一个数据块 的使用情况,为 1 表示对应的数据块已占用,为 0 表示数据块 空闲。z各位(bit)的顺序与块组中数据块的顺序一致。z块位图一般占用 一个逻辑块。zEXT2块位图 装入一个 高速缓存 中。z高速缓存容纳EXT2_MAX_GROUP_LOAD个块位图,该值目前定义为8。z系统并采用类似LRU的算法管理高速缓存。z在超级块的内存映像ext2_sb_info结构中,s_loaded_block_bitmaps表示装入高速缓存的块位图的数目。s_block_bit
21、map_number存放装入高速缓存的块位图的块组号,s_block_bitmap 数组中是相应块位图在高速缓存的地址。3.3 EXT2 的 inode和目录结构 一 EXT2 文件系统 inode 结构z在 EXT2文件系统中 inode 是基本的构件,它表示文件系统树型结构的节点。每一个节点是一个文件或目录。zEXT2文件系统中的 每个文件 由一个 inode 描述,且 只能由一个 inode 描述。z在 Linux 中 EXT2文件系统的 inode 定义为 struct ext2_inode。该定义在/include/linux/ext2_fs.h中。名师资料总结-精品资料欢迎下载-名
22、师精心整理-第 8 页,共 28 页 -9成员项意义i_mode 文件类型和访问权限i_uid 文件所有者用户uid i_size 文件大小,以字节为单位i_atime 文件最后一次访问时间i_ctime 该 inode 最后修改时间i_mtime 文件内容最后修改时间i_dtime 文件删除时间i_gid 文件的用户组标识gid i_links_count 文件的链接数i_blocks 文件所占块数(每块512 字节)i_flags 文件标志(属性)i_block 数据块指针数组i_version 文件版本 (用于 NFS)i_file_acl 文件访问控制链表(Linux2.0以后版本不再
23、使用)i_dir_acl 目录访问控制链表(Linux2.0以后版本不再使用)i_faddr Fragment 地址i_frag 每块中的片数i_fsize 片大小i_pad1 填充 i_reserved2 保留 i_mode 指定了 inode 文件的 类型和访问权限:S_IFREG普通文件S_IFBLK块设备文件S_IFDIR目录文件S_IFCHR字符设备文件FIFO文件S_IFLNK符号链接文件S_ISUID访问权限设定为用户idS_ISGID访问权限设定为用户组id i_block指针数组,指向文件内容所在的数据块。i_block数组共有 15 个指针,前12 个指针直接指向数据块称为
24、直接块指针。第 13 个元素是 一次间接块指针。第 14 个元素是 二次间接块指针。第 15 个元素是 三次间接块指针。名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 28 页 -10 i_flags是文件属性 的标志:EXT2_SECRM_FL完全删除 标志。EXT2_UNRM_FL 可恢复删除 标志。EXT2_COMPR_FL文件压缩 标志。EXT2_SYNC_FL 同步更新 标志。EXT2_IMMUTABLE_FL不允许修改 标志。EXT2_APPEND_FL 追加写 标志。EXT2_NODUMP_FL 非转储标志。EXT2_NOATIME_FL不变更文件访问时间atime
25、 二 EXT2 inode 在内存中的映像zEXT2文件系统的 inode 与文件 一起存放 在外存,z在系统运行时,把EXT2的 inode 写入内存建立映像,z该内存映像定义为ext2_inode_info 结构,在 include/linux/ext2_fs_i.h中,如下所示:struct ext2_inode_info _u32 i_data15;/*数据块指针数组 */_u32i_flags;/*文件标志(属性)*/_u32i_faddr;/*Fragment(片)地址 */_u8 i _frag_no;/*Fragment(片)号 */名师资料总结-精品资料欢迎下载-名师精心整理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Linux文件系统总结 2022 Linux 文件系统 总结
限制150内