960 likes | 1.2k Views
Linux 文件管理. 张惠娟 副教授 Ms.zhj@163.com. 内容. linux 文件系统概论 EXT2 文件系统 VFS 虚拟文件系统 文件操作和使用. 概论. 文件系统特点 树型结构 文件类型 访问权限. 概论. 特点 自行设计开发的文件系统称为 EXT2 Linux 支持多种其它操作系统的文件系统: 如 minix 、 ext2 、 hpfs 、 msdos 、 umsdos 、 iso 、 nfs 、 sysv 、 affs 、 ufs 、 efs 等达二十几种。
E N D
Linux文件管理 张惠娟 副教授 Ms.zhj@163.com 1
内容 • linux文件系统概论 • EXT2文件系统 • VFS虚拟文件系统 • 文件操作和使用 2
概论 • 文件系统特点 • 树型结构 • 文件类型 • 访问权限 3
概论 • 特点 • 自行设计开发的文件系统称为EXT2 • Linux支持多种其它操作系统的文件系统: 如minix、ext2、hpfs、msdos、umsdos、iso、nfs、sysv、affs、ufs、efs等达二十几种。 • 虚拟文件系统VFS屏蔽了各种文件系统的差别,为处理各种不同文件系统提供了统一的接口。 4
概论 • 树型结构 • 采用多级目录的树型层次结构管理文件。 • 系统在运行中通过使用命令或系统调用进入任何一层目录,这时系统所处的目录称为当前目录。 5
概论 • Linux用两种方法来表示文件或目录的位置:绝对路径和相对路径。 • 绝对路径 • 相对路径 7
概论 • 文件类型 • 目录文件 • 普通文件 • 设备文件 • 管道文件 • 链接文件 8
概论 • 目录文件 • Linux一个目录是一个驻留在磁盘上的文件,称为目录文件。系统对目录文件的处理方法与一般文件相同。 • 目录由若干目录项组成,每个目录项对应目录中的一个文件。 • 目录项由文件名和属性、位置、大小、建立或修改时间、访问权限等文件控制信息组成。 9
概论 • Linux继承了UINX,把文件名和文件控制信息分开管理。 • i节点 i节点实质上是一个由系统管理的“目录项”,由文件控制信息单独组成的结构体。 • 每个文件对应一个i节点,有唯一编号,称为节点号。 • Linux目录项只由两部分组成:文件名和节点号。 10
概论 11
概论 • 普通文件 • 计算机用户和操作系统用于存放数据、程序等信息的文件。 • 一般都长期地存放在外存储器(磁盘、磁带等)中 • 普通文件一般又分为文本文件和二进制文件 12
概论 • 设备文件 • 分为字符设备文件和块设备文件。 • 内核提供了对设备处理和对文件处理的统一接口,每种I/O设备对应一个设备文件,存放在/dev目录中,如行式打印机对应/dev/lp,第一个软盘驱动器:/dev/fd0。 13
概论 • 管道文件 • 主要用于在进程间传递数据 • Linux对管道的操作与文件操作相同,把管道做为文件进行处理。 • 管道文件又称先进先出(FIFO)文件 14
概论 • 链接文件 • 也称为符号链接文件,提供了共享文件的一种方法。 • 不是通过文件名实现文件共享,而是通过链接文件包含指向文件的指针来实现对文件访问。 • 普通用户可以建立链接文件,并通过其指针所指向的文件。 15
概论 • 总之 从对文件内容处理的角度来说,无论是哪种类型文件,Linux都把它们看做是无结构的流式文件,即把文件内容看做是一系列有序的字符流。 16
概论 • 访问权限 • 目的 保证文件信息的安全,即文件被访问时,系统首先检验访问者权限,只有与文件访问权限相符时才允许对文件进行访问。 17
EXT2文件系统 • EXT2介绍 • 系统结构 • inode结构 18
EXT2介绍 • 最初引进了Minix文件系统,Minix文件系统有较大局限性 • 1992年4月推出EXT(EXTended File system) • 1993年推出了EXT2文件系统,EXT2已经成为Linux的标准文件系统 19
EXT2系统结构 • 系统结构 • EXT2超级块 • 内存中超级块的映像 • 组描述符 • 块位图 20
EXT2系统结构 • 系统结构 • 块设备 文件组织和管理是以物理块为单位。物理块是块设备上大小相同的存储区域,如磁盘的扇区。 • 一个文件系统一般使用块设备上一个独立的逻辑分区; • 文件逻辑分区中除了表示文件内容的逻辑块(称为数据块)外,还设置了若干包含管理和控制信息的逻辑块。 • 磁盘上可能有多个逻辑分区,每个分区使用不同的文件子系统。 21
EXT2系统结构 • EXT2文件系统由逻辑块序列组成的。 • EXT2文件系统把逻辑分区划分成块组,并从0开始依次编号。 • 每个块组中包含若干数据块,数据块中就是目录或文件内容。 • 块组中包含着几个用于管理和控制的信息块:超级块、组描述符表、块位图、inode位图和inode表。 22
EXT2系统结构 23
EXT2系统结构 • 超级块 • 描述文件系统整体信息的数据结构,主要描述文件系统的目录和文件的静态分布情况,以及描述文件系统的各种组成结构的尺寸、数量等。 24
EXT2系统结构 • 超级块位于每个块组的最前面,每个块组中包含的超级块内容是相同的。 • 系统运行期间,把超级块复制到系统缓冲区内,只需把块组0的超级块读入内存,其它块组的超级块做为备份。 • EXT2超级块ext2_super_block结构。 25
EXT2系统结构 28
EXT2系统结构 • 超级块映像 • ext2_super_block结构是超级块在磁盘中的形态,系统运行期间将磁盘上的超级块读入到内存,在内存建立一个超级块映像。 • 超级块映像定义为ext2_sb_info结构,定义在:/include/linix/ext2_fs_sb.h 29
EXT2系统结构 struct ext2_sb_info { unsigned long s_frag_size; /* 片的长度,以字节为单位 */ unsigned long s_frags_per_block; /* 每块中片数 */ unsigned long s_inodes_per_block;/* 每块中inode数 */ unsigned long s_frags_per_group; /* 每一块组中片数 */ unsigned long s_blocks_per_group;/* 每一块组中块数 */ unsigned long s_inodes_per_group;/* 每一块组inode数 */ unsigned long s_itb_per_group; /* 每块组节点表占用块数 */ unsigned long s_db_per_group; /* 每一块组中描述符占用的 块数 */ 30
EXT2系统结构 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; /* 指向描述符数组的指针 */ unsigned short s_loaded_inode_bitmaps; /* 装入缓冲区的inode位图 块数 */ unsigned short s_loaded_block_bitmaps;/* 装入缓冲区的块位图块数 */ unsigned long s_inode_bitmap_number[EXT2_MAX_GROUP_LOADED];/* inode位图数 。。。。。。。 31
EXT2系统结构 • 组描述符 • Linux组描述符为32字节,每一个块组有一个组描述符。所有组描述符集中在一起依次存放,形成组描述符表。 • 描述符表中的组描述符顺序与块组在磁盘上的顺序对应。 • 一个组描述符可能占用多个物理块,具有相同内容的组描述符表放在每个块组中做为备份, • 组描述符定义在/include/linix/ext2_fs.h中: 32
EXT2系统结构 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;/* 本组中空闲inode数 */ __u16 bg_used_dirs_count; /* 本组中所含目录数 */ __u16 bg_pad; /* 填充 */ __u32 bg_reserved[3]; /* 保留 */ }; 33
EXT2系统结构 34
EXT2系统结构 • 块位图 • 描述块的使用状况 • 每个块组都有一个块位图,位于组描述符表之后,用来描述本块组中数据块的使用状况。 • 块位图的每一位表示一个数据块的使用情况,为1表示对应数据块已占用,为0表示数据块空闲。 • 各位的顺序与块组中数据块顺序一致 • 块位图一般占用一个逻辑块 35
Inode结构 • inode结构 • inode表和inode位图 • inode在内存中的映像 • EXT2的目录结构 36
Inode结构 • inode结构 • inode是EXT2基本构件,表示文件系统树型结构的节点。 • EXT2文件系统中的每个文件由一个inode描述,且只能由一个inode描述。 • EXT2文件系统的inode 定义为struct ext2_inode,该定义在/include/linux/ext2_fs.h中。 37
Inode结构 38
Inode结构 39
Inode结构 • inode在内存中的映像 • inode与文件一起存放在外存,系统运行时,把inode写入内存建立映像。 • 内存映像定义为ext2_inode_info 结构,在include/linux/ext2_fs_i.h中定义: 41
Inode结构 struct ext2_inode_info { __u32 i_data[15]; /*数据块指针数组 */ __u32 i_flags; /* 文件标志(属性)*/ __u32 i_faddr; /* 片地址 */ __u8 i_frag_no; /* 片号 */ __u8 i_frag_size; /* 片大小 */ __u16 i_osync; /* 同步标志 */ 42
Inode结构 __u32 i_file_acl; /* 文件访问控制链表 */ __u32 i_dir_acl; /* 目录访问控制链表 */ __u32 i_dtime; /* 文件删除时间 */ __u32 i_version; /* 文件版本 */ __u32 i_block_group; /* inode所在块组号 */ __u32 i_next_alloc_block; /* 下一个要分配的块 */ __u32 i_next_alloc_goal; /*下一个要分配的对象 */ __u32 i_prealloc_block; /* 预留块首地址 */ __u32 i_prealloc_count; /* 预留计数 */ int i_new_inode:1; /* 标志,是否为新分配的inode */ }; 43
Inode结构 • inode表和inode位图 • 一个块组中所有文件的inode形成了inode表, 表项序号是inode号; • inode表存放在块组中所有数据块之前,在块组中要占用几个逻辑块由超级块中s_inodes_per_group给出。 • inode位图反映了inode表中各个表项的使用情况,每位表示inode表的一个表项,为1表示对应表项已占用,为0表示表项空闲。 44
EXT2的目录结构 • 目录文件中的目录项是ext2_dir_entry结构体,前后连接成一个类似链表的形式。 struct ext2_dir_entry { __u32 inode; /* inode号 */ __u16 rec_len; /* 目录项长度 */ __u16 name_len; /* 文件名长度 */ char name[EXT2_NAME_LEN]; /* 文件名 */ }; 其中: #define EXT2_NAME_LEN 255 45
EXT2的目录结构 46
虚拟文件系统VFS • 引言 • VFS的工作原理 • 文件系统的注册 • 文件系统的安装 • VFS超级块 • VFS的inode 47
虚拟文件系统VFS • 引言 • Linux除了自己的文件系统EXT2,还支持多种其它操作系统的文件系统。 • Linux的虚拟文件系统VFS屏蔽了各种文件系统的差别,为处理各种不同文件系统提供了统一的接口。 48
虚拟文件系统VFS • VFS的工作原理 49
虚拟文件系统VFS • 注意: • VFS并不是一种实际文件系统 • EXT2等物理文件系统是存在于外存空间的,而VFS 仅存在于内存 • VFS是在系统启动时建立,在系统关闭时消失的,物理文件系统是长期存在于外存。 • VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的inode等、各种操作函数的转换入口。 50